Kamar Napisano Kwiecień 10, 2019 Udostępnij Napisano Kwiecień 10, 2019 Witam Che wysłać kilka danych przez nrf24l01 temperature, ciśnienie i wilgotność. Na początku wysyłałem je wszystkie pojedynczo i arduino odbierało dane lecz w sposób losowy. Teraz pierwszy raz używam tablicy i wysyłając dane obieram tylko temperaturę inne wartości mają wartość 0. Co jest tego przyczyną, czy muszę jakoś na nowo zdefiniować tablice po stronie odbiornika? Odbiornik #include <LiquidCrystal_I2C.h> // wyswietlacz #include <virtuabotixRTC.h> // moduł zegara RTC DS1302 #include <SPI.h> // SPI #include <nRF24L01.h> // moduł radiowy #include <RF24.h> // moduł radiowy LiquidCrystal_I2C lcd(0x27,2,1,0,4,5,6,7,3,POSITIVE); const uint64_t pipe = 0x1CFABC163783; //kod kanału RF24 radio(9, 10); //tworzymy instancje komunikacji float humidity; float pressure; float temperature; int valueInside; int valueOutside; unsigned long aktualnyCzas ; unsigned long zapamietanyCzas ; float measurement[3]; #define inside 4 #define outside 5 void setup() { radio.begin(); //uruchom moduł radiowy radio.openReadingPipe(1,pipe); //zacznij odczyt z kanału o danym kodzie radio.startListening(); //zacznij odczyt danych Serial.begin(9600); lcd.begin(16, 2); digitalWrite(inside, INPUT_PULLUP); digitalWrite(outside, INPUT_PULLUP); } void loop() { if (radio.available()){ //jeżeli są jakieś dane do odczytu radio.read(&measurement, sizeof(float)); //czytaj dane } aktualnyCzas = millis(); temperature=measurement[0]; pressure=measurement[1]; humidity=measurement[2]; Serial.println(measurement[1]); } Nadajnik #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 #include "Seeed_BME280.h" // BME280 BME280 bme280; const uint64_t pipe = 0x1CFABC163783; //kod kanału RF24 radio(9, 10); //tworzymy instancje komunikacji float measurement[3]; void setup() { radio.begin(); //uruchamiamy moduł radio.openWritingPipe(pipe); //rozpocznij transmisję bme280.init(); Serial.begin(9600); } void loop() { measurement[0]= bme280.getTemperature(); measurement[1]=bme280.getPressure()/100 ; measurement[2]=bme280.getHumidity(); radio.write(&measurement, sizeof(float)); Serial.println(measurement[1]); } Link do komentarza Share on other sites More sharing options...
kaczakat Kwiecień 11, 2019 Udostępnij Kwiecień 11, 2019 Wysyłasz tylko 4 bajty, bo tyle ma typ float - sizeof(float). Powinieneś wysłać bajtów sizeof(measurement). Można też zmienić cały komunikat do wysłania na jeden napis np: "msg:25.6,1013.25,45.4" ( a jeszcze lepiej używaj int czy uint32_t i miej to w pamięci przy obliczeniach: "msg:256,101325,454". Taki komunikat wyślesz raz, odbierzesz raz, podzielisz sobie na poszczególne stringi z powrotem, pozamieniasz na liczby i będzie OK. Tu wrzuciłem przykład dla serial, jak w odbiorniku masz odebranego stringa to robisz analogicznie: Jak sobie szyfrujesz dane lub wyliczasz CRC to pewnie lepiej tablice. 1 1 Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
Bądź aktywny - zaloguj się lub utwórz konto!
Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony
Utwórz konto w ~20 sekund!
Zarejestruj nowe konto, to proste!
Zarejestruj się »Zaloguj się
Posiadasz własne konto? Użyj go!
Zaloguj się »