Estou com uma duvida neste código.

Estou fazendo um transmissor e vários receptores, onde os receptores, caso recebam uma mensagem que não é a que eles precisam eles repassem para os demais. Só que eu queria colocar um controle onde por exemplo a ultima mensagem foi Ligar receptor 2 e caso ele receba a mesma novamente ele ignore, mas não tenho ideia de como faze-la. Abaixo esta o código de alguém puder ajuda..

(Isto é uma parte de um TCC)

Grato.

#include <SPI.h>
#include <nRF24L01p.h>

nRF24L01p receiver(7,8);//CSN,CE
String message;
String resposta;
String trasmitir;
String ultimamsg;
int var;
const int RELEPin = 9; // PINO DO RELÉ

void setup(){
//Liga o transmissor.
delay(150);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
receiver.channel(110);
receiver.TXaddress("C1");
receiver.RXaddress("S1");
receiver.init();
}

void loop(){
//Recebe a mensagem e trata a mesma.
if(receiver.available()>0){
receiver.read();
receiver.rxPL(message);
}
else {
message="";
}
delay(20);
if(message=="LC1"){
digitalWrite(RELEPin, HIGH); // Liga Relé
delay(20);
resposta="C1-1";
delay(20);
receiver.txPL(resposta);
receiver.send(SLOW);
}
else if(message=="DC1") {
digitalWrite(RELEPin, LOW); // Desliga Relé
delay(20);
resposta="C1-0";
delay(20);
receiver.txPL(resposta);
receiver.send(SLOW);
}
else if(message=="EC1") {//Estado Atual do Relé
if (digitalRead(RELEPin)==0){//Relé Desligado
delay(20);
resposta="C1-0";
delay(20);
receiver.txPL(resposta);
receiver.send(SLOW);
}
else {//Relé Ligado
resposta="C1-1";
delay(20);
receiver.txPL(resposta);
receiver.send(SLOW);
}
}
else if (message!="C1-1"||message!="C1-0") {//Compara a mensagem
var = 0;
while(var < 2){ //Restransmite a Mensagem por 4 vezes.
trasmitir=message;
delay(20);
receiver.txPL(trasmitir);
receiver.send(SLOW);
var++;
}
trasmitir="";
resposta="";
}
}

Exibições: 352

Responder esta

Respostas a este tópico

Minha sugestão é que vc use uma estrutura para as msgs em vez de usar uma string, assim vc pode fazer controles variados e criar um protocolo para a troca de msgs, acho que vai facilitar bastante tua vida. Por exemplo, um dos campos da estrutura poderia ser um número sequencial, de modo que fique fácil de ignorar msgs já processadas.

Obrigado Francesco, não tinha pensado desta maneira.

Poderia até mesmo adicionar a string antes e depois separar para comprar caso a sequência seja a mesma de antes ele pode ignora-la. Seria mais interessante ainda se gravar na EEPRON.

Obrigado a ideia e muito boa mas acho que com o meu nível atual ainda não consiga fazer um trabalho desses. Vou verificar com meus parceiros de TCC pois estamos fazendo uma central para automação residencial, incluindo onde usaremos o Shield de Ethernet + ESP8266 + NRF24L01.. Vou ver se algum deles consegue pensar dessa forma e colocar em pática.

Não tem muito segredo em usar estruturas. Estou fazendo uns carrinhos que usam o NRF24 pra receber comandos do controle remoto, que na verdade é apenas um joystick e 4 botões. Então eu uso esta estrutura pra mandar msgs do controle remoto para o carrinho:

typedef struct

{
byte cmd;
int param1, param2;
}
CarCommand;

Apenas 5 bytes e com isso consigo fazer o controle completo do carrinho e nem estou usando o parâmetro 2, está lá mais pra futuras implementações. Mas essa estrutura poderia ser bem maior. Acho que o limite máximo para o NRF24 seria de 32 bytes. Só não esqueça de configurar o payload do NRF24 para o tamanho da tua estrutura.

Obrigado mais uma vez, vou tentar isso mesmo.
E vamos ver o que vai dar.. Mais uma coisa, eu procurei em varios lugares e não achei.
Por exemplo o que seria isso ?
receiver.TXaddress("C1");
receiver.RXaddress("S1");
Se caso em outro receptor eu usar assim eles irão se comunicar ? Lembrando que colocarei no mesmo canal, pois eu não entendi a serventia desse comando.
receiver.TXaddress("C2");
receiver.RXaddress("S2");

Att

Então, eu não sei que biblioteca vc está usando pro NRF24L01, eu uso a RF24, então não estou reconhecendo os comandos que vc está usando. Além dos canais, o NRF usa o conceito de "pipe", um pipe é uma conexao entre dois dispositivos, por exemplo vc tem um que transmite (T1) e dois que recebem (R1 e R2), aí vc define um pipe T1-R1 e outro pipe T1-R2, algo assim, mas não parece ser o caso desse comando. Não sei dizer o que ele faz.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço