Archiwa kategorii: Arduino

Stacja kontroli temperatury z alarmem na dalekie odległości z możliwością rozbudowy.

Witam. Chciałbym podzielić się swoim projektem DIY, który wykonałem dla kolegi. Projekt jest dalej wspierany i rozbudowywany o kolejne elementy, także w najbliższym czasie mogą pojawić się nowe wpisy prezentujące nowe możliwości systemu. Na początek może sama idea projektu i jego założenia. Pomysł jak już wspomniałem podrzucił kolega, który zimą korzystał z przydomowej sauny. Jednak musiał pokonywać dystans z domu do sauny  ok. 50 m. w celu sprawdzenia temperatury nagrzania sauny. Nie było by to problemem teraz w lecie, jednak zimą sprawa nie była za ciekawa, a stacje pogodowe i inne czujniki wysyłające temperaturę na odległość albo gubiły zasięg już po paru dniach albo temperatura w saunie była za wysoka (120 st.) i nadajniki odmawiały posłuszeństwa. Na spotkaniu towarzyskim kolega opowiedział mi całą sytuację i tak oto narodził się pomysł czujnika temp. na odległość. Zapoznałem się z sytuacją, kolega przedstawił oczekiwania, ja dodałem coś od siebie i wyszły nam poniższe założenia projektu:  Projekt miał być bezprzewodowy, a sygnał miał być emitowany na odległość 50 m. otwartej przestrzeni i 2 ściany w domu. Oczywiście nadawanie i odbiór temperatury z sauny i wyświetlenie jej na wyświetlaczu LCD, tak więc 2 moduły: nadawczy i odbiorczy. Dodałem od siebie możliwość ustawienia alarmu temperatury, po której przekroczeniu miał włączać się buzzer sygnalizujący osiągnięcie ustawionej temp. w saunie (nie trzeba co chwilę sprawdzać i specjalnie chodzić do kuchni, a także nie trzeba pamiętać o sprawdzaniu :D). Nadajnik i odbiornik mają być zasilane z sieci i być w obudowach. Czujnik temp. musi dokonywać pomiaru temperatury sięgającej 130 stopni C. No to tyle z założeń, wszystko było już ustalone więc pozostało nic innego jak wykonanie projektu. Jak widzicie kolega ma saunę także koszta nie musiały być cięte a ja mogłem puścić wodze fantazji xD No więc pewnego zimowego wieczoru zacząłem kompletować potrzebne elementy: Oczywiście potrzeba czegoś co to ogarnie i jakoś tak padło na ATmega328p a konkretnie Arduino pro mini. Dlaczego Arduino, a nie goła atmega, lub inne cusik? Podobne koszty, stabilizator, rezonator i goldpiny na pokładzie więc wybór był prosty, choć na pewno znajdą się osoby co powiedzą po co od razu atmega i to jeszcze328p! No ale cóż chciałem żeby projekt był przyjemny, i łatwy w ewentualnych dalszych upgreydach :p I właśnie również z tego powodu zdecydowałem się na płytki prototypowe a nie na trawienie laminatu, choć tak mogłem wyprowadzić sygnały, zasilanie i masy no ale cóż lubię lutować i plątanine kabelków. Teraz dalsze elementy czyli najważniejszy czujnik temp, który postanowiłem umieścić również w odbiorniku. Jako, że 125 stopni to taka przyjazna temp dla większości czujników to wybór padł na popularne Dallas 18b20 - tryb pasożytniczy, dokładność, i cena przemówiły na jego korzyść (choć każdy może sb dać jaki mu się żyd nie podoba). Dalej myślałem o zasilaniu... Czy 12V i przetwornica step-down, czy jakieś zasilacze 5V i bezpośrednio do VCC pro mini, czy jakiś zasilacz 9V do stabilizatora pro mini? Pomysłów było sporo, lecz po próbach postanowiłem spróbować na zasilaczach USB 5V 1A i sprawdzić już z gotowym projektem. To akurat element nad którym pomyślę później i nie muszę podejmować już ostatecznej decyzji. Wyświetlacz to LCD 4x20, po prostu ze względów estetycznych i potrzebnego miejsca pod nim na elektronikę. Następnie moduły komunikacyjne na daną odległość i przeszkody w formie 50 cm. ścian. Postanowiłem sprawdzić najpierw tanie moduły RF do arduino na interface TTL, a także odległość jaką proponuje producent czyli 150m. Jednak po próbach okazało się, iż nawet z antenami zasięg ledwo wystarczał na 50m i jedną 20cm. ścianę. W dodatku pomyślałem, że fajnie by było mieć komunikację w obie strony i np. włączać światło z domu w środku sauny, czy też sam piec (gdyby był elektryczny a nie na drewno jak ma kolega xD), jak i również wysłanie sygnału SOS do domu w razie potrzeby, który uruchomi buzzer, i inne bajery. Wtedy pojawił się pomysł aby wykorzystać moduły HC-12 433Mhz, które działają na magistralę UART za pośrednictwem pinów RX i TX. Wykorzystałem je ponieważ nie było dostępnych nRF24L01 ze wzmacniaczem, które są trochę tańsze  no ale los tak chciał. Zacząłem od konfiguracji modułów HC-12, w których ustawiłem za pomocą komend AT największą moc nadawania, odpowiedni kanał i inne (polecam filmik na youtube gdzie pan fajnie przedstawia działanie i konfigurowanie modułów). Po pozytywnym teście przesłania informacji z jednego Arduino do drugiego podłączyłem na płytkach stykowych zestaw nadawczy, odbiorczy i zabrałem się do pisania wsadów: ODBIORNIK:  /* HC-12 odbiornik */ #include <SoftwareSerial.h> #include <OneWire.h> #include <DallasTemperature.h> #include <Wire.h> #include <LiquidCrystal.h> #define ONE_WIRE_BUS 4 //pin 4 w arduino cz. temp. OneWire oneWire(ONE_WIRE_BUS); // uruchomienie onewire DallasTemperature sensors(&oneWire); // PODPIĘCIE LCD: RS-12, RW-14, E-11, D4-7, D5-8, D6-9, D7- 10 LiquidCrystal lcd(12, 14, 11, 7, 8, 9, 10); //GND SoftwareSerial mySerial(2, 3);  // RX, TX do hc12 String temp1; int a = 0; //int tempsauna; //String ustTemp; int ustTemp; int odczytanaWartosc; int alarm; int buzerPin = 13; void setup() { lcd.begin(20, 4); pinMode(buzerPin, OUTPUT); Serial.begin(9600); // ardu - komp mySerial.begin(1200); // ardu - HC-12 sensors.begin(); //rozpoczęcie pomiaru lcd.print("     SAUNA"); //pierwszy wiersz lcd.setCursor(0, 1); // drugi wiersz lcd.print("   INICJALIZACJA"); //drugi wiersz lcd.setCursor(0, 2); // 3 wiersz lcd.print("   PROSZE CZEKAC"); //3 wiersz lcd.setCursor(0, 3); // 4 wiersz lcd.print("BY. A. Wolak ABC-RC"); //4 wiersz delay(3000); lcd.clear(); } void loop() { lcd.setCursor(0, 0); // I wiersz lcd.print(" KONTROLER SAUNA"); // mapowania alarmu odczytanaWartosc = analogRead(A2); ustTemp = map(odczytanaWartosc, 0, 1023, 22, 140); lcd.setCursor(0, 3); // IV wiersz lcd.print("Temp. alarmu: "); lcd.print(ustTemp); lcd.print(" st"); // czujnik przy odbiorniku temp w pokoju sensors.requestTemperatures(); //wyslij o uzyskanie temp Serial.println("Temp. czujnika odbiornika"); Serial.println(sensors.getTempCByIndex(0)); lcd.setCursor(0, 2); // II wiersz lcd.print("Pokoj temp: "); lcd.print(sensors.getTempCByIndex(0)); //odczytanie wartości czujnika lcd.print(" st"); //lcd.print(""); // odczytywanie z nadajnika HC-12 if (mySerial.available() > 1) {    //sprawdź bufor UART hc-12 String temp1 = mySerial.readString(); Serial.println(temp1); lcd.setCursor(0, 1);                        // I wiersz lcd.print("Sauna temp: "); lcd.print(temp1); lcd.setCursor(15, 1);                  // I wiersz wyś. pow. 100 st. lcd.print(" stC "); if (temp1. toInt() >= ustTemp) {   // warunek alarmu i przekształcenia na int digitalWrite(buzerPin, HIGH); lcd.clear(); lcd.setCursor(0, 1);                      // I wiersz lcd.print("!!!!!! ALARM !!!!!"); lcd.setCursor(0, 2);                   // II wiersz lcd.print("Temp. PRZEKROCZONA !"); lcd.setCursor(0, 3);                    // IV wiersz lcd.print("Temp. sauny: "); lcd.print(temp1); } else { digitalWrite(buzerPin, LOW); } } }   NADAJNIK:  /* Nadajnik HC-12 czuj. temp dallas */ #include <SoftwareSerial.h> #include "DHT.h" #include <OneWire.h> #include <DallasTemperature.h> #define ONE_WIRE_BUS 5 //pin 5 w arduino cz. temp. sygnał OneWire oneWire(ONE_WIRE_BUS); // uruchomienie onewire do dallasa DallasTemperature sensors(&oneWire); SoftwareSerial mySerial(2, 3); // RX, TX do HC-12 // sensors.requestTemperatures(); //wyslij o uzyskanie temp String temp; void setup() { Serial.begin(9600); mySerial.begin(1200); sensors.begin(); //rozpoczęcie pomiaru } void loop() { Serial.print("Requesting temperatures..."); sensors.requestTemperatures(); //wyslij o uzyskanie temp Serial.println("DONE"); Serial.println(sensors.getTempCByIndex(0)); int a = (sensors.getTempCByIndex(0)); String temp1 = temp + a; mySerial.println(temp1); Serial.println(temp1); delay(1000); }   Oczywiście nie obyło się bez problemów, przestojów i innych uprzykrzeń życia, np. nie działało mi mapowanie Stringa więc musiałem przerzucić na int. Jednak ostatecznie dałem radę... Nie jestem mistrzem ani zawodowcem co do pisania programów, ale ten wykonuje się tak jak założyłem więc jak dla mnie jest ok. W programach użyłem dodatkowych portów UART (biblioteka SoftwareSerial) na pinach 2 i 3, aby można było w łatwy sposób wgrać nowy program. Po próbie generalnej na stole z dodatkowymi elementami jak potencjometry, przyszła pora na wykonanie ostatecznego prototypu. W tym celu powstał rysunek techniczny obudowy, schematy i pozostało nic innego jak wykonanie. Na początek lutowanie nadajnika i jego głównych elementów: pro mini, LCD, HC-12, tzn. gniazd na goldpiy do płytki prototypowej:   Jak widać wszystkie elementy mogą zostać wymienione, lub odczepione w razie potrzeby. W czasie gdy lutowałem przewody połączeniowe to drukowała mi się obudowa 3D, która ostatecznie wygląda tak:   Jak widać oczywiście w obudowie jest otwór na wyświetlacz 4x20, 2x potencjometry: jeden do kontrastu, drugi do ustawienia wartości temp. alarmu, a także otwór na czujnik ds18b20 i przełącznik alarmu (odcina zasilanie buzzera). Na początku chciałem włączać i wyłączać alarm systemowo, ale brakło mi miejsca na wyświetlaczu, dlatego pojawił się zwykły przełącznik odcinający zasilanie od buzzera. Alarm można również wyłączyć ustawiając najwyższą temp. a żeby sprawdzić, czy działa ustawić najniższą (22 st. można zmienić w programie). Tak prezentuje się już gotowa całość odbiornika i nadajnika. W nadajniku czujnik posiadam przylutowany bezpośrednio pod mikrokontroler, ponieważ w przyszłości mogą pojawić się przekaźniki i inne pierdoły (może). Tak wygląda ekran po podłączeniu zasilania:   Tak po rozruchu:     A tak, gdy włączy się alarm:     Nadajnik prezentuje się w taki sposób: Składa się z obudowy, gniazda zasilania, arduino pro mini, modułu HC-12 i przewody idące do czujnika dallas.   Wszystko dobrze działało na zasilacze 5V - 1A więc przerobiłem tylko 2 przewody USB na końcówkę jack DC i wszystko pięknie śmiga, a co ważniejsze kolega jest bardzo zadowolony :) Wykaz części: 2x Arduino Pro mini LCD 4x20 2x HC-12 płytka prototypowa buzzer z generatorem 2x gniazdo DC 2x zasilacz 5V - 1A 2x potencjometr 2x gałka do potencjometru 2x czujnik temp. dallas 18b20 parę gniazd kołowych / goldpin 40szt. przedłużki kołowe gniazda do wyświetlacza jak ktoś nie ma  to potrzebny jest programator do pro mini np. taki najtańszy przewody każdy jakieś tam ma myślę Wszystkie części kupiłem w sklepie abc-rc.pl ponieważ tam były najtańsze i to mój zaufany dostawca. No i to by było na tyle, mogę jeszcze zdradzić, że obecnie pracuje nad włączaniem światła i przyciskiem SOS.

Diversity FPV RX5808 Pro – OLED 5,8GHz – 40CH – Odbiornik diversity – Podłączenie i uruchomienie

