3. Pierwszy program- transmisja zmiennej typu int
Pierwszy program będzie prosty bo będzie polegać jedynie na przesłaniu zmiennej boolowskiej i zinterpretowanie jej po stronie odbiornika.
Schemat nadajnika:
Program nadajnika:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include <SPI.h> //dodaj obsługę biblioteki SPI #include <nRF24L01.h> //dodaj bibliotekę obsługującą moduł #include <RF24.h> //dodaj bibliotekę główną modułów RF24 int przycisk = 7; //przycisk podłączony do pinu 7 Arduino const uint64_t pipe = 0x1CF8361637LL; //kod kanału RF24 radio(9, 10); //tworzymy instancje komunikacji int stan; //tworzymy zmienną stan void setup() { pinMode(przycisk,INPUT); //ustawiamy przycisko jako wejście radio.begin(); //uruchamiamy moduł radio.openWritingPipe(pipe); //rozpocznij transmisję } void loop() { stan = digitalRead(przycisk); //przypisz zmiennej stan wartości przycisku radio.write(&stan, sizeof(int)); //wyslij zmienną stan, o długości typu int } |
Jak widać kod jest stosunkowo prosty. Na samym początku definiujemy biblioteki, z których będziemy korzystać. Następnie tworzymy kod naszej transmisji. Gdy już to mamy to musimy stworzyć instancję komunikacji, podporządkowaną pinom 9 (dla CE ) i 10 dla (CS). Teraz w void setup uruchamiamy moduł oraz rozpoczynamy transmisję. W pętli głównej programu przypisujemy zmiennej dla liczb całkowitych odczyt z przycisku. Tutaj ważna uwaga. Przy obsłudze tych modułów musimy prawidłowo rozróżniać typy jakie musimy wykorzystać. Jak np. w naszym programie korzystamy z liczb całkowitych to musimy dać typ int, a jak np. zmiennoprzecinkowe (odczytując temperaturę) to musimy użyć float. Następnie tak przygotowane dane wysyłamy poprzez funkcję radio.write() podając najpierw jaką zmienną wysyłam, a po przecinku jaką ta zmienna ma długość (wyrażoną typem zmiennej). Program naszego nadajnika jest gotowy. Teraz pozostał nam odbiornik.
Schemat odbiornika:
Program odbiornika:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#include <SPI.h> //dodaj obsługę biblioteki SPI #include <nRF24L01.h> //dodaj bibliotekę obsługującą moduł #include <RF24.h> //dodaj bibliotekę główną modułów RF24 const uint64_t pipe = 0x1CF8361637LL; //kod kanału int dioda = 8; //dioda podłączona do pinu 8 Arduino RF24 radio(9, 10); //tworzymy instancje komunikacji int stan; //tworzymy zmienną przechowującą przesłane dane void setup() { pinMode(dioda,OUTPUT); //ustawiamy diodę jako wyjście delay(1000); //przed uruchomieniem pętli głównej odczekaj 1s radio.begin(); //uruchom moduł radio.openReadingPipe(1,pipe); //zacznij odczyt z kanału o danym kodzie radio.startListening(); //zacznij odczyt danych } void loop() { if (radio.available()) //jeżeli są jakieś dane do odczytu { radio.read(&stan, sizeof(int)); //odczytaj dane i zapisz je do zmiennej stan if(stan == 0) //jeżeli wartość zmiennej stan jest równa zero to: { digitalWrite(dioda,HIGH); //zapal diodę } else //w przeciwnym wypadku digitalWrite(dioda,LOW); //zgaś diodę } } |
Do void setup() robimy tak samo jak dla nadajnika. Następnie ustawiamy diodę jak wyjście. Ustawiamy, aby przy uruchomieniu Arduino, program poczekał 1s, nie jest to wymagane ale bez tego czasem były problemy z modułem. Następnie uruchamiamy moduł, zaczynamy odczyt z pierwszego zdefionowanego kanału o kodzie przez nas ustalonym, a następnie zaczynamy odczyt danych. W pętli głównej programu sprawdzamy, czy są jakieś dane do odbioru. Jeśli są to je odczytaj a następnie zapisz do zmiennej stan. Nazwy zmiennej nie muszą być takie same w nadajniku i odbiorniku. Najważniejsze, żeby typ był taki sam, albo kompatybilny względem tego w nadajniku. Okej, mamy już nasze dane. W tym przypadku z nadajnika zostało wysłane zero (stan przycisku odczytany przy pomocy digitalRead() ) więc chcemy aby było to jakoś zinterpretowane, więc tworzymy funkcję warunkową (na potrzeby kursu jest to prosta funkcja, ale w jej miejsce możesz wstawić cokolwiek chcesz). która dla wartości zero wykona jakiś program. W tym przypadku zapali diodę. Jeżeli wartość zmiennej jest inna od zera to zgaś diodę.
Po wgraniu programów powinniśmy otrzymać taki efekt: