Правильный прием числа по NRF24

Roman2344
Offline
Зарегистрирован: 09.09.2015

Проблема такая, есть 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);// ничего не происходит
    } 
     

    
}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы принимаете 2 байта порознь. При одном проходе Вы принимаете только '3' и при следующем проходе loop принимаете '1'. Поставьте в строке 32 println вместо принт и убедитесь в этом - тройка и единица на разных строках будут.

А в строке 38 Вы пытаетесь ... даже не знаю что Вы пытаетесь - Вам виднее. То, что написано .... ну не знаю, скажу "бред" - обидлитесь ... в общем бессмыслица. Вы понимаете, что в одиночных апострофах пишется ОДИНОЧНЫЙ символ. А зачем Вы туда два запихали?

Roman2344
Offline
Зарегистрирован: 09.09.2015

Да я понимаю то уже от безисходности, пробовал разные варианты.  Вот только не пойму как сравнивать 2 байта в условии, уже и так прорбовал:

if (data=='3'&'1'){

    digitalWrite(5,1);
   
    } 
andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Roman2344 пишет:

Да я понимаю то уже от безисходности, пробовал разные варианты.  Вот только не пойму как сравнивать 2 байта в условии, уже и так прорбовал:

if (data=='3'&'1'){

    digitalWrite(5,1);
   
    } 

Roman2344, а правда, если мартышку посадить за пишущую машинку, то рано или поздно получится "Война и Мир"?

Вы всерьез считаете, что программу можно написать, беспорядочно переставляя операторы, значения которых Вы не понимаете?

IMHO для Вас существуют лишь 3 варианта:

1. Добросорвестно разобраться в языке.

2. Заказать работу в разделе "Ищу исполнителя".

3. Забыть об этой затее.

Вы уж определитесь, какой путь Вам ближе (если 1-й, то начинать нужно с учебника, а не с вопросов на форуме).