Witam, chciałbym w tym artykule pokazać jak podłączyć i uruchomić odbiornik diversity.   Do konfiguracji odbiornika służy dżojstik i wyświetlacz OLED. Wchodzimy do menu przez wciśnięcie dżojstika. Pokazuje się kilka zakładek: AUTO SEARCH Tutaj odbiornik automatycznie skanuje pasmo i wybiera najsilniejszy kanał.  Dżojstikiem możemy zmieniać kierunek skanowania poprzez przesunięcie w prawo lub w lewo. BAND SKANER Tutaj widzimy które częstotliwości są zajęte, im słupki ustawiają się wyżej tym silniejszy sygnał na danej częstotliwości. MANUAL MODE Ręczne szukanie kanału, przesunięcie dżojstika w prawo lub lewo powoduje zmianę częstotliwości na mniejszą lub większą. DIVERSITY W tej zakładce możemy sobie wybrać, czy nasz odbiornik będzie przełączał automatycznie głowicę na tą, która ma lepszy sygnał, lub możemy wybrać ręcznie, z której głowicy chcemy korzystać. Dodatkowo mamy wizualizację jakości sygnału z każdego odbiornika. SETUP MENU ORDER: FREQUENCY / CHANEL- tutaj możemy sobie wybrać czy odbiornik ma szukać po częstotliwości czy po kanałach. Jeśli przykładowo wybierzemy sobie FREQUANCY i będziemy w trybie manualnym szukać naszej częstotliwości poprzez poruszanie  dżojstika w prawo lub  lewo, to odbiornik będzie przełączał się kolejno po częstotliwościach w górę lub w dół. BEEPS: ON/OFF jeśli wyposażymy odbiornik w buzerek na 5V to możemy sobie włączyć lub wyłączyć sygnalizacje dźwiękową pracy odbiornik. SIGN: tutaj możemy wpisać sobie nasz nick (dowolna nazwa). CALIBRATE RSSI: tutaj kalibrujemy rssi głowic, w które wyposażony jest odbiornik. Najlepiej włączyć tylko jeden nadajnik na daną częstotliwość, oddalić się na około 20-30 metrów i zrobić kalibrację. Kalibracja powinna być wykonana na otwartej przestrzeni. SAVE & EXIT: Klikamy w tym miejscu po każdej zmianie parametrów, jeśli chcemy żeby zmiany były zapisane. OPIS PINÓW  2S-3S - złącze do podłączenia pakietu GND - minus zasilania, masa audio/wideo                                                                                                                                                                          5V - zasilanie odbiornika z beca 5V * - wolny pin SDA - dodatkowe złącze wyświetlacza SCL - dodatkowe złącze wyświetlacza VCC - to samo co złącze 5V                                                                                                                                                                                                     GND - minus zasilania, masa audio/video VIDEO - wyjście sygnału wideo z odbiornika GUI - wyjście na którym możemy dostać te same informacje, co na zintegrowanym wyświetlaczu OLED w formie sygnału video, czyli podłączamy do dodatkowego wejścia w goglach lub monitorze i mamy wszystkie parametry (funkcję uruchamiamy przez modyfikacje kodu programu)  AUDIO - wyjście dzwięku z nadajnika wideo lub kamery GND - minus zasilania, masa audio/video OBUDOWA ODBIORNIKA Odbiornik postanowiłem zabezpieczyć przed uszkodzeniem poprzez zrobienie obudowy. Na modelarni znalazłem kawałek blaszki miedzianej i z tego właśnie powstała obudowa. Na ostatnim zdjęciu widać dołożony stabilizator liniowy na 5V. Można również wykorzystać BEC 5V,  ponieważ fabrycznie zainstalowany stabilizator jest za słaby i może ulec uszkodzeniu. Jeśli zasilamy płytkę z 5V nie ma potrzeby dokładania stabilizatora lub beca, stosujemy je tylko wtedy gdy chcemy zasilić odbiornik napięciem większym niż 5V.   Odbiornik gotowy do pracy.   Odbiornik Diversity FPV RX5805 dostępny jest w sklepie abc-rc.pl - Kliknij tutaj aby przejść do karty produktu   

Matryca LED 8×8 sterowana przez bluetooth

