Как передать значение больше 256 по NRF2401?
- Войдите на сайт для отправки комментариев
Чт, 05/05/2016 - 09:26
Подскажите пожалуйста, почему неполучается передать значение аналогового входа передатчика, на приёмник через NRF2401?
Т.е получается, но как только значение аналогового входа на передатчике превышает 256, то на приемнике наченается счет заного. И значение неможет быть больше 256...
Почему так?
Передатчик
#include <SPI.h> #include <nRF24L01.h> #include <printf.h> #include <RF24.h> #include <RF24_config.h> #define GASS_PIN A0 // пин для подключения сенсора RF24 radio(9, 10); const uint32_t pipe = 123456789; byte massiv[6]; void setup() { Serial.begin(57600); pinMode(GASS_PIN, INPUT); radio.begin(); radio.setDataRate(RF24_250KBPS); // скорость обмена данными RF24_1MBPS или RF24_2MBPS radio.openWritingPipe(pipe); // открыть канал на отправку } void loop() { unsigned int sensorDataGass, sensorDataLight; sensorDataGass = analogRead(GASS_PIN); int g = sensorDataGass; massiv[4] = g; radio.write(massiv, 6); delay(2000); Serial.print("Gass: "); Serial.println(analogRead(GASS_PIN)); }
Приёмник
#include <SPI.h> #include <nRF24L01.h> #include <printf.h> #include <RF24.h> #include <RF24_config.h> RF24 radio(9, 10); const uint32_t pipe = 123456789; byte massiv[6]; void setup() { pinMode(6, OUTPUT); Serial.begin(57600); radio.begin(); radio.setDataRate(RF24_250KBPS); radio.openReadingPipe(1,pipe); radio.startListening(); } void loop() { if(radio.available()) { radio.read(massiv, 6); float g = massiv[4]; Serial.print("Gass: "); Serial.println(g); } }
Извиняюсь неправильно написал в преёмнике 30 строчка не float а int.
Потому что байт может принимать значения от 0 до 255. Ты байтовой переменной пытаешься присвоить значение превышающее 255, она запомнит только младшие 8 бит. Объяви в передатчике массив из переменных типа int.
Друг, я всё правильно понял?
Тоесть просто заменить
byte
massiv[6]; на
int
massiv[6]; и тогда каждая ячейка массива, сможет передовать число
от -32 768 до 32 767 ???В приёмнике и передатчике??
Я заменил, но у меня почемуто стало показывать 0, а другие датчики на температуру которые нормально показывали(в скече их нет, это остальной массив кроме 4) , тоже через один то 0 показывают то работают...
вот например для отправки. а потом из 2 принятых байт собираешь вместе. но на самом деле тебе врядли нужно передавать число в чистом виде, и его можно например поделить на 4, хотя если нужна такая точность
byte
massiv[6]; на
int
massiv[6]; и тогда каждая ячейка массива, сможет передовать число
от -32 768 до 32 767 ???В приёмнике и передатчике??
Я заменил, но у меня почемуто стало показывать 0, а другие датчики на температуру которые нормально показывали(в скече их нет, это остальной массив кроме 4) , тоже через один то 0 показывают то работают...
int massiv[6] стал теперь занимать 12 байт, следовательно и передавать и получать нужно 12 байт.
заменить на:
Всё получилось!
Огромное человеческое СПАСИБО!