Boa tarde/noite/manha galera, tudo beleza?
Estou com problema em ligar meu Arduino Uno em diversos shields, um em específico, o Emissor de Infravermelho. O problema é que ele envia o comando pro emissor de infravermelho, joga pro meu som ou pra minha TV e funciona somente uma vez, e depois trava o código e não continua o loop, ou seja, o sensor está funcionando, já testei o código sem ter o Receptor e fazendo os comando por serial, e funcionou correntemente, ligou a Tv e o som, setou os 'source' e deixou o volume em 30(uma das funções do switch que pede várias emissões do emissorIR: case (0xFF629D)), e o engraçado que essa função mais "complexa" ele também executa, porém somente uma vez e trava como qualquer outra que necessite do emissorIR .
O controle que está na foto funciona e as frequências estão corretas, o relé funciona também, tanto que o controle consegue ligar e desligar o relé( case (0xFFE21D) e case (0xFFA25D)), porém somente essas duas funcionam sem travar, eu posso ligar e desligar o relé quantas vezes quiser que não trava, porém quando por exemplo peço para "Aumentar o volume" ele trava e não deixa nem eu ligar mais o rele.
Nessa Imagem eu mostro que ele pode ligar e desligar o rele, porém trava quando chega aumenta o volume. ( Obs: ele aumenta o volume no som, porém trava e não aceita mais comandos)
Espero que tenha conseguido ser claro, quem conseguir me ajudar, agradeço muito.
Videos do funcionamento e explicando melhor as funções:
https://drive.google.com/drive/folders/1adHSzjjzZi7d4M9h6gozmBZ4YNiM1ZKm?usp=sharing
Segue o código:
// INCLUSÃO DE BIBLIOTECA
#include <IRremote.h>
#include "SevSeg.h"
// DIRETIVAS DE COMPILAÇÃO
#define tempoTecla 350
#define frequencia 38 // kHz
#define pinoRele 2
#define pinSensor 10
// INSTANCIANDO OBJETOS
IRsend emissorIR;
SevSeg sevseg;
IRrecv sensorIR (pinSensor);
decode_results comando;
unsigned int teclaA[] = {9050,4450, 600,550, 550,600, 600,500, 550,550, 650,500, 650,500, 550,550, 550,550, 600,1650, 550,1650, 650,500, 650,1550, 650,1600, 550,1650, 600,1600, 700,1550, 650,450, 650,500, 550,1650, 650,1550, 600,600, 600,500, 650,450, 650,500, 650,1550, 650,1550, 700,450, 650,500, 550,1650, 650,1550, 650,1550, 600,1650, 650};
unsigned int teclaB[] = {9050,4450, 550,550, 600,550, 600,550, 550,550, 600,550, 550,550, 600,550, 550,550, 600,1600, 600,1650, 550,550, 600,1650, 550,1650, 600,1600, 600,1650, 550,1650, 600,1600, 600,550, 550,550, 600,1650, 550,1650, 600,550, 550,550, 600,550, 550,550, 600,1650, 550,1650, 550,550, 600,550, 550,1650, 600,1650, 550,1650, 550};
unsigned int teclaC[] = {9150,4450, 600,550, 550,550, 600,550, 600,500, 600,550, 550,550, 600,550, 550,550, 600,1650, 600,1600, 600,500, 650,1600, 600,1600, 600,1600, 650,1600, 600,1600, 600,550, 600,500, 600,1650, 600,500, 600,550, 600,500, 600,1600, 650,500, 600,1600, 600,1650, 600,500, 600,1600, 650,1600, 600,1600, 600,550, 600,1600, 600};
unsigned int teclaD[] = {9050,4400, 600,600, 450,650, 500,600, 500,650, 500,600, 550,600, 500,600, 550,550, 550,1700, 550,1600, 600,600, 550,1600, 600,1650, 550,1650, 600,1600, 600,1650, 550,1650, 600,550, 550,1650, 600,550, 550,600, 550,550, 550,1650, 600,550, 550,600, 550,1600, 600,600, 550,1600, 650,1600, 550,1650, 650,500, 650,1550, 650};
unsigned int teclaE[] = {8900,4400, 550,550, 550,550, 650,450, 650,500, 600,500, 600,500, 600,500, 600,500, 600,1600, 650,1600, 600,1600, 600,1600, 650,1600, 600,1600, 600,500, 600,1600, 650,1600, 600,1600, 600,500, 600,500, 600,500, 600,500, 650,500, 600,500, 550,550, 600,500, 600,1600, 600,1650, 600,1600, 600,1600, 600,1600, 650,1600, 600};
//unsigned int teclaA[] = {};
void setup()
{
Serial.begin(9600);
Serial.print("Setup Iniciado\n");
pinMode(pinoRele, OUTPUT);
digitalWrite(pinoRele, LOW);
byte numDigits = 1;
byte digitPins[] = {};
byte segmentPins[] = {6, 5, 12, 9, 4, 7, 8, 11};
bool resistorsOnSegments = true;
sensorIR.enableIRIn();
byte hardwareConfig = COMMON_CATHODE;
sevseg.begin(hardwareConfig, numDigits, digitPins, segmentPins, resistorsOnSegments);
sevseg.setBrightness(90);
sevseg.setNumber(0);
delay(1000);
sevseg.refreshDisplay();
Serial.print("Setup Concluído\n");
}
void loop()
{
if (sensorIR.decode(&comando))
{
Serial.println(comando.value, HEX);
switch (comando.value)
{
case (0xFFA857): //problema
{
Serial.println("Aumentando o volume do Som");
emissorIR.sendRaw(teclaC, sizeof(teclaC) / sizeof(teclaC[0]), frequencia);
a();
delay(1350);
apagado();
break;
}
case (0xFFE01F): //problema
{
emissorIR.sendRaw(teclaD, sizeof(teclaD) / sizeof(teclaD[0]), frequencia);
Serial.println("Diminuindo o volume do Som");
menos();
delay(1000);
apagado();
break;
}
case (0xFF629D): //problema
{
Serial.println("-- Ligando Aparelhos: --");
Serial.println("Ligando o Som");
sevseg.setNumber(4);
sevseg.refreshDisplay();
emissorIR.sendRaw(teclaA, sizeof(teclaA) / sizeof(teclaA[0]), frequencia);
delay(tempoTecla);
Serial.println("Ligando a TV");
emissorIR.sendRaw(teclaE, sizeof(teclaE) / sizeof(teclaE[0]), frequencia);
delay(16000);
Serial.println("Source do Som - Radio");
emissorIR.sendRaw(teclaB, sizeof(teclaB) / sizeof(teclaB[0]), frequencia);
delay(3691);
sevseg.setNumber(3);
sevseg.refreshDisplay();
delay(2809);
Serial.println("Source do Som - Line");
delay(2832);
sevseg.setNumber(2);
sevseg.refreshDisplay();
delay(1168);
emissorIR.sendRaw(teclaB, sizeof(teclaB) / sizeof(teclaB[0]), frequencia);
delay(2000);
int i;
for(i = 0; i <20 ; i++)
{
emissorIR.sendRaw(teclaC, sizeof(teclaC) / sizeof(teclaC[0]), frequencia);
delay(tempoTecla);
if(i == 6)
{
sevseg.setNumber(1);
sevseg.refreshDisplay();
}
}
sevseg.setNumber(0);
sevseg.refreshDisplay();
Serial.println("Tudo já está configurado para uso! Som configurado com 30 no volume.");
delay(1500);
apagado();
break;
}
case (0xFF52AD): //problmea
{
Serial.println("Desligando Tudo");
emissorIR.sendRaw(teclaE, sizeof(teclaE) / sizeof(teclaE[0]), frequencia);
delay(tempoTecla);
emissorIR.sendRaw(teclaA, sizeof(teclaA) / sizeof(teclaA[0]), frequencia);
sevseg.setNumber(0);
sevseg.refreshDisplay();
delay(3000);
apagado();
break;
}
case (0xFFE21D):
{
digitalWrite(pinoRele, HIGH);
Serial.print("\nBotao acionado, Ligando Lampada");
l();
delay(3000);
apagado();
break;
}
case (0xFFA25D):
{
digitalWrite(pinoRele, LOW);
Serial.print("\nDesligando Lampada");
sevseg.setNumber(0);
sevseg.refreshDisplay();
delay(3000);
apagado();
break;
}
case (0xFFC23D): //problema
{
Serial.println("Ligando/Desligando a TV");
emissorIR.sendRaw(teclaE, sizeof(teclaE) / sizeof(teclaE[0]), frequencia);
delay(tempoTecla);
menos();
delay(1000);
apagado();
break;
}
}
sensorIR.resume(); //Aguarda novo comando
Serial.print("\nChegou aqui\n");
}
}
void apagado()
{
digitalWrite(6,LOW);
digitalWrite(5,LOW);
digitalWrite(12,LOW);
digitalWrite(9,LOW);
digitalWrite(4,LOW);
digitalWrite(7,LOW);
digitalWrite(8,LOW);
digitalWrite(11,LOW);
}
void a()
{
digitalWrite(6,HIGH);
digitalWrite(5,HIGH);
digitalWrite(12,HIGH);
digitalWrite(9,LOW);
digitalWrite(4,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,HIGH);
digitalWrite(11,HIGH);
}
void l()
{
digitalWrite(6,LOW);
digitalWrite(5,LOW);
digitalWrite(12,LOW);
digitalWrite(9,HIGH);
digitalWrite(4,HIGH);
digitalWrite(7,HIGH);
digitalWrite(8,LOW);
digitalWrite(11,HIGH);
}
void menos()
{
digitalWrite(6,LOW);
digitalWrite(5,LOW);
digitalWrite(12,LOW);
digitalWrite(9,LOW);
digitalWrite(4,LOW);
digitalWrite(7,LOW);
digitalWrite(8,HIGH);
digitalWrite(11,LOW);
}