Cześć, To mój trzeci i ostatni projekt dotyczący matryc LED. Będziemy sterować wyświetlanym tekstem za pomocą aplikacji na smartfona, a transmisja między Arduino i smartfonem będzie realizowana za pomocą połączenia bluetooth. Części potrzebne do realizacji projektu to: -płytka Arduino UNO http://abc-rc.pl/Arduino-UNO-R3-CH340 -matrycaLED 8x8 ze sterownikiem MAX7219 http://abc-rc.pl/MAX7219-LED-red -moduł bluetooth http://abc-rc.pl/Bluetooth-HC-06 Aplikacja do sterowania: https://goo.gl/7q3rst Program jest napisany w taki sposób aby można było użyć dowolnej liczby matryc Schemat: Sketch: #include <LedControl.h> #include <SoftwareSerial.h> int DIN = 12; int CS =  11; int CLK = 10; int ilosc_ekranow = 2; char c; String tekscik, przerwanie; bool koncz = 0; byte ascii_table[130][8]; LedControl lc=LedControl(DIN,CLK,CS,0); SoftwareSerial BTserial(3, 2); // RX | TX void wypelnij() { ascii_table[32][0]=B00000000; ascii_table[32][1]=B00000000; ascii_table[32][2]=B00000000; ascii_table[32][3]=B00000000; ascii_table[32][4]=B00000000; ascii_table[32][7]=5; ascii_table[33][0]=B00000000; ascii_table[33][1]=B01011111; ascii_table[33][2]=B00000000; ascii_table[33][7]=3; ascii_table[34][0]=B00000000; ascii_table[34][1]=B00001110; ascii_table[34][2]=B00000000; ascii_table[34][3]=B00001110; ascii_table[34][4]=B00000000; ascii_table[34][7]=5; ascii_table[35][0]=B00000000; ascii_table[35][1]=B00010100; ascii_table[35][2]=B01111111; ascii_table[35][3]=B00010100; ascii_table[35][4]=B01111111; ascii_table[35][5]=B00010100; ascii_table[35][6]=B00000000; ascii_table[35][7]=7; ascii_table[36][0]=B00000000; ascii_table[36][1]=B00100100; ascii_table[36][2]=B00101010; ascii_table[36][3]=B01111111; ascii_table[36][4]=B00101010; ascii_table[36][5]=B00100100; ascii_table[36][6]=B00000000; ascii_table[36][7]=7; ascii_table[37][0]=B00000000; ascii_table[37][1]=B01100010; ascii_table[37][2]=B01100100; ascii_table[37][3]=B00001000; ascii_table[37][4]=B00010011; ascii_table[37][5]=B00100011; ascii_table[37][6]=B00000000; ascii_table[37][7]=7; ascii_table[38][0]=B00000000; ascii_table[38][1]=B01010000; ascii_table[38][2]=B00100010; ascii_table[38][3]=B01010101; ascii_table[38][4]=B01001001; ascii_table[38][5]=B00110110; ascii_table[38][6]=B00000000; ascii_table[38][7]=7; ascii_table[39][0]=B00000000; ascii_table[39][1]=B00000011; ascii_table[39][2]=B00000101; ascii_table[39][3]=B00000000; ascii_table[39][7]=4; ascii_table[40][0]=B00000000; ascii_table[40][1]=B01000001; ascii_table[40][2]=B00100010; ascii_table[40][3]=B00011100; ascii_table[40][4]=B00000000; ascii_table[40][7]=5; ascii_table[41][0]=B00000000; ascii_table[41][1]=B00011100; ascii_table[41][2]=B00100010; ascii_table[41][3]=B01000001; ascii_table[41][4]=B00000000; ascii_table[41][7]=5; ascii_table[42][0]=B00000000; ascii_table[42][1]=B00010100; ascii_table[42][2]=B00001000; ascii_table[42][3]=B00111110; ascii_table[42][4]=B00001000; ascii_table[42][5]=B00010100; ascii_table[42][6]=B00000000; ascii_table[42][7]=7; ascii_table[43][0]=B00000000; ascii_table[43][1]=B00001000; ascii_table[43][2]=B00001000; ascii_table[43][3]=B00111110; ascii_table[43][4]=B00001000; ascii_table[43][5]=B00001000; ascii_table[43][6]=B00000000; ascii_table[43][7]=7; ascii_table[44][0]=B00000000; ascii_table[44][1]=B00110000; ascii_table[44][2]=B01010000; ascii_table[44][3]=B00000000; ascii_table[44][7]=4; ascii_table[45][0]=B00000000; ascii_table[45][1]=B00001000; ascii_table[45][2]=B00001000; ascii_table[45][3]=B00001000; ascii_table[45][4]=B00001000; ascii_table[45][5]=B00000000; ascii_table[45][7]=6; ascii_table[46][0]=B00000000; ascii_table[46][1]=B01100000; ascii_table[46][2]=B01100000; ascii_table[46][3]=B00000000; ascii_table[46][7]=4; ascii_table[47][0]=B00000000; ascii_table[47][1]=B00000010; ascii_table[47][2]=B00000100; ascii_table[47][3]=B00001000; ascii_table[47][4]=B00010000; ascii_table[47][5]=B00100000; ascii_table[47][6]=B00000000; ascii_table[47][7]=7; ascii_table[48][0]=B00000000; ascii_table[48][1]=B00111110; ascii_table[48][2]=B01000001; ascii_table[48][3]=B01000001; ascii_table[48][4]=B00111110; ascii_table[48][5]=B00000000; ascii_table[48][7]=6; ascii_table[49][0]=B00000000; ascii_table[49][1]=B01000000; ascii_table[49][2]=B01111111; ascii_table[49][3]=B01000010; ascii_table[49][4]=B00000000; ascii_table[49][7]=5; ascii_table[50][0]=B00000000; ascii_table[50][1]=B01000110; ascii_table[50][2]=B01001001; ascii_table[50][3]=B01010001; ascii_table[50][4]=B01100011; ascii_table[50][5]=B01000010; ascii_table[50][6]=B00000000; ascii_table[50][7]=7; ascii_table[51][0]=B00000000; ascii_table[51][1]=B00110001; ascii_table[51][2]=B01001011; ascii_table[51][3]=B01000101; ascii_table[51][4]=B01000001; ascii_table[51][5]=B00100001; ascii_table[51][6]=B00000000; ascii_table[51][7]=7; ascii_table[52][0]=B00000000; ascii_table[52][1]=B00010000; ascii_table[52][2]=B01111111; ascii_table[52][3]=B00010010; ascii_table[52][4]=B00010100; ascii_table[52][5]=B00011000; ascii_table[52][6]=B00000000; ascii_table[52][7]=7; ascii_table[53][0]=B00000000; ascii_table[53][1]=B00111001; ascii_table[53][2]=B01000101; ascii_table[53][3]=B01000101; ascii_table[53][4]=B01000101; ascii_table[53][5]=B00100111; ascii_table[53][6]=B00000000; ascii_table[53][7]=7; ascii_table[54][0]=B00000000; ascii_table[54][1]=B00110000; ascii_table[54][2]=B01001001; ascii_table[54][3]=B01001001; ascii_table[54][4]=B01001010; ascii_table[54][5]=B00111100; ascii_table[54][6]=B00000000; ascii_table[54][7]=7; ascii_table[55][0]=B00000000; ascii_table[55][1]=B00000111; ascii_table[55][2]=B00001001; ascii_table[55][3]=B01110001; ascii_table[55][4]=B00000001; ascii_table[55][5]=B00000011; ascii_table[55][6]=B00000000; ascii_table[55][7]=7; ascii_table[56][0]=B00000000; ascii_table[56][1]=B00110110; ascii_table[56][2]=B01001001; ascii_table[56][3]=B01001001; ascii_table[56][4]=B01001001; ascii_table[56][5]=B00110110; ascii_table[56][6]=B00000000; ascii_table[56][7]=7; ascii_table[57][0]=B00000000; ascii_table[57][1]=B00011110; ascii_table[57][2]=B00101001; ascii_table[57][3]=B01001001; ascii_table[57][4]=B01001001; ascii_table[57][5]=B00000110; ascii_table[57][6]=B00000000; ascii_table[57][7]=7; ascii_table[58][0]=B00000000; ascii_table[58][1]=B00110110; ascii_table[58][2]=B00110110; ascii_table[58][3]=B00000000; ascii_table[58][7]=4; ascii_table[59][0]=B00000000; ascii_table[59][1]=B00110110; ascii_table[59][2]=B01010110; ascii_table[59][3]=B00000000; ascii_table[59][7]=4; ascii_table[60][0]=B00000000; ascii_table[60][1]=B01000001; ascii_table[60][2]=B00100010; ascii_table[60][3]=B00010100; ascii_table[60][4]=B00001000; ascii_table[60][5]=B00000000; ascii_table[60][7]=6; ascii_table[61][0]=B00000000; ascii_table[61][1]=B00010100; ascii_table[61][2]=B00010100; ascii_table[61][3]=B00010100; ascii_table[61][4]=B00010100; ascii_table[61][5]=B00010100; ascii_table[61][6]=B00000000; ascii_table[61][7]=7; ascii_table[62][0]=B00000000; ascii_table[62][1]=B00001000; ascii_table[62][2]=B00010100; ascii_table[62][3]=B00100010; ascii_table[62][4]=B01000001; ascii_table[62][5]=B00000000; ascii_table[62][7]=6; ascii_table[63][0]=B00000000; ascii_table[63][1]=B00000110; ascii_table[63][2]=B00001001; ascii_table[63][3]=B01010001; ascii_table[63][4]=B00000001; ascii_table[63][5]=B00000010; ascii_table[63][6]=B00000000; ascii_table[63][7]=7; ascii_table[64][0]=B00000000; ascii_table[64][1]=B00111110; ascii_table[64][2]=B01000001; ascii_table[64][3]=B01111001; ascii_table[64][4]=B01001001; ascii_table[64][5]=B00110010; ascii_table[64][6]=B00000000; ascii_table[64][7]=7; ascii_table[65][0]=B00000000; ascii_table[65][1]=B01111110; ascii_table[65][2]=B00010001; ascii_table[65][3]=B00010001; ascii_table[65][4]=B00010001; ascii_table[65][5]=B01111110; ascii_table[65][6]=B00000000; ascii_table[65][7]=7; ascii_table[66][0]=B00000000; ascii_table[66][1]=B00110110; ascii_table[66][2]=B01001001; ascii_table[66][3]=B01001001; ascii_table[66][4]=B01001001; ascii_table[66][5]=B01111111; ascii_table[66][6]=B00000000; ascii_table[66][7]=7; ascii_table[67][0]=B00000000; ascii_table[67][1]=B00100010; ascii_table[67][2]=B01000001; ascii_table[67][3]=B01000001; ascii_table[67][4]=B01000001; ascii_table[67][5]=B00111110; ascii_table[67][6]=B00000000; ascii_table[67][7]=7; ascii_table[68][0]=B00000000; ascii_table[68][1]=B00011100; ascii_table[68][2]=B00100010; ascii_table[68][3]=B01000001; ascii_table[68][4]=B01000001; ascii_table[68][5]=B01111111; ascii_table[68][6]=B00000000; ascii_table[68][7]=7; ascii_table[69][0]=B00000000; ascii_table[69][1]=B01000001; ascii_table[69][2]=B01001001; ascii_table[69][3]=B01001001; ascii_table[69][4]=B01111111; ascii_table[69][5]=B00000000; ascii_table[69][7]=6; ascii_table[70][0]=B00000000; ascii_table[70][1]=B00000001; ascii_table[70][2]=B00001001; ascii_table[70][3]=B00001001; ascii_table[70][4]=B01111111; ascii_table[70][5]=B00000000; ascii_table[70][7]=6; ascii_table[71][0]=B00000000; ascii_table[71][1]=B01111010; ascii_table[71][2]=B01001001; ascii_table[71][3]=B01001001; ascii_table[71][4]=B01000001; ascii_table[71][5]=B00111110; ascii_table[71][6]=B00000000; ascii_table[71][7]=7; ascii_table[72][0]=B00000000; ascii_table[72][1]=B01111111; ascii_table[72][2]=B00001000; ascii_table[72][3]=B00001000; ascii_table[72][4]=B01111111; ascii_table[72][5]=B00000000; ascii_table[72][7]=6; ascii_table[73][0]=B00000000; ascii_table[73][1]=B01000001; ascii_table[73][2]=B01111111; ascii_table[73][3]=B01000001; ascii_table[73][4]=B00000000; ascii_table[73][7]=5; ascii_table[74][0]=B00000000; ascii_table[74][1]=B00000001; ascii_table[74][2]=B01111111; ascii_table[74][3]=B01000001; ascii_table[74][4]=B01000000; ascii_table[74][5]=B00100000; ascii_table[74][6]=B00000000; ascii_table[74][7]=7; ascii_table[75][0]=B00000000; ascii_table[75][1]=B01000001; ascii_table[75][2]=B00100010; ascii_table[75][3]=B00010100; ascii_table[75][4]=B00001000; ascii_table[75][5]=B01111111; ascii_table[75][6]=B00000000; ascii_table[75][7]=7; ascii_table[76][0]=B00000000; ascii_table[76][1]=B01000000; ascii_table[76][2]=B01000000; ascii_table[76][3]=B01000000; ascii_table[76][4]=B01111111; ascii_table[76][5]=B00000000; ascii_table[76][7]=6; ascii_table[77][0]=B00000000; ascii_table[77][1]=B01111111; ascii_table[77][2]=B00000010; ascii_table[77][3]=B00001100; ascii_table[77][4]=B00000010; ascii_table[77][5]=B01111111; ascii_table[77][6]=B00000000; ascii_table[77][7]=7; ascii_table[78][0]=B00000000; ascii_table[78][1]=B01111111; ascii_table[78][2]=B00010000; ascii_table[78][3]=B00001000; ascii_table[78][4]=B00000100; ascii_table[78][5]=B01111111; ascii_table[78][6]=B00000000; ascii_table[78][7]=7; ascii_table[79][0]=B00000000; ascii_table[79][1]=B00111110; ascii_table[79][2]=B01000001; ascii_table[79][3]=B01000001; ascii_table[79][4]=B01000001; ascii_table[79][5]=B00111110; ascii_table[79][6]=B00000000; ascii_table[79][7]=7; ascii_table[80][0]=B00000000; ascii_table[80][1]=B00000110; ascii_table[80][2]=B00001001; ascii_table[80][3]=B00001001; ascii_table[80][4]=B00001001; ascii_table[80][5]=B01111111; ascii_table[80][6]=B00000000; ascii_table[80][7]=7; ascii_table[81][0]=B00000000; ascii_table[81][1]=B01011110; ascii_table[81][2]=B00100001; ascii_table[81][3]=B01010001; ascii_table[81][4]=B01000001; ascii_table[81][5]=B00111110; ascii_table[81][6]=B00000000; ascii_table[81][7]=7; ascii_table[82][0]=B00000000; ascii_table[82][1]=B01000110; ascii_table[82][2]=B00101001; ascii_table[82][3]=B00011001; ascii_table[82][4]=B00001001; ascii_table[82][5]=B01111111; ascii_table[82][6]=B00000000; ascii_table[82][7]=7; ascii_table[83][0]=B00000000; ascii_table[83][1]=B00110001; ascii_table[83][2]=B01001001; ascii_table[83][3]=B01001001; ascii_table[83][4]=B01001001; ascii_table[83][5]=B01000110; ascii_table[83][6]=B00000000; ascii_table[83][7]=7; ascii_table[84][0]=B00000000; ascii_table[84][1]=B00000001; ascii_table[84][2]=B00000001; ascii_table[84][3]=B01111111; ascii_table[84][4]=B00000001; ascii_table[84][5]=B00000001; ascii_table[84][6]=B00000000; ascii_table[84][7]=7; ascii_table[85][0]=B00000000; ascii_table[85][1]=B00111111; ascii_table[85][2]=B01000000; ascii_table[85][3]=B01000000; ascii_table[85][4]=B01000000; ascii_table[85][5]=B00111111; ascii_table[85][6]=B00000000; ascii_table[85][7]=7; ascii_table[86][0]=B00000000; ascii_table[86][1]=B00011111; ascii_table[86][2]=B00100000; ascii_table[86][3]=B01000000; ascii_table[86][4]=B00100000; ascii_table[86][5]=B00011111; ascii_table[86][6]=B00000000; ascii_table[86][7]=7; ascii_table[87][0]=B00000000; ascii_table[87][1]=B00111111; ascii_table[87][2]=B01000000; ascii_table[87][3]=B00111000; ascii_table[87][4]=B01000000; ascii_table[87][5]=B00111111; ascii_table[87][6]=B00000000; ascii_table[87][7]=7; ascii_table[88][0]=B00000000; ascii_table[88][1]=B01100011; ascii_table[88][2]=B00010100; ascii_table[88][3]=B00001000; ascii_table[88][4]=B00010100; ascii_table[88][5]=B01100011; ascii_table[88][6]=B00000000; ascii_table[88][7]=7; ascii_table[89][0]=B00000000; ascii_table[89][1]=B00000111; ascii_table[89][2]=B00001000; ascii_table[89][3]=B01110000; ascii_table[89][4]=B00001000; ascii_table[89][5]=B00000111; ascii_table[89][6]=B00000000; ascii_table[89][7]=7; ascii_table[90][0]=B00000000; ascii_table[90][1]=B01000011; ascii_table[90][2]=B01000101; ascii_table[90][3]=B01001001; ascii_table[90][4]=B01010001; ascii_table[90][5]=B01100001; ascii_table[90][6]=B00000000; ascii_table[90][7]=7; ascii_table[91][0]=B00000000; ascii_table[91][1]=B01000001; ascii_table[91][2]=B01000001; ascii_table[91][3]=B01111111; ascii_table[91][4]=B00000000; ascii_table[91][7]=5; ascii_table[93][0]=B00000000; ascii_table[93][1]=B01111111; ascii_table[93][2]=B01000001; ascii_table[93][3]=B01000001; ascii_table[93][4]=B00000000; ascii_table[93][7]=5; ascii_table[94][0]=B00000000; ascii_table[94][1]=B00000100; ascii_table[94][2]=B00000010; ascii_table[94][3]=B00000001; ascii_table[94][4]=B00000010; ascii_table[94][5]=B00000100; ascii_table[94][6]=B00000000; ascii_table[94][7]=7; ascii_table[95][0]=B00000000; ascii_table[95][1]=B01000000; ascii_table[95][2]=B01000000; ascii_table[95][3]=B01000000; ascii_table[95][4]=B01000000; ascii_table[95][5]=B00000000; ascii_table[95][7]=6; ascii_table[123][0]=B00000000; ascii_table[123][1]=B01000001; ascii_table[123][2]=B00110110; ascii_table[123][3]=B00001000; ascii_table[123][4]=B00000000; ascii_table[123][7]=5; ascii_table[124][0]=B00000000; ascii_table[124][1]=B01111111; ascii_table[124][2]=B00000000; ascii_table[124][7]=3; ascii_table[125][0]=B00000000; ascii_table[125][1]=B00001000; ascii_table[125][2]=B00110110; ascii_table[125][3]=B01000001; ascii_table[125][4]=B00000000; ascii_table[125][7]=5; ascii_table[126][0]=B00000000; ascii_table[126][1]=B00001000; ascii_table[126][2]=B00010000; ascii_table[126][3]=B00001000; ascii_table[126][4]=B00001000; ascii_table[126][5]=B00010000; ascii_table[126][6]=B00000000; ascii_table[126][7]=7; } void setup(){ Serial.begin(9600); BTserial.begin(9600); for (int i=0;i<ilosc_ekranow;i++)    //petla inicjalizujaca matryce { lc.shutdown(i,false);      // wyjscie z trybu uspienia lc.setIntensity(i,1);      // ustawienie jasnosci lc.clearDisplay(i);        // czyszczenie ekranu } /*for (int j1=0; j1<90; j1++)      //petla do wypelnienia ascii { for (int i1=0; i1<8; i1++) { ascii_table[i1][j1]=0; } }*/ } void loop(){ wypelnij(); if (nastepny() == 0) { while (koncz!=1) { odbierz_tekst(); } Serial.println(tekscik); slideAscii(tekscik); } else { koncz = 0; tekscik = ""; } } void odbierz_tekst() { if (BTserial.available()) { c = BTserial.read(); if (c=='#') { koncz=1; return; } else {tekscik += c;} } if (tekscik=="*12|99|99|") {tekscik="";} } bool nastepny() { przerwanie = ""; if (BTserial.available()) { c = BTserial.read(); przerwanie += c; if (przerwanie != "" ) {return 1;} return 0; } } void printAscii(int ekran, int indeks)        //funkcja do stałego napisu { int i = 0; for(i=0;i<8;i++) { lc.setRow(ekran,i,ascii_table[indeks][i]); delay(50); } } int ile_lini(String tekst)              //funkcja liczaca ilosc lini do wyswietlenia { int liczbowa[tekst.length()];                   //tablica zbierajaca liczby char znakowa[tekst.length()];                   //tablica zbierajaca znaki int linie;                                        //zmienna pomocnicza liczaca linie tekst.toCharArray(znakowa, tekst.length()+1);     //zamiana stringa na tablice char for (int i=0; i<tekst.length();i++) { liczbowa[i]=zamien_ascii(znakowa[i]);             //zamiana znakow na liczby linie = linie + ascii_table[liczbowa[i]][7];      //zliczenie ile lini z 7 pola ascii } return linie; } void slideAscii(String tekst) { int lini = ile_lini(tekst);                         //ilosc lini tekstu byte pattern[lini+(16*ilosc_ekranow)];              //tablica ktora finalnie bedziemy wyswietlac int liczbowa[tekst.length()];                         //fragment przekopiowany z funkcji ile_lini char znakowa[tekst.length()];                         // tekst.toCharArray(znakowa, tekst.length()+1);         // for (int i=0; i<tekst.length();i++)                   // {                                                 // liczbowa[i]=zamien_ascii(znakowa[i]);           // //Serial.println(liczbowa[i]);                  // }                                               // int licznik = 0;                                      //zmienna liczaca ktory raz petla sie wypelnia for (int k=0;k<(8*ilosc_ekranow);k++)                 //wypelnienie pierwszego ekranu w pattern B00000000 { pattern[licznik]=B00000000; //Serial.println(pattern[licznik]); licznik++; } for (int i=0; i<tekst.length();i++)                             //wypelnianie napisem tablicy pattern {                                                           //zalezne od dlugosci tekstu //Serial.print("liczba: "); //Serial.println(i); for (int j=ascii_table[liczbowa[i]][7]; j>0;j--)          //oraz od ilosci lini w danym znaku { pattern[licznik] = ascii_table[liczbowa[i]][j-1]; //Serial.println(pattern[licznik]); licznik++; } } for (int k=0;k<(8*ilosc_ekranow);k++)                 //wypelnanie koncowego ekranu w pattern B00000000 { pattern[licznik]=B00000000; //Serial.println(pattern[licznik]); licznik++; } for(int k=0;k<(lini+(8*ilosc_ekranow));k++) { int pasy=0; for (int i=0;i<ilosc_ekranow;i++)                     //petla wypisujaca na matrycy { for (int j=0;j<8;j++)                         //petla wewnetrzna wypisujaca na matrycy { lc.setRow(i,j,pattern[pasy+k]);           //lc.setRow funkcja wypisujaca pasy++;                                   //pattern jest obiektem ktory wypisujemy }                                         //pasy poniewaz jest to dodatkowa petla liczaca }                                                 // +k aby napis mogl sie przesuwac delay(30);                                                  //opoznienie czyli predkosc przesuwania sie tekstu } } int zamien_ascii(char znak)       //zamiana znaku na ascii { if (znak==' '){return 32;} if (znak=='!'){return 33;} if (znak=='"'){return 34;} if (znak=='#'){return 35;} if (znak=='$'){return 36;} if (znak=='%'){return 37;} if (znak=='&'){return 38;} if (znak=='('){return 40;} if (znak==')'){return 41;} if (znak=='*'){return 42;} if (znak=='+'){return 43;} if (znak==','){return 44;} if (znak=='-'){return 45;} if (znak=='.'){return 46;} if (znak=='/'){return 47;} if (znak=='0'){return 48;} if (znak=='1'){return 49;} if (znak=='2'){return 50;} if (znak=='3'){return 51;} if (znak=='4'){return 52;} if (znak=='5'){return 53;} if (znak=='6'){return 54;} if (znak=='7'){return 55;} if (znak=='8'){return 56;} if (znak=='9'){return 57;} if (znak==':'){return 58;} if (znak==';'){return 59;} if (znak=='<'){return 60;} if (znak=='='){return 61;} if (znak=='>'){return 62;} if (znak=='?'){return 63;} if (znak=='@'){return 64;} if (znak=='A'){return 65;} if (znak=='B'){return 66;} if (znak=='C'){return 67;} if (znak=='D'){return 68;} if (znak=='E'){return 69;} if (znak=='F'){return 70;} if (znak=='G'){return 71;} if (znak=='H'){return 72;} if (znak=='I'){return 73;} if (znak=='J'){return 74;} if (znak=='K'){return 75;} if (znak=='L'){return 76;} if (znak=='M'){return 77;} if (znak=='N'){return 78;} if (znak=='O'){return 79;} if (znak=='P'){return 80;} if (znak=='Q'){return 81;} if (znak=='R'){return 82;} if (znak=='S'){return 83;} if (znak=='T'){return 84;} if (znak=='U'){return 85;} if (znak=='V'){return 86;} if (znak=='W'){return 87;} if (znak=='X'){return 88;} if (znak=='Y'){return 89;} if (znak=='Z'){return 90;} if (znak=='['){return 91;} if (znak==']'){return 93;} if (znak=='^'){return 94;} if (znak=='_'){return 95;} if (znak=='{'){return 123;} if (znak=='|'){return 124;} if (znak=='}'){return 125;} if (znak=='~'){return 126;} return 32; } Całość jest jasno wytłumaczona na filmie: https://www.youtube.com/watch?v=Cuyy03axaqo

Matryca LED sterowana klawiaturą membranową

