Bom dia Glr;

Estou tentando criar um modulo para automação residencial, e estou meio empacado na recepção e envio de sinais IR.

Consegui utilizando alguns tutoriais, realizar a leitura e a transmissão de sinal de vários controles, pelo RAW DATA, pois assim não fico preso à relação de modelos existente na biblioteca.

Estou tentando agora colocar os dois códigos no mesmo programa: já consegui fazer ele ler e transmitir ao receber o código no monitor serial.

porém após a transmissão não consigo realizar nova leitura.

parece que ele desativa alguma rotina da biblioteca e a leitura para de funcionar.

PS:

1) antes de realizar a transmissão posso fazer diversas leituras. mas basta realizar uma transmissão e o recebimento para. 

2) O Arduíno não está travado pois ainda consigo realizar novas transmissões.

Exibições: 314

Responder esta

Respostas a este tópico


#include <IRremote.h>

int RECV_PIN = 9;
int Btn_PIN = 10;
int Btn = 1;
int Tmr = 501;

IRsend irsend;
IRrecv irrecv(RECV_PIN);
decode_results results;

unsigned int c_recv[68];

void dump(decode_results *results) {
if (Tmr < 500 && Tmr >10){
int count = results->rawlen;
Serial.print("Raw (");
Serial.print(count, DEC);
Serial.print("): ");
for (int i = 0; i < count; i++) {
int i1 = i-1;
if ((i % 2) == 1) {
// Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
if (i1 >= 0){
c_recv[i1] = (results->rawbuf[i]*USECPERTICK);
// Serial.print("c_recv:");
// Serial.println(c_recv[i1]);
}
}
else {
// Serial.print((int)results->rawbuf[i]*USECPERTICK, DEC);
if (i1 >= 0){
c_recv[i1] = (results->rawbuf[i]*USECPERTICK);
// Serial.print("cc_recv:");
// Serial.println(c_recv[i1]);
}
}
// Serial.print(" ");
}
// Serial.println();
Serial.println("codigo recebido com sucesso!");
Tmr = 501;
}
}

void setup(){
pinMode(Btn_PIN, INPUT);
digitalWrite(Btn_PIN, HIGH);
Serial.begin(9600);
irrecv.enableIRIn();
}

void loop() {

Btn = digitalRead(Btn_PIN);
if (Btn == 0){
Tmr = 0;
}
if (Tmr < 500){
if (irrecv.decode(&results)) {
dump(&results);
irrecv.resume();
// Serial.println(results.value, HEX);
}
Tmr++;
Serial.println(Tmr);
}

char c = Serial.read();
if (c == 'a') {
for (int i = 0; i < 3; i++) {
irsend.sendRaw(c_recv, 68, 38);
delay(100);
}
irrecv.resume();
Serial.println("codigo a enviado");
}
if (c == 'b') {
for (int i = 0; i < 1; i++) {
irsend.sendNEC(0xB748B7, 32); // Sony TV power code
delay(500);
}
irrecv.resume();
Serial.println("codigo b enviado");
}

delay(10);
}

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço