Правильный прием числа по NRF24
- Войдите на сайт для отправки комментариев
Проблема такая, есть ESP8266(сообственно с веб-морды которую формирует ESP8266 принимаю этой же ESP8266 String вот такое число допустим "31") и передаю эту String по UART, на ардуину мегу, с ардуины меги, отправляю по nrf24 то что принял от ESP8266, далее принимаю то что отправил с радуины меги по nrf24 на ардуино нану, и в серийном мониторе ардуины нано показывает число то что нужно, но при этом не могу ничего включить, понимаю что проблема в том что передаю String, а принимаю по nrf24 в char data, но пробовал потом конвертировать char в string и сравнивать тоже ничего не включается, вообщем как правильно принять string в char по nrf24, и чтобы и вмониторе порта показывало нужное число, и мог что - то включить
Вот сообственно скетчи передача с ардуино мега и перием на ардуино нану по радиоканалу
Передача с ардуины меги
#include <SPI.h> #include "RF24.h" char data; const uint64_t pipe = 0xF0F1F2F3F4LL; RF24 radio(7, 8); void setup(){ Serial.begin(57600); Serial1.begin(57600); radio.begin(); delay(2); radio.setChannel(9); radio.setDataRate(RF24_1MBPS); radio.setPALevel(RF24_PA_HIGH); radio.openWritingPipe(pipe); } void loop() { if (Serial1.available()>0) { data= Serial1.read();// от ESP8266 по UART приходит "31" Serial.print(data); radio.stopListening(); } radio.write(&data, sizeof(data)); radio.startListening(); }
Прием на ардуино нано
#include <SPI.h> #include "RF24.h" const uint64_t pipe = 0xF0F1F2F3F4LL; char data; RF24 radio(9, 10); char data2; void setup(){ Serial.begin(57600); radio.begin(); delay(2); radio.setChannel(9); pinMode(5, OUTPUT); pinMode(7, OUTPUT); radio.setDataRate(RF24_1MBPS); radio.setPALevel(RF24_PA_HIGH); radio.openReadingPipe(1,pipe); radio.startListening(); } void loop() { if (radio.available() ){ radio.read(&data, sizeof(data)); // приходит по NRF24 "31" Serial.print(data); // в мониторе последовательного порта показывает 31, так как нужно } if (data=='31'){ digitalWrite(5,1);// ничего не происходит } }
Вы принимаете 2 байта порознь. При одном проходе Вы принимаете только '3' и при следующем проходе loop принимаете '1'. Поставьте в строке 32 println вместо принт и убедитесь в этом - тройка и единица на разных строках будут.
А в строке 38 Вы пытаетесь ... даже не знаю что Вы пытаетесь - Вам виднее. То, что написано .... ну не знаю, скажу "бред" - обидлитесь ... в общем бессмыслица. Вы понимаете, что в одиночных апострофах пишется ОДИНОЧНЫЙ символ. А зачем Вы туда два запихали?
Да я понимаю то уже от безисходности, пробовал разные варианты. Вот только не пойму как сравнивать 2 байта в условии, уже и так прорбовал:
if (data=='3'&'1'){
Да я понимаю то уже от безисходности, пробовал разные варианты. Вот только не пойму как сравнивать 2 байта в условии, уже и так прорбовал:
if (data=='3'&'1'){
Roman2344, а правда, если мартышку посадить за пишущую машинку, то рано или поздно получится "Война и Мир"?
Вы всерьез считаете, что программу можно написать, беспорядочно переставляя операторы, значения которых Вы не понимаете?
IMHO для Вас существуют лишь 3 варианта:
1. Добросорвестно разобраться в языке.
2. Заказать работу в разделе "Ищу исполнителя".
3. Забыть об этой затее.
Вы уж определитесь, какой путь Вам ближе (если 1-й, то начинать нужно с учебника, а не с вопросов на форуме).