Cześć, To mój drugi projekt dotyczący matryc LED, tym razem wyświetlany tekst będziemy wprowadzać za pomocą klawiatury membranowej. W dużej części korzystamy tutaj z programu z poprzedniego wpisu na temat Matrycy LED z przesuwającym, wcześniej ustawionym tekstem. Części potrzebne do realizacji projektu to: płytka Arduino UNO matrycaLED 8x8 ze sterownikiem MAX7219 klawiatura membranowa Program jest napisany w taki sposób aby można było użyć dowolnej liczby matryc Schemat: Sketch:   #include <LedControl.h> #include <Keypad.h> int DIN = 12; int CS =  11; int CLK = 10; int ilosc_ekranow = 2; //String tekscik = "PRZYKLADOWY TEKST: WWW.ABC-RC.PL"; char po_zamianie; String napis; byte ascii_table[130][8]; LedControl lc=LedControl(DIN,CLK,CS,0); const byte ROWS = 4; //four rows const byte COLS = 4; //four columns //define the cymbols on the buttons of the keypads char hexaKeys[ROWS][COLS] = { {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','S','D'} }; byte rowPins[ROWS] = {9, 8, 7, 6}; //connect to the row pinouts of the keypad byte colPins[COLS] = {5, 4, 3, 2}; //connect to the column pinouts of the keypad //initialize an instance of class NewKeypad Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); void wypelnij() { ascii_table[32][0]=B00000000; ascii_table[32][1]=B00000000; ascii_table[32][2]=B00000000; ascii_table[32][3]=B00000000; ascii_table[32][4]=B00000000; ascii_table[32][7]=5; ascii_table[33][0]=B00000000; ascii_table[33][1]=B01011111; ascii_table[33][2]=B00000000; ascii_table[33][7]=3; ascii_table[34][0]=B00000000; ascii_table[34][1]=B00001110; ascii_table[34][2]=B00000000; ascii_table[34][3]=B00001110; ascii_table[34][4]=B00000000; ascii_table[34][7]=5; ascii_table[35][0]=B00000000; ascii_table[35][1]=B00010100; ascii_table[35][2]=B01111111; ascii_table[35][3]=B00010100; ascii_table[35][4]=B01111111; ascii_table[35][5]=B00010100; ascii_table[35][6]=B00000000; ascii_table[35][7]=7; ascii_table[36][0]=B00000000; ascii_table[36][1]=B00100100; ascii_table[36][2]=B00101010; ascii_table[36][3]=B01111111; ascii_table[36][4]=B00101010; ascii_table[36][5]=B00100100; ascii_table[36][6]=B00000000; ascii_table[36][7]=7; ascii_table[37][0]=B00000000; ascii_table[37][1]=B01100010; ascii_table[37][2]=B01100100; ascii_table[37][3]=B00001000; ascii_table[37][4]=B00010011; ascii_table[37][5]=B00100011; ascii_table[37][6]=B00000000; ascii_table[37][7]=7; ascii_table[38][0]=B00000000; ascii_table[38][1]=B01010000; ascii_table[38][2]=B00100010; ascii_table[38][3]=B01010101; ascii_table[38][4]=B01001001; ascii_table[38][5]=B00110110; ascii_table[38][6]=B00000000; ascii_table[38][7]=7; ascii_table[39][0]=B00000000; ascii_table[39][1]=B00000011; ascii_table[39][2]=B00000101; ascii_table[39][3]=B00000000; ascii_table[39][7]=4; ascii_table[40][0]=B00000000; ascii_table[40][1]=B01000001; ascii_table[40][2]=B00100010; ascii_table[40][3]=B00011100; ascii_table[40][4]=B00000000; ascii_table[40][7]=5; ascii_table[41][0]=B00000000; ascii_table[41][1]=B00011100; ascii_table[41][2]=B00100010; ascii_table[41][3]=B01000001; ascii_table[41][4]=B00000000; ascii_table[41][7]=5; ascii_table[42][0]=B00000000; ascii_table[42][1]=B00010100; ascii_table[42][2]=B00001000; ascii_table[42][3]=B00111110; ascii_table[42][4]=B00001000; ascii_table[42][5]=B00010100; ascii_table[42][6]=B00000000; ascii_table[42][7]=7; ascii_table[43][0]=B00000000; ascii_table[43][1]=B00001000; ascii_table[43][2]=B00001000; ascii_table[43][3]=B00111110; ascii_table[43][4]=B00001000; ascii_table[43][5]=B00001000; ascii_table[43][6]=B00000000; ascii_table[43][7]=7; ascii_table[44][0]=B00000000; ascii_table[44][1]=B00110000; ascii_table[44][2]=B01010000; ascii_table[44][3]=B00000000; ascii_table[44][7]=4; ascii_table[45][0]=B00000000; ascii_table[45][1]=B00001000; ascii_table[45][2]=B00001000; ascii_table[45][3]=B00001000; ascii_table[45][4]=B00001000; ascii_table[45][5]=B00000000; ascii_table[45][7]=6; ascii_table[46][0]=B00000000; ascii_table[46][1]=B01100000; ascii_table[46][2]=B01100000; ascii_table[46][3]=B00000000; ascii_table[46][7]=4; ascii_table[47][0]=B00000000; ascii_table[47][1]=B00000010; ascii_table[47][2]=B00000100; ascii_table[47][3]=B00001000; ascii_table[47][4]=B00010000; ascii_table[47][5]=B00100000; ascii_table[47][6]=B00000000; ascii_table[47][7]=7; ascii_table[48][0]=B00000000; ascii_table[48][1]=B00111110; ascii_table[48][2]=B01000001; ascii_table[48][3]=B01000001; ascii_table[48][4]=B00111110; ascii_table[48][5]=B00000000; ascii_table[48][7]=6; ascii_table[49][0]=B00000000; ascii_table[49][1]=B01000000; ascii_table[49][2]=B01111111; ascii_table[49][3]=B01000010; ascii_table[49][4]=B00000000; ascii_table[49][7]=5; ascii_table[50][0]=B00000000; ascii_table[50][1]=B01000110; ascii_table[50][2]=B01001001; ascii_table[50][3]=B01010001; ascii_table[50][4]=B01100011; ascii_table[50][5]=B01000010; ascii_table[50][6]=B00000000; ascii_table[50][7]=7; ascii_table[51][0]=B00000000; ascii_table[51][1]=B00110001; ascii_table[51][2]=B01001011; ascii_table[51][3]=B01000101; ascii_table[51][4]=B01000001; ascii_table[51][5]=B00100001; ascii_table[51][6]=B00000000; ascii_table[51][7]=7; ascii_table[52][0]=B00000000; ascii_table[52][1]=B00010000; ascii_table[52][2]=B01111111; ascii_table[52][3]=B00010010; ascii_table[52][4]=B00010100; ascii_table[52][5]=B00011000; ascii_table[52][6]=B00000000; ascii_table[52][7]=7; ascii_table[53][0]=B00000000; ascii_table[53][1]=B00111001; ascii_table[53][2]=B01000101; ascii_table[53][3]=B01000101; ascii_table[53][4]=B01000101; ascii_table[53][5]=B00100111; ascii_table[53][6]=B00000000; ascii_table[53][7]=7; ascii_table[54][0]=B00000000; ascii_table[54][1]=B00110000; ascii_table[54][2]=B01001001; ascii_table[54][3]=B01001001; ascii_table[54][4]=B01001010; ascii_table[54][5]=B00111100; ascii_table[54][6]=B00000000; ascii_table[54][7]=7; ascii_table[55][0]=B00000000; ascii_table[55][1]=B00000111; ascii_table[55][2]=B00001001; ascii_table[55][3]=B01110001; ascii_table[55][4]=B00000001; ascii_table[55][5]=B00000011; ascii_table[55][6]=B00000000; ascii_table[55][7]=7; ascii_table[56][0]=B00000000; ascii_table[56][1]=B00110110; ascii_table[56][2]=B01001001; ascii_table[56][3]=B01001001; ascii_table[56][4]=B01001001; ascii_table[56][5]=B00110110; ascii_table[56][6]=B00000000; ascii_table[56][7]=7; ascii_table[57][0]=B00000000; ascii_table[57][1]=B00011110; ascii_table[57][2]=B00101001; ascii_table[57][3]=B01001001; ascii_table[57][4]=B01001001; ascii_table[57][5]=B00000110; ascii_table[57][6]=B00000000; ascii_table[57][7]=7; ascii_table[58][0]=B00000000; ascii_table[58][1]=B00110110; ascii_table[58][2]=B00110110; ascii_table[58][3]=B00000000; ascii_table[58][7]=4; ascii_table[59][0]=B00000000; ascii_table[59][1]=B00110110; ascii_table[59][2]=B01010110; ascii_table[59][3]=B00000000; ascii_table[59][7]=4; ascii_table[60][0]=B00000000; ascii_table[60][1]=B01000001; ascii_table[60][2]=B00100010; ascii_table[60][3]=B00010100; ascii_table[60][4]=B00001000; ascii_table[60][5]=B00000000; ascii_table[60][7]=6; ascii_table[61][0]=B00000000; ascii_table[61][1]=B00010100; ascii_table[61][2]=B00010100; ascii_table[61][3]=B00010100; ascii_table[61][4]=B00010100; ascii_table[61][5]=B00010100; ascii_table[61][6]=B00000000; ascii_table[61][7]=7; ascii_table[62][0]=B00000000; ascii_table[62][1]=B00001000; ascii_table[62][2]=B00010100; ascii_table[62][3]=B00100010; ascii_table[62][4]=B01000001; ascii_table[62][5]=B00000000; ascii_table[62][7]=6; ascii_table[63][0]=B00000000; ascii_table[63][1]=B00000110; ascii_table[63][2]=B00001001; ascii_table[63][3]=B01010001; ascii_table[63][4]=B00000001; ascii_table[63][5]=B00000010; ascii_table[63][6]=B00000000; ascii_table[63][7]=7; ascii_table[64][0]=B00000000; ascii_table[64][1]=B00111110; ascii_table[64][2]=B01000001; ascii_table[64][3]=B01111001; ascii_table[64][4]=B01001001; ascii_table[64][5]=B00110010; ascii_table[64][6]=B00000000; ascii_table[64][7]=7; ascii_table[65][0]=B00000000; ascii_table[65][1]=B01111110; ascii_table[65][2]=B00010001; ascii_table[65][3]=B00010001; ascii_table[65][4]=B00010001; ascii_table[65][5]=B01111110; ascii_table[65][6]=B00000000; ascii_table[65][7]=7; ascii_table[66][0]=B00000000; ascii_table[66][1]=B00110110; ascii_table[66][2]=B01001001; ascii_table[66][3]=B01001001; ascii_table[66][4]=B01001001; ascii_table[66][5]=B01111111; ascii_table[66][6]=B00000000; ascii_table[66][7]=7; ascii_table[67][0]=B00000000; ascii_table[67][1]=B00100010; ascii_table[67][2]=B01000001; ascii_table[67][3]=B01000001; ascii_table[67][4]=B01000001; ascii_table[67][5]=B00111110; ascii_table[67][6]=B00000000; ascii_table[67][7]=7; ascii_table[68][0]=B00000000; ascii_table[68][1]=B00011100; ascii_table[68][2]=B00100010; ascii_table[68][3]=B01000001; ascii_table[68][4]=B01000001; ascii_table[68][5]=B01111111; ascii_table[68][6]=B00000000; ascii_table[68][7]=7; ascii_table[69][0]=B00000000; ascii_table[69][1]=B01000001; ascii_table[69][2]=B01001001; ascii_table[69][3]=B01001001; ascii_table[69][4]=B01111111; ascii_table[69][5]=B00000000; ascii_table[69][7]=6; ascii_table[70][0]=B00000000; ascii_table[70][1]=B00000001; ascii_table[70][2]=B00001001; ascii_table[70][3]=B00001001; ascii_table[70][4]=B01111111; ascii_table[70][5]=B00000000; ascii_table[70][7]=6; ascii_table[71][0]=B00000000; ascii_table[71][1]=B01111010; ascii_table[71][2]=B01001001; ascii_table[71][3]=B01001001; ascii_table[71][4]=B01000001; ascii_table[71][5]=B00111110; ascii_table[71][6]=B00000000; ascii_table[71][7]=7; ascii_table[72][0]=B00000000; ascii_table[72][1]=B01111111; ascii_table[72][2]=B00001000; ascii_table[72][3]=B00001000; ascii_table[72][4]=B01111111; ascii_table[72][5]=B00000000; ascii_table[72][7]=6; ascii_table[73][0]=B00000000; ascii_table[73][1]=B01000001; ascii_table[73][2]=B01111111; ascii_table[73][3]=B01000001; ascii_table[73][4]=B00000000; ascii_table[73][7]=5; ascii_table[74][0]=B00000000; ascii_table[74][1]=B00000001; ascii_table[74][2]=B01111111; ascii_table[74][3]=B01000001; ascii_table[74][4]=B01000000; ascii_table[74][5]=B00100000; ascii_table[74][6]=B00000000; ascii_table[74][7]=7; ascii_table[75][0]=B00000000; ascii_table[75][1]=B01000001; ascii_table[75][2]=B00100010; ascii_table[75][3]=B00010100; ascii_table[75][4]=B00001000; ascii_table[75][5]=B01111111; ascii_table[75][6]=B00000000; ascii_table[75][7]=7; ascii_table[76][0]=B00000000; ascii_table[76][1]=B01000000; ascii_table[76][2]=B01000000; ascii_table[76][3]=B01000000; ascii_table[76][4]=B01111111; ascii_table[76][5]=B00000000; ascii_table[76][7]=6; ascii_table[77][0]=B00000000; ascii_table[77][1]=B01111111; ascii_table[77][2]=B00000010; ascii_table[77][3]=B00001100; ascii_table[77][4]=B00000010; ascii_table[77][5]=B01111111; ascii_table[77][6]=B00000000; ascii_table[77][7]=7; ascii_table[78][0]=B00000000; ascii_table[78][1]=B01111111; ascii_table[78][2]=B00010000; ascii_table[78][3]=B00001000; ascii_table[78][4]=B00000100; ascii_table[78][5]=B01111111; ascii_table[78][6]=B00000000; ascii_table[78][7]=7; ascii_table[79][0]=B00000000; ascii_table[79][1]=B00111110; ascii_table[79][2]=B01000001; ascii_table[79][3]=B01000001; ascii_table[79][4]=B01000001; ascii_table[79][5]=B00111110; ascii_table[79][6]=B00000000; ascii_table[79][7]=7; ascii_table[80][0]=B00000000; ascii_table[80][1]=B00000110; ascii_table[80][2]=B00001001; ascii_table[80][3]=B00001001; ascii_table[80][4]=B00001001; ascii_table[80][5]=B01111111; ascii_table[80][6]=B00000000; ascii_table[80][7]=7; ascii_table[81][0]=B00000000; ascii_table[81][1]=B01011110; ascii_table[81][2]=B00100001; ascii_table[81][3]=B01010001; ascii_table[81][4]=B01000001; ascii_table[81][5]=B00111110; ascii_table[81][6]=B00000000; ascii_table[81][7]=7; ascii_table[82][0]=B00000000; ascii_table[82][1]=B01000110; ascii_table[82][2]=B00101001; ascii_table[82][3]=B00011001; ascii_table[82][4]=B00001001; ascii_table[82][5]=B01111111; ascii_table[82][6]=B00000000; ascii_table[82][7]=7; ascii_table[83][0]=B00000000; ascii_table[83][1]=B00110001; ascii_table[83][2]=B01001001; ascii_table[83][3]=B01001001; ascii_table[83][4]=B01001001; ascii_table[83][5]=B01000110; ascii_table[83][6]=B00000000; ascii_table[83][7]=7; ascii_table[84][0]=B00000000; ascii_table[84][1]=B00000001; ascii_table[84][2]=B00000001; ascii_table[84][3]=B01111111; ascii_table[84][4]=B00000001; ascii_table[84][5]=B00000001; ascii_table[84][6]=B00000000; ascii_table[84][7]=7; ascii_table[85][0]=B00000000; ascii_table[85][1]=B00111111; ascii_table[85][2]=B01000000; ascii_table[85][3]=B01000000; ascii_table[85][4]=B01000000; ascii_table[85][5]=B00111111; ascii_table[85][6]=B00000000; ascii_table[85][7]=7; ascii_table[86][0]=B00000000; ascii_table[86][1]=B00011111; ascii_table[86][2]=B00100000; ascii_table[86][3]=B01000000; ascii_table[86][4]=B00100000; ascii_table[86][5]=B00011111; ascii_table[86][6]=B00000000; ascii_table[86][7]=7; ascii_table[87][0]=B00000000; ascii_table[87][1]=B00111111; ascii_table[87][2]=B01000000; ascii_table[87][3]=B00111000; ascii_table[87][4]=B01000000; ascii_table[87][5]=B00111111; ascii_table[87][6]=B00000000; ascii_table[87][7]=7; ascii_table[88][0]=B00000000; ascii_table[88][1]=B01100011; ascii_table[88][2]=B00010100; ascii_table[88][3]=B00001000; ascii_table[88][4]=B00010100; ascii_table[88][5]=B01100011; ascii_table[88][6]=B00000000; ascii_table[88][7]=7; ascii_table[89][0]=B00000000; ascii_table[89][1]=B00000111; ascii_table[89][2]=B00001000; ascii_table[89][3]=B01110000; ascii_table[89][4]=B00001000; ascii_table[89][5]=B00000111; ascii_table[89][6]=B00000000; ascii_table[89][7]=7; ascii_table[90][0]=B00000000; ascii_table[90][1]=B01000011; ascii_table[90][2]=B01000101; ascii_table[90][3]=B01001001; ascii_table[90][4]=B01010001; ascii_table[90][5]=B01100001; ascii_table[90][6]=B00000000; ascii_table[90][7]=7; ascii_table[91][0]=B00000000; ascii_table[91][1]=B01000001; ascii_table[91][2]=B01000001; ascii_table[91][3]=B01111111; ascii_table[91][4]=B00000000; ascii_table[91][7]=5; ascii_table[93][0]=B00000000; ascii_table[93][1]=B01111111; ascii_table[93][2]=B01000001; ascii_table[93][3]=B01000001; ascii_table[93][4]=B00000000; ascii_table[93][7]=5; ascii_table[94][0]=B00000000; ascii_table[94][1]=B00000100; ascii_table[94][2]=B00000010; ascii_table[94][3]=B00000001; ascii_table[94][4]=B00000010; ascii_table[94][5]=B00000100; ascii_table[94][6]=B00000000; ascii_table[94][7]=7; ascii_table[95][0]=B00000000; ascii_table[95][1]=B01000000; ascii_table[95][2]=B01000000; ascii_table[95][3]=B01000000; ascii_table[95][4]=B01000000; ascii_table[95][5]=B00000000; ascii_table[95][7]=6; ascii_table[123][0]=B00000000; ascii_table[123][1]=B01000001; ascii_table[123][2]=B00110110; ascii_table[123][3]=B00001000; ascii_table[123][4]=B00000000; ascii_table[123][7]=5; ascii_table[124][0]=B00000000; ascii_table[124][1]=B01111111; ascii_table[124][2]=B00000000; ascii_table[124][7]=3; ascii_table[125][0]=B00000000; ascii_table[125][1]=B00001000; ascii_table[125][2]=B00110110; ascii_table[125][3]=B01000001; ascii_table[125][4]=B00000000; ascii_table[125][7]=5; ascii_table[126][0]=B00000000; ascii_table[126][1]=B00001000; ascii_table[126][2]=B00010000; ascii_table[126][3]=B00001000; ascii_table[126][4]=B00001000; ascii_table[126][5]=B00010000; ascii_table[126][6]=B00000000; ascii_table[126][7]=7; } void setup(){ for (int i=0;i<ilosc_ekranow;i++)    //petla inicjalizujaca matryce { lc.shutdown(i,false);      // wyjscie z trybu uspienia lc.setIntensity(i,1);      // ustawienie jasnosci lc.clearDisplay(i);        // czyszczenie ekranu } /*for (int j1=0; j1<90; j1++)      //petla do wypelnienia ascii { for (int i1=0; i1<8; i1++) { ascii_table[i1][j1]=0; } }*/ } void loop(){ wypelnij(); zczytanie_z_klawiatury(); while(customKeypad.getKey()!='D'){ slideAscii(napis);} napis=""; } void printAscii(int ekran, int indeks)        //funkcja do stałego napisu { int i = 0; for(i=0;i<8;i++) { lc.setRow(ekran,i,ascii_table[indeks][i]); delay(50); } } int ile_lini(String tekst)              //funkcja liczaca ilosc lini do wyswietlenia { int liczbowa[tekst.length()];                   //tablica zbierajaca liczby char znakowa[tekst.length()];                   //tablica zbierajaca znaki int linie;                                        //zmienna pomocnicza liczaca linie tekst.toCharArray(znakowa, tekst.length()+1);     //zamiana stringa na tablice char for (int i=0; i<tekst.length();i++) { liczbowa[i]=zamien_ascii(znakowa[i]);             //zamiana znakow na liczby linie = linie + ascii_table[liczbowa[i]][7];      //zliczenie ile lini z 7 pola ascii } return linie; } void slideAscii(String tekst) { int lini = ile_lini(tekst);                         //ilosc lini tekstu byte pattern[lini+(16*ilosc_ekranow)];              //tablica ktora finalnie bedziemy wyswietlac int liczbowa[tekst.length()];                         //fragment przekopiowany z funkcji ile_lini char znakowa[tekst.length()];                         // tekst.toCharArray(znakowa, tekst.length()+1);         // for (int i=0; i<tekst.length();i++)                   // {                                                 // liczbowa[i]=zamien_ascii(znakowa[i]);           // //Serial.println(liczbowa[i]);                  // }                                               // int licznik = 0;                                      //zmienna liczaca ktory raz petla sie wypelnia for (int k=0;k<(8*ilosc_ekranow);k++)                 //wypelnienie pierwszego ekranu w pattern B00000000 { pattern[licznik]=B00000000; Serial.println(pattern[licznik]); licznik++; } for (int i=0; i<tekst.length();i++)                             //wypelnianie napisem tablicy pattern {                                                           //zalezne od dlugosci tekstu //Serial.print("liczba: "); //Serial.println(i); for (int j=ascii_table[liczbowa[i]][7]; j>0;j--)          //oraz od ilosci lini w danym znaku { pattern[licznik] = ascii_table[liczbowa[i]][j-1]; //Serial.println(pattern[licznik]); licznik++; } } for (int k=0;k<(8*ilosc_ekranow);k++)                 //wypelnanie koncowego ekranu w pattern B00000000 { pattern[licznik]=B00000000; Serial.println(pattern[licznik]); licznik++; } for(int k=0;k<(lini+(8*ilosc_ekranow));k++) { int pasy=0; for (int i=0;i<ilosc_ekranow;i++)                     //petla wypisujaca na matrycy { for (int j=0;j<8;j++)                         //petla wewnetrzna wypisujaca na matrycy { lc.setRow(i,j,pattern[pasy+k]);           //lc.setRow funkcja wypisujaca pasy++;                                   //pattern jest obiektem ktory wypisujemy }                                         //pasy poniewaz jest to dodatkowa petla liczaca }                                                 // +k aby napis mogl sie przesuwac delay(30);                                                  //opoznienie czyli predkosc przesuwania sie tekstu } } int zamien_ascii(char znak)       //zamiana znaku na ascii { if (znak==' '){return 32;} if (znak=='!'){return 33;} if (znak=='"'){return 34;} if (znak=='#'){return 35;} if (znak=='$'){return 36;} if (znak=='%'){return 37;} if (znak=='&'){return 38;} if (znak=='('){return 40;} if (znak==')'){return 41;} if (znak=='*'){return 42;} if (znak=='+'){return 43;} if (znak==','){return 44;} if (znak=='-'){return 45;} if (znak=='.'){return 46;} if (znak=='/'){return 47;} if (znak=='0'){return 48;} if (znak=='1'){return 49;} if (znak=='2'){return 50;} if (znak=='3'){return 51;} if (znak=='4'){return 52;} if (znak=='5'){return 53;} if (znak=='6'){return 54;} if (znak=='7'){return 55;} if (znak=='8'){return 56;} if (znak=='9'){return 57;} if (znak==':'){return 58;} if (znak==';'){return 59;} if (znak=='<'){return 60;} if (znak=='='){return 61;} if (znak=='>'){return 62;} if (znak=='?'){return 63;} if (znak=='@'){return 64;} if (znak=='A'){return 65;} if (znak=='B'){return 66;} if (znak=='C'){return 67;} if (znak=='D'){return 68;} if (znak=='E'){return 69;} if (znak=='F'){return 70;} if (znak=='G'){return 71;} if (znak=='H'){return 72;} if (znak=='I'){return 73;} if (znak=='J'){return 74;} if (znak=='K'){return 75;} if (znak=='L'){return 76;} if (znak=='M'){return 77;} if (znak=='N'){return 78;} if (znak=='O'){return 79;} if (znak=='P'){return 80;} if (znak=='Q'){return 81;} if (znak=='R'){return 82;} if (znak=='S'){return 83;} if (znak=='T'){return 84;} if (znak=='U'){return 85;} if (znak=='V'){return 86;} if (znak=='W'){return 87;} if (znak=='X'){return 88;} if (znak=='Y'){return 89;} if (znak=='Z'){return 90;} if (znak=='['){return 91;} if (znak==']'){return 93;} if (znak=='^'){return 94;} if (znak=='_'){return 95;} if (znak=='{'){return 123;} if (znak=='|'){return 124;} if (znak=='}'){return 125;} if (znak=='~'){return 126;} return 32; } void zczytanie_z_klawiatury() { char tekst[20]; String znak[10]; int i=0; int j=0; bool koniec=0; while (koniec==0) { char customKey = customKeypad.getKey(); if (customKey) { tekst[i] = customKey; Serial.println("znak jaki dostalismy"); Serial.println(tekst[i]); if (tekst[i]=='S') { koniec=1; for (int k=0; k<j+1;k++) { if (znak[k] == "1")      {po_zamianie='.'; napis += po_zamianie;} if (znak[k] == "11")     {po_zamianie=','; napis += po_zamianie;} if (znak[k] == "111")    {po_zamianie='!'; napis += po_zamianie;} if (znak[k] == "1111")   {po_zamianie='?'; napis += po_zamianie;} if (znak[k] == "2")      {po_zamianie='A'; napis += po_zamianie;} if (znak[k] == "22")     {po_zamianie='B'; napis += po_zamianie;} if (znak[k] == "222")    {po_zamianie='C'; napis += po_zamianie;} if (znak[k] == "3")      {po_zamianie='D'; napis += po_zamianie;} if (znak[k] == "33")     {po_zamianie='E'; napis += po_zamianie;} if (znak[k] == "333")    {po_zamianie='F'; napis += po_zamianie;} if (znak[k] == "4")      {po_zamianie='G'; napis += po_zamianie;} if (znak[k] == "44")     {po_zamianie='H'; napis += po_zamianie;} if (znak[k] == "444")    {po_zamianie='I'; napis += po_zamianie;} if (znak[k] == "5")      {po_zamianie='J'; napis += po_zamianie;} if (znak[k] == "55")     {po_zamianie='K'; napis += po_zamianie;} if (znak[k] == "555")    {po_zamianie='L'; napis += po_zamianie;} if (znak[k] == "6")      {po_zamianie='M'; napis += po_zamianie;} if (znak[k] == "66")     {po_zamianie='N'; napis += po_zamianie;} if (znak[k] == "666")    {po_zamianie='O'; napis += po_zamianie;} if (znak[k] == "7")      {po_zamianie='P'; napis += po_zamianie;} if (znak[k] == "77")     {po_zamianie='Q'; napis += po_zamianie;} if (znak[k] == "777")    {po_zamianie='R'; napis += po_zamianie;} if (znak[k] == "7777")   {po_zamianie='S'; napis += po_zamianie;} if (znak[k] == "8")      {po_zamianie='T'; napis += po_zamianie;} if (znak[k] == "88")     {po_zamianie='U'; napis += po_zamianie;} if (znak[k] == "888")    {po_zamianie='V'; napis += po_zamianie;} if (znak[k] == "9")      {po_zamianie='W'; napis += po_zamianie;} if (znak[k] == "99")     {po_zamianie='X'; napis += po_zamianie;} if (znak[k] == "999")    {po_zamianie='Y'; napis += po_zamianie;} if (znak[k] == "9999")   {po_zamianie='Z'; napis += po_zamianie;} if (znak[k] == "A")      {po_zamianie='1'; napis += po_zamianie;} if (znak[k] == "AA")     {po_zamianie='2'; napis += po_zamianie;} if (znak[k] == "AAA")    {po_zamianie='3'; napis += po_zamianie;} if (znak[k] == "B")      {po_zamianie='4'; napis += po_zamianie;} if (znak[k] == "BB")     {po_zamianie='5'; napis += po_zamianie;} if (znak[k] == "BBB")    {po_zamianie='6'; napis += po_zamianie;} if (znak[k] == "C")      {po_zamianie='7'; napis += po_zamianie;} if (znak[k] == "CC")     {po_zamianie='8'; napis += po_zamianie;} if (znak[k] == "CCC")    {po_zamianie='9'; napis += po_zamianie;} if (znak[k] == "0")      {po_zamianie=' '; napis += po_zamianie;} if (znak[k] == "00")     {po_zamianie='0'; napis += po_zamianie;} } Serial.println("tablica po zamianie:"); /* for (int k=0; k<j+1;k++) { Serial.print(po_zamianie[k]); }*/ Serial.println(""); Serial.println("napis:"); Serial.println(napis); } if (tekst[i]=='*') { j++; i=0; } else { Serial.print("znak["); Serial.print(j); Serial.println("]"); znak[j]=znak[j]+tekst[i]; Serial.println(znak[j]); i++; } Serial.println("uzyskana tablica"); for (int k=0; k<j+1; k++) { Serial.println(znak[k]); } Serial.println(""); } } }   Całość jest jasno wytłumaczona na filmie: https://www.youtube.com/watch?v=VOWYsQDwFF0   Polecamy:  Płytka stykowa  Arduino UNO R3

