Правильный прием числа по 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-й, то начинать нужно с учебника, а не с вопросов на форуме).