Przesuwający tekst – MATRYCA LED 8×8

Cześć, Mój projekt w założeniu miał wyświetlać przesuwający się tekst na matrycach LED 8x8. Części potrzebne do realizacji projektu to: -płytka Arduino UNO http://abc-rc.pl/Arduino-UNO-R3-CH340 -matrycaLED 8x8 ze sterownikiem MAX7219 http://abc-rc.pl/MAX7219-LED-red Program jest napisany w taki sposób aby można było użyć dowolnej liczby matryc Schemat:   Sketch: #include <LedControl.h> int DIN = 12; int CS =  11; int CLK = 10; int ilosc_ekranow = 2; String tekscik = "PRZYKLADOWY TEKST: WWW.ABC-RC.PL"; byte ascii_table[130][8]; LedControl lc=LedControl(DIN,CLK,CS,0); void wypelnij() { ascii_table[32][0]=B00000000; ascii_table[32][1]=B00000000; ascii_table[32][2]=B00000000; ascii_table[32][3]=B00000000; ascii_table[32][4]=B00000000; ascii_table[32][7]=5; ascii_table[33][0]=B00000000; ascii_table[33][1]=B01011111; ascii_table[33][2]=B00000000; ascii_table[33][7]=3; ascii_table[34][0]=B00000000; ascii_table[34][1]=B00001110; ascii_table[34][2]=B00000000; ascii_table[34][3]=B00001110; ascii_table[34][4]=B00000000; ascii_table[34][7]=5; ascii_table[35][0]=B00000000; ascii_table[35][1]=B00010100; ascii_table[35][2]=B01111111; ascii_table[35][3]=B00010100; ascii_table[35][4]=B01111111; ascii_table[35][5]=B00010100; ascii_table[35][6]=B00000000; ascii_table[35][7]=7; ascii_table[36][0]=B00000000; ascii_table[36][1]=B00100100; ascii_table[36][2]=B00101010; ascii_table[36][3]=B01111111; ascii_table[36][4]=B00101010; ascii_table[36][5]=B00100100; ascii_table[36][6]=B00000000; ascii_table[36][7]=7; ascii_table[37][0]=B00000000; ascii_table[37][1]=B01100010; ascii_table[37][2]=B01100100; ascii_table[37][3]=B00001000; ascii_table[37][4]=B00010011; ascii_table[37][5]=B00100011; ascii_table[37][6]=B00000000; ascii_table[37][7]=7; ascii_table[38][0]=B00000000; ascii_table[38][1]=B01010000; ascii_table[38][2]=B00100010; ascii_table[38][3]=B01010101; ascii_table[38][4]=B01001001; ascii_table[38][5]=B00110110; ascii_table[38][6]=B00000000; ascii_table[38][7]=7; ascii_table[39][0]=B00000000; ascii_table[39][1]=B00000011; ascii_table[39][2]=B00000101; ascii_table[39][3]=B00000000; ascii_table[39][7]=4; ascii_table[40][0]=B00000000; ascii_table[40][1]=B01000001; ascii_table[40][2]=B00100010; ascii_table[40][3]=B00011100; ascii_table[40][4]=B00000000; ascii_table[40][7]=5; ascii_table[41][0]=B00000000; ascii_table[41][1]=B00011100; ascii_table[41][2]=B00100010; ascii_table[41][3]=B01000001; ascii_table[41][4]=B00000000; ascii_table[41][7]=5; ascii_table[42][0]=B00000000; ascii_table[42][1]=B00010100; ascii_table[42][2]=B00001000; ascii_table[42][3]=B00111110; ascii_table[42][4]=B00001000; ascii_table[42][5]=B00010100; ascii_table[42][6]=B00000000; ascii_table[42][7]=7; ascii_table[43][0]=B00000000; ascii_table[43][1]=B00001000; ascii_table[43][2]=B00001000; ascii_table[43][3]=B00111110; ascii_table[43][4]=B00001000; ascii_table[43][5]=B00001000; ascii_table[43][6]=B00000000; ascii_table[43][7]=7; ascii_table[44][0]=B00000000; ascii_table[44][1]=B00110000; ascii_table[44][2]=B01010000; ascii_table[44][3]=B00000000; ascii_table[44][7]=4; ascii_table[45][0]=B00000000; ascii_table[45][1]=B00001000; ascii_table[45][2]=B00001000; ascii_table[45][3]=B00001000; ascii_table[45][4]=B00001000; ascii_table[45][5]=B00000000; ascii_table[45][7]=6; ascii_table[46][0]=B00000000; ascii_table[46][1]=B01100000; ascii_table[46][2]=B01100000; ascii_table[46][3]=B00000000; ascii_table[46][7]=4; ascii_table[47][0]=B00000000; ascii_table[47][1]=B00000010; ascii_table[47][2]=B00000100; ascii_table[47][3]=B00001000; ascii_table[47][4]=B00010000; ascii_table[47][5]=B00100000; ascii_table[47][6]=B00000000; ascii_table[47][7]=7; ascii_table[48][0]=B00000000; ascii_table[48][1]=B00111110; ascii_table[48][2]=B01000001; ascii_table[48][3]=B01000001; ascii_table[48][4]=B00111110; ascii_table[48][5]=B00000000; ascii_table[48][7]=6; ascii_table[49][0]=B00000000; ascii_table[49][1]=B01000000; ascii_table[49][2]=B01111111; ascii_table[49][3]=B01000010; ascii_table[49][4]=B00000000; ascii_table[49][7]=5; ascii_table[50][0]=B00000000; ascii_table[50][1]=B01000110; ascii_table[50][2]=B01001001; ascii_table[50][3]=B01010001; ascii_table[50][4]=B01100011; ascii_table[50][5]=B01000010; ascii_table[50][6]=B00000000; ascii_table[50][7]=7; ascii_table[51][0]=B00000000; ascii_table[51][1]=B00110001; ascii_table[51][2]=B01001011; ascii_table[51][3]=B01000101; ascii_table[51][4]=B01000001; ascii_table[51][5]=B00100001; ascii_table[51][6]=B00000000; ascii_table[51][7]=7; ascii_table[52][0]=B00000000; ascii_table[52][1]=B00010000; ascii_table[52][2]=B01111111; ascii_table[52][3]=B00010010; ascii_table[52][4]=B00010100; ascii_table[52][5]=B00011000; ascii_table[52][6]=B00000000; ascii_table[52][7]=7; ascii_table[53][0]=B00000000; ascii_table[53][1]=B00111001; ascii_table[53][2]=B01000101; ascii_table[53][3]=B01000101; ascii_table[53][4]=B01000101; ascii_table[53][5]=B00100111; ascii_table[53][6]=B00000000; ascii_table[53][7]=7; ascii_table[54][0]=B00000000; ascii_table[54][1]=B00110000; ascii_table[54][2]=B01001001; ascii_table[54][3]=B01001001; ascii_table[54][4]=B01001010; ascii_table[54][5]=B00111100; ascii_table[54][6]=B00000000; ascii_table[54][7]=7; ascii_table[55][0]=B00000000; ascii_table[55][1]=B00000111; ascii_table[55][2]=B00001001; ascii_table[55][3]=B01110001; ascii_table[55][4]=B00000001; ascii_table[55][5]=B00000011; ascii_table[55][6]=B00000000; ascii_table[55][7]=7; ascii_table[56][0]=B00000000; ascii_table[56][1]=B00110110; ascii_table[56][2]=B01001001; ascii_table[56][3]=B01001001; ascii_table[56][4]=B01001001; ascii_table[56][5]=B00110110; ascii_table[56][6]=B00000000; ascii_table[56][7]=7; ascii_table[57][0]=B00000000; ascii_table[57][1]=B00011110; ascii_table[57][2]=B00101001; ascii_table[57][3]=B01001001; ascii_table[57][4]=B01001001; ascii_table[57][5]=B00000110; ascii_table[57][6]=B00000000; ascii_table[57][7]=7; ascii_table[58][0]=B00000000; ascii_table[58][1]=B00110110; ascii_table[58][2]=B00110110; ascii_table[58][3]=B00000000; ascii_table[58][7]=4; ascii_table[59][0]=B00000000; ascii_table[59][1]=B00110110; ascii_table[59][2]=B01010110; ascii_table[59][3]=B00000000; ascii_table[59][7]=4; ascii_table[60][0]=B00000000; ascii_table[60][1]=B01000001; ascii_table[60][2]=B00100010; ascii_table[60][3]=B00010100; ascii_table[60][4]=B00001000; ascii_table[60][5]=B00000000; ascii_table[60][7]=6; ascii_table[61][0]=B00000000; ascii_table[61][1]=B00010100; ascii_table[61][2]=B00010100; ascii_table[61][3]=B00010100; ascii_table[61][4]=B00010100; ascii_table[61][5]=B00010100; ascii_table[61][6]=B00000000; ascii_table[61][7]=7; ascii_table[62][0]=B00000000; ascii_table[62][1]=B00001000; ascii_table[62][2]=B00010100; ascii_table[62][3]=B00100010; ascii_table[62][4]=B01000001; ascii_table[62][5]=B00000000; ascii_table[62][7]=6; ascii_table[63][0]=B00000000; ascii_table[63][1]=B00000110; ascii_table[63][2]=B00001001; ascii_table[63][3]=B01010001; ascii_table[63][4]=B00000001; ascii_table[63][5]=B00000010; ascii_table[63][6]=B00000000; ascii_table[63][7]=7; ascii_table[64][0]=B00000000; ascii_table[64][1]=B00111110; ascii_table[64][2]=B01000001; ascii_table[64][3]=B01111001; ascii_table[64][4]=B01001001; ascii_table[64][5]=B00110010; ascii_table[64][6]=B00000000; ascii_table[64][7]=7; ascii_table[65][0]=B00000000; ascii_table[65][1]=B01111110; ascii_table[65][2]=B00010001; ascii_table[65][3]=B00010001; ascii_table[65][4]=B00010001; ascii_table[65][5]=B01111110; ascii_table[65][6]=B00000000; ascii_table[65][7]=7; ascii_table[66][0]=B00000000; ascii_table[66][1]=B00110110; ascii_table[66][2]=B01001001; ascii_table[66][3]=B01001001; ascii_table[66][4]=B01001001; ascii_table[66][5]=B01111111; ascii_table[66][6]=B00000000; ascii_table[66][7]=7; ascii_table[67][0]=B00000000; ascii_table[67][1]=B00100010; ascii_table[67][2]=B01000001; ascii_table[67][3]=B01000001; ascii_table[67][4]=B01000001; ascii_table[67][5]=B00111110; ascii_table[67][6]=B00000000; ascii_table[67][7]=7; ascii_table[68][0]=B00000000; ascii_table[68][1]=B00011100; ascii_table[68][2]=B00100010; ascii_table[68][3]=B01000001; ascii_table[68][4]=B01000001; ascii_table[68][5]=B01111111; ascii_table[68][6]=B00000000; ascii_table[68][7]=7; ascii_table[69][0]=B00000000; ascii_table[69][1]=B01000001; ascii_table[69][2]=B01001001; ascii_table[69][3]=B01001001; ascii_table[69][4]=B01111111; ascii_table[69][5]=B00000000; ascii_table[69][7]=6; ascii_table[70][0]=B00000000; ascii_table[70][1]=B00000001; ascii_table[70][2]=B00001001; ascii_table[70][3]=B00001001; ascii_table[70][4]=B01111111; ascii_table[70][5]=B00000000; ascii_table[70][7]=6; ascii_table[71][0]=B00000000; ascii_table[71][1]=B01111010; ascii_table[71][2]=B01001001; ascii_table[71][3]=B01001001; ascii_table[71][4]=B01000001; ascii_table[71][5]=B00111110; ascii_table[71][6]=B00000000; ascii_table[71][7]=7; ascii_table[72][0]=B00000000; ascii_table[72][1]=B01111111; ascii_table[72][2]=B00001000; ascii_table[72][3]=B00001000; ascii_table[72][4]=B01111111; ascii_table[72][5]=B00000000; ascii_table[72][7]=6; ascii_table[73][0]=B00000000; ascii_table[73][1]=B01000001; ascii_table[73][2]=B01111111; ascii_table[73][3]=B01000001; ascii_table[73][4]=B00000000; ascii_table[73][7]=5; ascii_table[74][0]=B00000000; ascii_table[74][1]=B00000001; ascii_table[74][2]=B01111111; ascii_table[74][3]=B01000001; ascii_table[74][4]=B01000000; ascii_table[74][5]=B00100000; ascii_table[74][6]=B00000000; ascii_table[74][7]=7; ascii_table[75][0]=B00000000; ascii_table[75][1]=B01000001; ascii_table[75][2]=B00100010; ascii_table[75][3]=B00010100; ascii_table[75][4]=B00001000; ascii_table[75][5]=B01111111; ascii_table[75][6]=B00000000; ascii_table[75][7]=7; ascii_table[76][0]=B00000000; ascii_table[76][1]=B01000000; ascii_table[76][2]=B01000000; ascii_table[76][3]=B01000000; ascii_table[76][4]=B01111111; ascii_table[76][5]=B00000000; ascii_table[76][7]=6; ascii_table[77][0]=B00000000; ascii_table[77][1]=B01111111; ascii_table[77][2]=B00000010; ascii_table[77][3]=B00001100; ascii_table[77][4]=B00000010; ascii_table[77][5]=B01111111; ascii_table[77][6]=B00000000; ascii_table[77][7]=7; ascii_table[78][0]=B00000000; ascii_table[78][1]=B01111111; ascii_table[78][2]=B00010000; ascii_table[78][3]=B00001000; ascii_table[78][4]=B00000100; ascii_table[78][5]=B01111111; ascii_table[78][6]=B00000000; ascii_table[78][7]=7; ascii_table[79][0]=B00000000; ascii_table[79][1]=B00111110; ascii_table[79][2]=B01000001; ascii_table[79][3]=B01000001; ascii_table[79][4]=B01000001; ascii_table[79][5]=B00111110; ascii_table[79][6]=B00000000; ascii_table[79][7]=7; ascii_table[80][0]=B00000000; ascii_table[80][1]=B00000110; ascii_table[80][2]=B00001001; ascii_table[80][3]=B00001001; ascii_table[80][4]=B00001001; ascii_table[80][5]=B01111111; ascii_table[80][6]=B00000000; ascii_table[80][7]=7; ascii_table[81][0]=B00000000; ascii_table[81][1]=B01011110; ascii_table[81][2]=B00100001; ascii_table[81][3]=B01010001; ascii_table[81][4]=B01000001; ascii_table[81][5]=B00111110; ascii_table[81][6]=B00000000; ascii_table[81][7]=7; ascii_table[82][0]=B00000000; ascii_table[82][1]=B01000110; ascii_table[82][2]=B00101001; ascii_table[82][3]=B00011001; ascii_table[82][4]=B00001001; ascii_table[82][5]=B01111111; ascii_table[82][6]=B00000000; ascii_table[82][7]=7; ascii_table[83][0]=B00000000; ascii_table[83][1]=B00110001; ascii_table[83][2]=B01001001; ascii_table[83][3]=B01001001; ascii_table[83][4]=B01001001; ascii_table[83][5]=B01000110; ascii_table[83][6]=B00000000; ascii_table[83][7]=7; ascii_table[84][0]=B00000000; ascii_table[84][1]=B00000001; ascii_table[84][2]=B00000001; ascii_table[84][3]=B01111111; ascii_table[84][4]=B00000001; ascii_table[84][5]=B00000001; ascii_table[84][6]=B00000000; ascii_table[84][7]=7; ascii_table[85][0]=B00000000; ascii_table[85][1]=B00111111; ascii_table[85][2]=B01000000; ascii_table[85][3]=B01000000; ascii_table[85][4]=B01000000; ascii_table[85][5]=B00111111; ascii_table[85][6]=B00000000; ascii_table[85][7]=7; ascii_table[86][0]=B00000000; ascii_table[86][1]=B00011111; ascii_table[86][2]=B00100000; ascii_table[86][3]=B01000000; ascii_table[86][4]=B00100000; ascii_table[86][5]=B00011111; ascii_table[86][6]=B00000000; ascii_table[86][7]=7; ascii_table[87][0]=B00000000; ascii_table[87][1]=B00111111; ascii_table[87][2]=B01000000; ascii_table[87][3]=B00111000; ascii_table[87][4]=B01000000; ascii_table[87][5]=B00111111; ascii_table[87][6]=B00000000; ascii_table[87][7]=7; ascii_table[88][0]=B00000000; ascii_table[88][1]=B01100011; ascii_table[88][2]=B00010100; ascii_table[88][3]=B00001000; ascii_table[88][4]=B00010100; ascii_table[88][5]=B01100011; ascii_table[88][6]=B00000000; ascii_table[88][7]=7; ascii_table[89][0]=B00000000; ascii_table[89][1]=B00000111; ascii_table[89][2]=B00001000; ascii_table[89][3]=B01110000; ascii_table[89][4]=B00001000; ascii_table[89][5]=B00000111; ascii_table[89][6]=B00000000; ascii_table[89][7]=7; ascii_table[90][0]=B00000000; ascii_table[90][1]=B01000011; ascii_table[90][2]=B01000101; ascii_table[90][3]=B01001001; ascii_table[90][4]=B01010001; ascii_table[90][5]=B01100001; ascii_table[90][6]=B00000000; ascii_table[90][7]=7; ascii_table[91][0]=B00000000; ascii_table[91][1]=B01000001; ascii_table[91][2]=B01000001; ascii_table[91][3]=B01111111; ascii_table[91][4]=B00000000; ascii_table[91][7]=5; ascii_table[93][0]=B00000000; ascii_table[93][1]=B01111111; ascii_table[93][2]=B01000001; ascii_table[93][3]=B01000001; ascii_table[93][4]=B00000000; ascii_table[93][7]=5; ascii_table[94][0]=B00000000; ascii_table[94][1]=B00000100; ascii_table[94][2]=B00000010; ascii_table[94][3]=B00000001; ascii_table[94][4]=B00000010; ascii_table[94][5]=B00000100; ascii_table[94][6]=B00000000; ascii_table[94][7]=7; ascii_table[95][0]=B00000000; ascii_table[95][1]=B01000000; ascii_table[95][2]=B01000000; ascii_table[95][3]=B01000000; ascii_table[95][4]=B01000000; ascii_table[95][5]=B00000000; ascii_table[95][7]=6; ascii_table[123][0]=B00000000; ascii_table[123][1]=B01000001; ascii_table[123][2]=B00110110; ascii_table[123][3]=B00001000; ascii_table[123][4]=B00000000; ascii_table[123][7]=5; ascii_table[124][0]=B00000000; ascii_table[124][1]=B01111111; ascii_table[124][2]=B00000000; ascii_table[124][7]=3; ascii_table[125][0]=B00000000; ascii_table[125][1]=B00001000; ascii_table[125][2]=B00110110; ascii_table[125][3]=B01000001; ascii_table[125][4]=B00000000; ascii_table[125][7]=5; ascii_table[126][0]=B00000000; ascii_table[126][1]=B00001000; ascii_table[126][2]=B00010000; ascii_table[126][3]=B00001000; ascii_table[126][4]=B00001000; ascii_table[126][5]=B00010000; ascii_table[126][6]=B00000000; ascii_table[126][7]=7; } void setup(){ Serial.begin(9600); for (int i=0;i<ilosc_ekranow;i++)    //petla inicjalizujaca matryce { lc.shutdown(i,false);      // wyjscie z trybu uspienia lc.setIntensity(i,1);      // ustawienie jasnosci lc.clearDisplay(i);        // czyszczenie ekranu } /*for (int j1=0; j1<90; j1++)      //petla do wypelnienia ascii { for (int i1=0; i1<8; i1++) { ascii_table[i1][j1]=0; } }*/ } void loop(){ wypelnij(); slideAscii(tekscik); } void printAscii(int ekran, int indeks)        //funkcja do stałego napisu { int i = 0; for(i=0;i<8;i++) { lc.setRow(ekran,i,ascii_table[indeks][i]); delay(50); } } int ile_lini(String tekst)              //funkcja liczaca ilosc lini do wyswietlenia { int liczbowa[tekst.length()];                   //tablica zbierajaca liczby char znakowa[tekst.length()];                   //tablica zbierajaca znaki int linie;                                        //zmienna pomocnicza liczaca linie tekst.toCharArray(znakowa, tekst.length()+1);     //zamiana stringa na tablice char for (int i=0; i<tekst.length();i++) { liczbowa[i]=zamien_ascii(znakowa[i]);             //zamiana znakow na liczby linie = linie + ascii_table[liczbowa[i]][7];      //zliczenie ile lini z 7 pola ascii } return linie; } void slideAscii(String tekst) { int lini = ile_lini(tekst);                         //ilosc lini tekstu byte pattern[lini+(16*ilosc_ekranow)];              //tablica ktora finalnie bedziemy wyswietlac int liczbowa[tekst.length()];                         //fragment przekopiowany z funkcji ile_lini char znakowa[tekst.length()];                         // tekst.toCharArray(znakowa, tekst.length()+1);         // for (int i=0; i<tekst.length();i++)                   // {                                                 // liczbowa[i]=zamien_ascii(znakowa[i]);           // //Serial.println(liczbowa[i]);                  // }                                               // int licznik = 0;                                      //zmienna liczaca ktory raz petla sie wypelnia for (int k=0;k<(8*ilosc_ekranow);k++)                 //wypelnienie pierwszego ekranu w pattern B00000000 { pattern[licznik]=B00000000; Serial.println(pattern[licznik]); licznik++; } for (int i=0; i<tekst.length();i++)                             //wypelnianie napisem tablicy pattern {                                                           //zalezne od dlugosci tekstu //Serial.print("liczba: "); //Serial.println(i); for (int j=ascii_table[liczbowa[i]][7]; j>0;j--)          //oraz od ilosci lini w danym znaku { pattern[licznik] = ascii_table[liczbowa[i]][j-1]; //Serial.println(pattern[licznik]); licznik++; } } for (int k=0;k<(8*ilosc_ekranow);k++)                 //wypelnanie koncowego ekranu w pattern B00000000 { pattern[licznik]=B00000000; Serial.println(pattern[licznik]); licznik++; } for(int k=0;k<(lini+(8*ilosc_ekranow));k++) { int pasy=0; for (int i=0;i<ilosc_ekranow;i++)                     //petla wypisujaca na matrycy { for (int j=0;j<8;j++)                         //petla wewnetrzna wypisujaca na matrycy { lc.setRow(i,j,pattern[pasy+k]);           //lc.setRow funkcja wypisujaca pasy++;                                   //pattern jest obiektem ktory wypisujemy }                                         //pasy poniewaz jest to dodatkowa petla liczaca }                                                 // +k aby napis mogl sie przesuwac delay(30);                                                  //opoznienie czyli predkosc przesuwania sie tekstu } } int zamien_ascii(char znak)       //zamiana znaku na ascii { if (znak==' '){return 32;} if (znak=='!'){return 33;} if (znak=='"'){return 34;} if (znak=='#'){return 35;} if (znak=='$'){return 36;} if (znak=='%'){return 37;} if (znak=='&'){return 38;} if (znak=='('){return 40;} if (znak==')'){return 41;} if (znak=='*'){return 42;} if (znak=='+'){return 43;} if (znak==','){return 44;} if (znak=='-'){return 45;} if (znak=='.'){return 46;} if (znak=='/'){return 47;} if (znak=='0'){return 48;} if (znak=='1'){return 49;} if (znak=='2'){return 50;} if (znak=='3'){return 51;} if (znak=='4'){return 52;} if (znak=='5'){return 53;} if (znak=='6'){return 54;} if (znak=='7'){return 55;} if (znak=='8'){return 56;} if (znak=='9'){return 57;} if (znak==':'){return 58;} if (znak==';'){return 59;} if (znak=='<'){return 60;} if (znak=='='){return 61;} if (znak=='>'){return 62;} if (znak=='?'){return 63;} if (znak=='@'){return 64;} if (znak=='A'){return 65;} if (znak=='B'){return 66;} if (znak=='C'){return 67;} if (znak=='D'){return 68;} if (znak=='E'){return 69;} if (znak=='F'){return 70;} if (znak=='G'){return 71;} if (znak=='H'){return 72;} if (znak=='I'){return 73;} if (znak=='J'){return 74;} if (znak=='K'){return 75;} if (znak=='L'){return 76;} if (znak=='M'){return 77;} if (znak=='N'){return 78;} if (znak=='O'){return 79;} if (znak=='P'){return 80;} if (znak=='Q'){return 81;} if (znak=='R'){return 82;} if (znak=='S'){return 83;} if (znak=='T'){return 84;} if (znak=='U'){return 85;} if (znak=='V'){return 86;} if (znak=='W'){return 87;} if (znak=='X'){return 88;} if (znak=='Y'){return 89;} if (znak=='Z'){return 90;} if (znak=='['){return 91;} if (znak==']'){return 93;} if (znak=='^'){return 94;} if (znak=='_'){return 95;} if (znak=='{'){return 123;} if (znak=='|'){return 124;} if (znak=='}'){return 125;} if (znak=='~'){return 126;} return 32; } Całość jest jasno wytłumaczona na filmie: https://www.youtube.com/watch?v=vL3h7gUxsD0  

Pokojowy schładzacz powietrza.

Witajcie, chciałem się podzielić swoim nowym projektem a jest nim mini klimatyzacja. Słoneczko ostatnimi dniami niemiłosiernie grzeje, a temperatura w moim pokoju (na poddaszu) rośnie w oczach! Aby dało się spokojnie spać postanowiłem wykonać pokojową mini klimatyzację, urządzenie, które chociaż trochę schłodzi powietrze w pokoju. Szperając w internecie znalazłem wiele różnych konstrukcji od prostszych po te bardziej rozbudowane. Ja z braku finansów i czasu postanowiłem wykorzystać rzeczy, które już posiadałem i moim wzorem był przykład "klimy" z wykorzystaniem lodu. W swoim projekcie postanowiłem wykorzystać właśnie lód, którego mam jak lodu xd. Konstrukcja jest prosta złożona z uszczelnionego klejem na gorąco zasilacza komputerowego (samej obudowy), wentylatora (który był w nim zamontowany oryginalnie), oraz aluminiowych przegród w środku, które mają za zadanie oddawać zimno z zimnej wody po rozpuszczeniu się lodu. Nad wszystkim czuwa arduino uno które gromadzi informacje z dwóch czujników temperatury (dallas DS18B20) i wyświetla je na wyświetlaczu lcd 16x2. Jeden termometr mierzy temperaturę w pokoju i jeżeli ta wzrośnie powyżej ustawionej za pomocą potencjometru lub pilota to arduino uruchamia wentylator po przez przekaźnik (chciałem użyć tranzystora, lecz brakło już miejsca na płytce stykowej). Uruchamia się przekaźnik i zamyka obwód wentylatora, który tłoczy ciepłe powietrze do naszej obudowy po brzegi wypełnionej lodem. Drugi termometr mierzy i wyświetla temperaturę schłodzonego powietrza przez naszą klimatyzację. Jeżeli nasz zapas lodu się skończy, (a wysytarcza on na ok. od 40 do 100min. w zależności od temperatury w pokoju), wtedy powietrze, które wychodzi z naszej klimy staje się cieplejsze. Wtedy tą zmianę odczytuje nasz czujnik i jeżeli temperatura powietrza z naszej klimatyzacji jest o 1 stopień niższa niż pokojowa to arduino uruchamia buzer, lub diodę LED które informują nas, iż zapas lodu się skończył. System ten ma swoje wady ale i zalety. Do zalet na pewno można zaliczyć: schładza temperaturę powietrza i wytwarza chłodny, przyjemny powiew. jest mało prądożerny. prosty w obsłudze i budowie. nawet daje radę Jednak nie jest doskonały i oto jego wady: słaba wydajność (przez to, że jest energooszczędny). zwiększa wilgotność powietrza. trzeba uzupełniać zapasy lodu. Mój system nie został jeszcze kompleksowo sprawdzony pod względem wydajności, ponieważ teraz gdy ukończyłem projekt temperatury zewnętrzne były nie za wysokie, lecz podzielę się obserwacjami z weekendu. A więc tak temperatura zewnętrzna w południe osiągnęła 23 stopnie a w pokoju panowały przyjemne 22 stopnie. Nie było potrzeby włączać urządzenia, lecz chciałem przetestować swój ukończony system. Powiem tak w słoneczne dni temperatura w pokoju rośnie do wieczora, słońce nagrzewa wnętrze pokoju, a jak mamy włączone urządzenie no to efektu brak, no może nie tyle brak co jest on mizerny. Zdecydowanie lepiej radzi sobie po zachodzie słońca. Wtedy to zaobserwowałem spadek temperatury w moim pokoju o ok 0,5 stopnia co 25-30min. Przy wymiarach mojego pokoju a jest on dość sporawy (ok. 5 x 4,5 x 2,5m.). W mniejszych pomieszczeniach efektywność wzrośnie. Następnego dnia gdy na zewnątrz panowało 29 stopni a w moim pokoju 25 to sytuacja wyglądała następująco. Lód topniał ciut szybciej a temperatura wyjściowa spadła do 14 stopni, lecz na kilkanaście minut i wraz z roztapiającym się lodem wzrastała co jest gorszą wiadomością. Także tempo schładzania bardziej nagrzanego powietrza wydłużało się. I nasz system automatycznie potrzebuje więcej czasu i lodu aby schłodzić nasz pokój i jeżeli nie kładziesz się spać o 21 to system zdąży trochę schłodzić nasz pokój o parę stopni. Resztę obserwacji będę dodawał w komentarzach.  A oto parę fotek projektu:

Serwo sterowane czujnikiem odległości

  Witam, chciałbym zaprezentować prosty projekt, w którym pozycja serwa zależy od wskazań czujnika odległości. Dzięki temu serwo może wskazywać na miejsce, w którym aktualnie znajduje się jakiś przedmiot. Jak to działa? Przy pomocy czujnika odległości odczytujemy wartość jaka dzieli nasz przedmiot od sensora. Znając tę wielkość oraz obszar działania naszego czujnika możemy wyznaczyć kąt o jaki ma się obrócić serwo, by zaczął wskazywać na dany przedmiot. Kąt obliczyłem dzieląc odległość przedmiotu od czujnika przez długość na jakiej ma działać czujnik oraz mnożąc tę wartość razy 180. Co potrzebujemy? płytka Arduino  Uno - http://abc-rc.pl/Arduino-UNO-R3-CH340 płytka stykowa zasilacz 12V - tutaj pozyskany ze starego dekodera czujnik odległości  - http://abc-rc.pl/Czujnik-HC-SR04 serwo stabilizator http://abc-rc.pl/stabilizator-l7805cv-5v-1-5a-to-220 zworki

Zamek szyfrowany na Arduino

Witam, chciałbym przedstawić projekt prototypu zamka szyfrowanego na platformie Arduino. Czego potrzebujemy: Arduino Serwomechanizm (dla stabilności układu proponuję podłączyć przy pomocy dodatkowego zasilania razem ze stabilizatorem napięcia i kondensatorami filtrującymi) Wyświetlacz, w naszym przypadku jest to 4x20, może być również 2x16, podłączony przez I2C. Płytka stykowa Zworki   Projekt zawiera interfejs wprowadzania hasła przy pomocy klawiatury membranowej, który jest wyświetlany na wyświetlaczu 4x20. Hasło jest ustawiane w kodzie programu. Serwo jest naszym zamkiem, które przy poprawnym wprowadzeniu hasła,  gdy chcemy otworzyć zamek, zmienia swój kąt o 90 stopni. W przypadku, kiedy nasz sejf jest otwarty i wprowadzimy hasło ponownie, położenie serwa zmieni się o 90 stopni w odwrotnym kierunku, czyli wróci do pozycji początkowej. Na wyświetlaczu zostają wyświetlane komunikaty typu "Sejf zamknięty", "Sejf otwarty" lub "Zle haslo". Możemy to wszystko zmieniać i edytować na własne potrzeby w kodzie programu. Projekt można rozbudować na wiele różnych sposobów np. dodając czytnik kart i w ten sposób otwierać nasz zamek, dodać czujniki ruchu/ kontaktrony i stworzyć np. prosty alarm. By ułatwić i zachęcić do rozwoju tego projektu zamieszczam poniżej swój kod programu, który może pomóc przy korzystaniu z wpisywania hasła, wyświetlaniu komunikatów itp.   Schemat podłączenia:     Zrzuty ekranu z kodu programu:                                                          

Arduino platforma mobilna własnej konstrukcji na IR.

Już od najmłodszych lat fascynowały mnie urządzenia elektroniczne a zwłaszcza zabawki zdalnie sterowane RC. Zawsze chciałem zbudować samodzielnie taki pojazd, a teraz marzenie stało się rzeczywistością gdy mam do dyspozycji mikrokontroler ARDUINO UNO. Ale najpierw trzeba było się wiele, wiele nauczyć aby w ogóle móc myśleć o takim projekcie. Po paru tygodniach zabawy z pisaniem wierszy poleceń postanowiłem zrealizować dziecięce marzenie. A więc najpierw zgromadziłem potrzebne elementy jakie będą mi potrzebne do budowy "platformy mobilnej". A więc wygrzebałem zestaw napędowy z jakiegoś autka, zestaw metalowych płytek śrub i nakrętek z których budowało się czołg, trzecie kółko z krzesła brata, nie mówcie mu ciekawe kiedy zauważy jego brak :) Po zgromadzeniu wszystkich potrzebnych części mechanicznych i złożeniu ich przyszła kolej na części elektroniczne. A więc nasz mikrokontroler, następnie znalazłem dwa tranzystory MOSFET polowe z zasilacza komputerowego,  dwie diody Zenera i odbiornik podczerwieni z radia. Po złożeniu projektu przyszedł czas na napisanie programu. To nie była prosta sprawa, ale po paru godzinach mój sketch był już wgrany do mikrokontrolera a więc przyszła pora na jazdę testową. Lecz nie wszystko poszło po dobrej myśli, samochodzik odbierał tylko jedną komendę i nie reagował na inne. I zaczęła się jazda pod górkę co poszło nie tak? Przecież wszystko jest poprawnie podłączone, a więc wina programu. Modyfikowałem go, przerabiałem, pisałem dodatkowe warunki, lecz to nic nie dało. Za każdym razem był ten sam efekt. Właśnie wtedy doszło do mnie że program musi być dobry i sprawdziłem czy w ogóle nasz kontroler i odbiornik podczerwieni odbierają sygnały z pilota. Okazało się, iż po odłączeniu silników wszystko działało poprawnie.  W monitorze szeregowym pojawiały się komendy jakie wysyłałem z pilota. Czytałem wiele for i dowiedziałem się, iż przyczyną wszystkich moich problemów były zakłócenia które produkowały silniki. Jestem nowicjuszem dlatego przestrzegam wszystkich z tego miejsca przed ZAKŁÓCENIAMI!!! Ponieważ potrafią skomplikować nie jeden projekt. Rozwiązaniem mojego problemu było zastosowanie paru kondensatorów. Tutaj przedstawiam i szczegółowo opisuję projekt:

Stacja meteo

STACJA METEO Witam, wraz z kolegą postanowiliśmy stworzyć projekt stacji meteo na platformie arduino. Głównym założeniem projektu była nauka obsługi czujników. Stacja posiada funkcję badania temperatury, wilgotności powietrza, opadów deszczu, natężenia światła oraz wilgotności gleby.     SPOSÓB DZIAŁANIA: Do wyświetlania informacji początkowo planowaliśmy użyć wyświetlacza LCD, jednak doszliśmy do wniosku że nie ma takiej potrzeby więc informacje są wyświetlane w konsoli. W przyszłości zamierzamy jednak rozwinąć nasz projekt, informacje dotyczące pogody będą wysyłane do aplikacji w telefonie komórkowym. Dzięki czujnikowi wilgotności gleby który jest umieszczony w doniczce, jesteśmy informowani o konieczności podlania kwiatka. Tak jak wspomnieliśmy stacja ma również mierzyć temperaturę, wilgotność powietrza, sprawdzać zachmurzenie oraz informować o opadach. Jeśli chodzi o natężenie światła to ustaliliśmy trzy tryby: słonecznie, lekkie zachmurzenie, pochmurnie jest to możliwe dzięki fotorezystorowi. Wilgotność powietrza jest pokazywana w procentach. Co do opadów atmosferycznych, jeśli takowe występują dostajemy o tym informacje. CZEGO POTRZEBUJEMY: Do realizacji naszego układu użyliśmy : - płytka Arduino  Uno - http://abc-rc.pl/Arduino-UNO-R3-CH340, - zworki, - rezystory, - czujnik temperatury i wilgotności - http://abc-rc.pl/DHT11, - czujnik wilgotności gleby - http://abc-rc.pl/Arduino-FC-28, - czujnik deszczu - http://abc-rc.pl/Detektor-wody-FC-37, - fotorezystor, - płytka stykowa   OPROGRAMOWANIE: W razie potrzeby możemy udostępnić nasz kod, jednakże jest on stosunkowo prosty do napisania.  

Samochodzik sterowany joystickiem od playstation

Witam, chciałbym opisać swój projekt sterowanego samochodu. To prosta zabawka, która pozwoliła mi się cofnąć do dzieciństwa. Różnica polegała na tym, że sam wybrałem funkcje jakie ma mój samochód. Co prawda może nie wygląda on lepiej od większości sterowanych samochodów, ale proces tworzenia był niezwykle pasjonujący. Do stworzenia samochodu bezprzewodowo sterowanego użyłem: arduino uno Pad  razem z odbiornikiem serwo dioda RGB 2 silniki + 2 koła diody czerwone diody pomarańczowe diody białe buzer 2 koła sztywne balsa sterownik silników l298   Do sterowania samochodzikiem posłużyłem się joystickiem od playstation. Jedna gałka odpowiada sterowania prędkością silników, druga służy do skręcania. Dzięki takiemu rozwiązaniu samochód potrafi skręcać w prawo lub w lewo z maksymalną prędkością. Dodatkowo przy skręcaniu świeci się dioda, która przypomina kierunkowskaz w prawdziwym samochodzie. również kiedy samochód stoi świecą się światła stopu, kiedy cofa - światło wsteczne. Przy wciśnięciu odpowiedniego guzika w padzie, zapalają się światła przednie. Jako klakson użyłem buzer. Na spodzie samochodu znajduje się dioda RGB która w tym przypadku może przyjąć jeden z 9 kolorów i efektownie podświetla podłoże. Do skręcania użyłem serwo, które dostosowuje się do położenia gałki joysticka. Do serwa przymocowałem oś do której przykręcone są dwa silniki. Dzięki takiemu rozwiązaniu samochód nie musi być sterowany przez kierunek obrotów silników.   Karoseria powstała z wycięcia balsy. Jest ona lekka, łatwa do cięcia i klejenia. Można w prosty sposób wywiercić otwory na diody, wyciąć odpowiednie dziury na wyjścia z arduino, co pozwoliło mi na wprowadzanie poprawek w kodzie w dowolnym momencie. Balsę okleiłem samoprzylepnym materiałem, aby bardziej przypominał samochód - konkretniej pick up. Zarówno arduino jak i sterownik przykręciłem do podwozia samochodu, aby w czasie jazdy nic się nie przemieszczało i przypadkowo nie rozłączyło.   Podsumowując, samochodzik sterowany bezprzewodowo to prosty projekt, który może być waszym pierwszym projektem stworzonym na arduino. Pozwala nauczyć się sterować silnikami, serwem, diodami czyli wszystkim co jest niezbędne na początku zabawy z mikrokontrolerami tego typu. Polecam każdemu stworzyć coś takiego :)  

Lampka dla ukochanej osoby sterowana pilotem na Arduino.

Witam, chciałbym tutaj przedstawić projekt lampki sterowanej pilotem na platformie Arduino.   Jak działa: Lampka jest sterowana pilotem, którym możemy regulować jasnością (przyciski +/-) i zmieniać kolory świecenia diod RGB (przyciski z cyframi). Jest 8 trybów, czerwony, niebieski, zielony i mieszanina czerwony/niebieski, zielony/czerwony itp. Buzzer jest opcjonalnie dodany by sygnalizować sytuację, w której regulujemy jasnością i mamy już maksymalny zakres, ale klikamy dalej przycisk "+".  Lampka posiada 34 poziomy jasności mniej lub bardziej widzialne dla oka. Czego potrzebujemy: Arduino -  http://abc-rc.pl/Arduino-UNO-R3-CH340 Pilot z odbiornikiem IR  - http://abc-rc.pl/VS18388-MP3 Diody RGB - w moim przypadku 6 sztuk. Płytka stykowa Zasilacz - 12V, w tym przypadku wzięty ze starego routera sieciowego. Rezystory - obliczone w zależności od tego jaki kolor zapalamy, ile diod chcemy podłączyć i jak to zrobimy. Buzzer (opcjonalnie) -  http://abc-rc.pl/YMD-12065G-5V Kable połączeniowe - głównie męsko - żeńskie. Pudełko - możemy wybrać dowolne, w zależności od przeznaczenia i od tego co mamy. W moim przypadku było to opakowanie po czekoladkach :) Oprogramowanie: Co do samego kodu to polecam poszukać w Internecie przykładów na Arduino związanych z obsługą pilota, diody RGB i sprawa staje się stosunkowo prosta. Jakby ktoś potrzebował pomocy to udostępnię kod. Jakby ktoś chciał się pobawić to można dodać płynne przechodzenie między kolorami, inne tryby itp. Podsumowanie: Bardzo polecam zrobienie takiej lampki, wiele nie kosztuje. W moim przypadku zasięg pilota to około 8m. Wieczorem lampka daje super klimat, ukochanej bardzo się podoba :) Oczywiście obudowa w kształcie serca to tylko przykład i każdy może zrobić coś dla siebie w zależności od potrzeb.