Boa tarde. Estou desenvolvendo um protótipo para controlar os eletrônicos do meu quarto via celular, utilizando o garagino com uma placa bluetooth HC-05. No projeto controlo a TV e o Home Theater via IR, tem um LM35 para mostrar a temperatura no visor do celular e um dimmer para iluminação. No entanto, estou tendo problema com um ruido na serial que trava o funcionamento do programa. Este ruido só acontece se eu deixo todos os comandos que controlam o home theater ativos (linhas entre os comandos "M" e "X"). Se eu comentar as linhas de 2 comandos, quaisquer que sejam, o programa funciona perfeitamente. Exemplo: se eu colocar em comentário as linhas dos códigos "N" e "O" o programa funciona. Se eu "descomentar" as linhas "N" e "O" e comentar as linhas "X" e "Y", o programa também funciona. Se eu "descomentar" todas as linhas aparece um ruido na serial que trava a execução do programa. Estava usando o SoftwareSerial para comunicar com o bluetooth, mas o programa estava se perdendo quando plugava a placa na energia para a operação do dimmer. Descobri aqui no fórum que o SoftwareSerial utiliza interrupções que conflitam com a interrupção do dimmer para o zero-crossing. Por este motivo optei em utilizar os pinos RxTx do garagino. Também tentei colocar as variáveis como #define para verificar se o problema não era memória, mas também não funcionou. Os comandos entre "A" e "E", padrão NEC, não interferem no funcionamento, estando comentados ou não. Alguém saberia me explicar por que ao comentar algumas linhas do  o programa funciona normalmente?  

Grato.    

#include <IRremote.h>

char caractere;

//definições dimmer
int ZERO = 2; // pino de interrupção
int AC_LOAD = 9; // Output para o Triac
volatile int dimming = 100; // Dimming level (0-128) 0 = ON, 128 = OFF
String ValorDimmer;

//definições do Receptor IR
IRsend irsend; //objeto para enviar IR 
const int led = 8; // pino do led de indicação de funcionamento
const int ledIR = 3; //pino do emissor IR

// comando TV LG - padrão NEC
int freqNEC = 32;
long int TvLiga = 0x2FD48B7; //A
long int TvChL = 0x2FDF807;
long int TvChH = 0x2FDD827;
long int TvVolL = 0x2FD7887; //B
long int TvVolH = 0x2FD58A7; //C
long int TvTimer = 0x2FDA857; //D
long int TvMute = 0x2FD08F7; //E

// Comandos Oi Tv - padrão RC6
int freqRC6 = 32;
long int CaboLiga = 0x8072260C; //F
long int CaboChL = 0x8072261F; //G
long int CaboChH = 0x8072261E; //H
long int CaboVolL = 0x80722611; //I
long int CaboVolH = 0x80722610; //J

long int CaboIdioma = 0x8072A6A1; //K
long int CaboLegenda = 0x8072264B; //L

// Comando HOME THEATER LG - RAW
int compr = 67;
int freq = 36;
//M
unsigned int LgHtLiga[] = {4600,4300,750,350,750,350,750,1450,750,1500,700,400,750,1500,700,400,700,400,700,400,700,400,700,1550,700,1500,700,400,650,1600,550,600,500,600,500,600,500,1700,550,1700,500,1700,500,1700,550,600,500,600,500,600,500,1700,550,550,550,600,500,600,500,600,500,1700,550,1700,500,1700,550};
//N
unsigned int LgHtVolL[] = {4500,4450,500,600,500,600,550,1700,500,1700,500,600,550,1650,550,600,500,600,500,600,500,600,550,1650,550,1700,500,600,500,1700,550,550,550,600,500,600,500,1700,550,1650,550,600,500,1700,550,550,550,550,550,550,550,1700,500,600,550,550,550,1700,500,600,500,1700,550,1650,550,1700,500};
//O
unsigned int LgHtVolH[] = {4450,4500,500,600,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,550,550,600,500,600,500,1700,550,1700,500,600,500,1700,500,600,550,550,550,1700,500,1700,550,1650,550,600,500,1700,500,600,550,550,550,550,550,600,500,600,500,600,500,1700,550,550,550,1700,500,1700,550,1650,550};
//P
unsigned int LgHtInput[] = {4600,4350,600,500,600,550,550,1650,550,1650,550,600,500,1700,550,550,550,550,550,600,500,600,500,1700,550,1650,550,600,500,1700,500,600,550,550,550,600,500,1700,500,600,500,1700,550,600,500,600,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,1700,500,1700,550,1650,550,600,500};
//Q
unsigned int LgHtOpen[] = {4450,4500,500,600,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,550,550,600,500,600,500,1700,550,1700,500,600,500,1700,500,600,550,550,550,600,500,1700,500,600,500,1700,550,1700,500,600,500,600,550,1650,550,1700,500,600,500,1700,550,550,550,600,500,1700,500,1700,550,550,550};
//R
unsigned int LgHtChL[] = {4500,4450,500,600,550,550,550,1700,500,1700,550,550,550,1700,500,600,500,600,500,600,550,550,550,1700,500,1700,500,600,550,1650,550,600,500,600,500,600,500,600,550,550,550,1700,500,600,500,1700,550,550,550,1700,500,1700,550,1650,550,1700,500,600,500,1700,550,550,550,1700,500,600,500};
//S
unsigned int LgHtChH[] = {4450,4500,500,600,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,550,550,600,500,600,500,1700,550,1650,550,600,500,1700,500,600,550,550,550,1700,500,600,500,600,550,1650,550,550,550,1700,500,600,500,1700,550,600,500,1700,500,1700,550,550,550,1700,500,600,500,1700,550,550,550};
//T
unsigned int LgHtEnter[] = {4450,4450,550,600,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,550,550,600,500,600,500,1700,550,1650,550,600,500,1700,500,600,550,550,550,550,550,1700,500,600,550,1650,550,600,500,1700,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,1700,500,600,500,1700,550,550,550};
//U
unsigned int LgHtPlay[] = {4450,4450,550,600,500,600,500,1700,550,1650,550,600,500,1700,500,600,550,550,550,550,550,600,500,1700,500,1700,550,600,500,1700,500,600,500,600,550,550,550,600,500,1700,500,600,500,600,550,550,550,600,500,600,500,1700,550,1650,550,600,500,1700,500,1700,550,1700,500,1700,500,1700,550};
//V
unsigned int LgHtPause[] = {4450,4500,500,600,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,600,500,600,500,600,500,1700,550,1650,550,600,500,1700,550,550,550,550,550,1700,500,1700,550,1650,550,1700,500,600,500,600,550,1650,550,600,500,600,500,600,500,600,550,550,550,1700,500,1700,550,550,550,1700,500};
//X
unsigned int LgHtSkpL[] = {4450,4500,500,600,500,600,550,1700,500,1700,500,600,550,1650,550,600,500,600,500,600,500,600,550,1700,500,1700,500,600,500,1700,550,550,550,600,500,600,500,1700,550,1700,500,600,500,600,500,600,500,600,550,550,550,1700,500,600,500,600,550,1650,550,1700,500,1700,550,1700,500,1700,500};
//Z
unsigned int LgHtSkpH[] = {4450,4500,500,600,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,550,550,600,500,600,500,1700,550,1650,550,600,500,1700,550,550,550,550,550,1700,500,1700,550,1650,550,600,500,600,500,600,500,600,550,550,550,600,500,600,500,600,500,1700,550,1700,500,1700,500,1700,550,1650,550};


//variaveis do temporizador
int savedTime;
int totalTime = 0;

//variaveis leitura serial
String bufferSerial = "";
int numero; //contador para alterar a potencia do dimmer

void setup()
{
Serial.begin(9600);
//ir
pinMode(led, OUTPUT); // saida led
pinMode(ledIR ,OUTPUT); // saída do infravermelho
//dimmer
pinMode(ZERO, INPUT);
pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as output
attachInterrupt(0, zero_crosss_int, RISING); //zero-crossing - interrupção
numero = dimming; //inicializa a leitura da serial com o mesmo valor do dimming
//inicia temporizador que atualiza temperatura
savedTime = millis();
}


void loop()
{

//atualiza temperatura no intervalo de "totaltime"
int passedTime = millis() - savedTime;
if (passedTime > totalTime)
{
//temperatura LM35
int sum=0;
for (int i = 0; i < 50; i++) sum += analogRead(A5);
int media = (sum * 0.48875855) / 50;
Serial.print(media);
savedTime = millis(); // Save the current time to restart the timer!
totalTime = 5000; //Seta para 5seg
}

bufferSerial = "";
while (Serial.available()>0)
{
char c = Serial.read(); // Lê byte do buffer serial;
bufferSerial.concat(c); // Concatena valores
delay(5);
if (c == '@') break; // se leu o caracter @ sai do loop. Este caracter é enviado pelo comando do celular
}

if (bufferSerial.length()>0 && bufferSerial.length()<2) { //verifica se informação que chegou esta entre 1 e 2 caracteres (para futuras implementações)
digitalWrite(led, HIGH); //acende o led indicador de envio de IR / comando

if (bufferSerial == "A"){irsend.sendNEC(TvLiga, freqNEC);} // código que sera enviado a tv para ligar
if (bufferSerial == "B"){irsend.sendNEC(TvVolL, freqNEC);} // código que sera enviado a tv para diminuir o volume
if (bufferSerial == "C"){irsend.sendNEC(TvVolH, freqNEC);}// código que sera enviado a tv para aumentar o volume
if (bufferSerial == "D"){irsend.sendNEC(TvTimer, freqNEC);}// código que sera enviado a tv para timer
if (bufferSerial == "E"){irsend.sendNEC(TvMute, freqNEC);}// código que sera enviado a tv para mute
// código que sera enviado a o HT para ligar/desligar
if (bufferSerial == "M"){
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtLiga, compr, freq);
delay(50);}}
// código que sera enviado a o HT para baixar o volume
if (bufferSerial == "N"){
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtVolL, compr, freq);
delay(50);}}
// código que sera enviado a o HT para aumentar o volume
if (bufferSerial == "O"){
for (int i = 0; i < 3; i++) {
irsend.sendRaw(LgHtVolH, compr, freq);
delay(50);}}
// código que sera enviado a o HT para selecionar o source
if (bufferSerial == "P"){
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtInput, compr, freq);
delay(50);}}
// código que sera enviado a o HT para abrir o deck
if (bufferSerial == "Q"){
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtOpen, compr, freq);
delay(50);}}
// código que sera enviado a o HT para mudar de estação / seleção -
if (bufferSerial == "R"){
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtChL, compr, freq);
delay(50);}}
// código que sera enviado a o HT para mudar de estação / seleção +
if (bufferSerial == "S"){
for (int i = 0; i < 3; i++) {
irsend.sendRaw(LgHtChH, compr, freq);
delay(50);}}
// código que sera enviado a o HT como enter
if (bufferSerial == "T"){
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtEnter, compr, freq);
delay(50);}}
// código que sera enviado a o HT como play
if (bufferSerial == "U"){
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtPlay, compr, freq);
delay(50);}}
// código que sera enviado a o HT como pause
if (bufferSerial == "V"){
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtPause, compr, freq);
delay(50);}}
// código que sera enviado a o HT como skip -
if (bufferSerial == "X"){
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtSkpL, compr, freq);
delay(50);}}
// código que sera enviado a o HT como skip +
if (bufferSerial == "Y"){
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtSkpH, compr, freq);
delay(50);}}
}

//se o comando possui mais de 2 caracteres então é para o dimmer
if (bufferSerial.length()>2){
bufferSerial.trim(); //elimina possiveis espaços
if (bufferSerial.substring(0,2) == "#L") numero = numero+5; //incrementa contador do dimmer para diminuir potencia
if (bufferSerial.substring(0,2) == "#H") numero = numero-5; //decrementa contador do dimmer para aumentar potencia
if (numero >= 15 && numero <= 128) //se contador estiver abaixo ou acima dos limites do dimmer mantém a ultima leitura
{dimming=numero;}else{dimming=dimming;}
}

digitalWrite(led, LOW); //apaga o led indicador de envio de IR / comando
}


// função disparada pelo zero-crossing
void zero_crosss_int()
{
int dimtime = (65*dimming); // For 60Hz =>65
delayMicroseconds(dimtime); // Off cycle
digitalWrite(AC_LOAD, HIGH); // triac firing
delayMicroseconds(8.33); // triac On propogation delay 10ms for 60Hz use 8.33)
digitalWrite(AC_LOAD, LOW); // triac Off
}

Exibições: 431

Responder esta

Respostas a este tópico

Bom dia,

Seu programa está estou de memória RAM, calcule as variáveis.

Tenta este que modifiquei não tenho certeza que funcionara.

Abs

Mauricio Ortega

Veja também este tutorial, muito bom  http://www.paulotrentin.com.br/programacao/curso-gratuito-de-progra...  

#include <IRremote.h>
#include <MemoryFree.h>;
#include <pgmStrToRAM.h>; // not needed for new way. but good to have for reference.

int MySize = 34;

char caractere;
//definições dimmer
int ZERO = 2; // pino de interrupção
int AC_LOAD = 9; // Output para o Triac
volatile int dimming = 100; // Dimming level (0-128) 0 = ON, 128 = OFF
String ValorDimmer;
//definições do Receptor IR
IRsend irsend; //objeto para enviar IR
const int led = 8; // pino do led de indicação de funcionamento
const int ledIR = 3; //pino do emissor IR
// comando TV LG - padrão NEC
int freqNEC = 32;
long int TvLiga = 0x2FD48B7; //A
long int TvChL = 0x2FDF807;
long int TvChH = 0x2FDD827;
long int TvVolL = 0x2FD7887; //B
long int TvVolH = 0x2FD58A7; //C
long int TvTimer = 0x2FDA857; //D
long int TvMute = 0x2FD08F7; //E
// Comandos Oi Tv - padrão RC6
int freqRC6 = 32;
long int CaboLiga = 0x8072260C; //F
long int CaboChL = 0x8072261F; //G
long int CaboChH = 0x8072261E; //H
long int CaboVolL = 0x80722611; //I
long int CaboVolH = 0x80722610; //J
long int CaboIdioma = 0x8072A6A1; //K
long int CaboLegenda = 0x8072264B; //L
// Comando HOME THEATER LG - RAW
int compr = 67;
int freq = 36;
//M


unsigned int LgHtLiga[68] PROGMEM = {
4600,4300,750,350,750,350,750,1450,750,1500,700,400,750,1500,700,400,700,400,700,400,700,400,700,1550,700,1500,700,400,650,1600,550,600,500,600,500,600,500,1700,550,1700,500,1700,500,1700,550,600,500,600,500,600,500,1700,550,550,550,600,500,600,500,600,500,1700,550,1700,500,1700,550};
//N
unsigned int LgHtVolL[68] PROGMEM = {
4500,4450,500,600,500,600,550,1700,500,1700,500,600,550,1650,550,600,500,600,500,600,500,600,550,1650,550,1700,500,600,500,1700,550,550,550,600,500,600,500,1700,550,1650,550,600,500,1700,550,550,550,550,550,550,550,1700,500,600,550,550,550,1700,500,600,500,1700,550,1650,550,1700,500};
//O
unsigned int LgHtVolH[68] PROGMEM = {
4450,4500,500,600,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,550,550,600,500,600,500,1700,550,1700,500,600,500,1700,500,600,550,550,550,1700,500,1700,550,1650,550,600,500,1700,500,600,550,550,550,550,550,600,500,600,500,600,500,1700,550,550,550,1700,500,1700,550,1650,550};
//P
unsigned int LgHtInput[68] PROGMEM = {
4600,4350,600,500,600,550,550,1650,550,1650,550,600,500,1700,550,550,550,550,550,600,500,600,500,1700,550,1650,550,600,500,1700,500,600,550,550,550,600,500,1700,500,600,500,1700,550,600,500,600,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,1700,500,1700,550,1650,550,600,500};
//Q
unsigned int LgHtOpen[68] PROGMEM = {
4450,4500,500,600,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,550,550,600,500,600,500,1700,550,1700,500,600,500,1700,500,600,550,550,550,600,500,1700,500,600,500,1700,550,1700,500,600,500,600,550,1650,550,1700,500,600,500,1700,550,550,550,600,500,1700,500,1700,550,550,550};
//R
unsigned int LgHtChL[68] PROGMEM = {
4500,4450,500,600,550,550,550,1700,500,1700,550,550,550,1700,500,600,500,600,500,600,550,550,550,1700,500,1700,500,600,550,1650,550,600,500,600,500,600,500,600,550,550,550,1700,500,600,500,1700,550,550,550,1700,500,1700,550,1650,550,1700,500,600,500,1700,550,550,550,1700,500,600,500};
//S
unsigned int LgHtChH[68] PROGMEM = {
4450,4500,500,600,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,550,550,600,500,600,500,1700,550,1650,550,600,500,1700,500,600,550,550,550,1700,500,600,500,600,550,1650,550,550,550,1700,500,600,500,1700,550,600,500,1700,500,1700,550,550,550,1700,500,600,500,1700,550,550,550};
//T
unsigned int LgHtEnter[68] PROGMEM = {
4450,4450,550,600,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,550,550,600,500,600,500,1700,550,1650,550,600,500,1700,500,600,550,550,550,550,550,1700,500,600,550,1650,550,600,500,1700,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,1700,500,600,500,1700,550,550,550};
//U
unsigned int LgHtPlay[68] PROGMEM = {
4450,4450,550,600,500,600,500,1700,550,1650,550,600,500,1700,500,600,550,550,550,550,550,600,500,1700,500,1700,550,600,500,1700,500,600,500,600,550,550,550,600,500,1700,500,600,500,600,550,550,550,600,500,600,500,1700,550,1650,550,600,500,1700,500,1700,550,1700,500,1700,500,1700,550};
//V
unsigned int LgHtPause[68] PROGMEM = {
4450,4500,500,600,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,600,500,600,500,600,500,1700,550,1650,550,600,500,1700,550,550,550,550,550,1700,500,1700,550,1650,550,1700,500,600,500,600,550,1650,550,600,500,600,500,600,500,600,550,550,550,1700,500,1700,550,550,550,1700,500};
//X
unsigned int LgHtSkpL[68] PROGMEM ={
4450,4500,500,600,500,600,550,1700,500,1700,500,600,550,1650,550,600,500,600,500,600,500,600,550,1700,500,1700,500,600,500,1700,550,550,550,600,500,600,500,1700,550,1700,500,600,500,600,500,600,500,600,550,550,550,1700,500,600,500,600,550,1650,550,1700,500,1700,550,1700,500,1700,500};
//Z
unsigned int LgHtSkpH[68] PROGMEM = {
4450,4500,500,600,500,600,500,1700,550,1700,500,600,500,1700,550,550,550,550,550,600,500,600,500,1700,550,1650,550,600,500,1700,550,550,550,550,550,1700,500,1700,550,1650,550,600,500,600,500,600,500,600,550,550,550,600,500,600,500,600,500,1700,550,1700,500,1700,500,1700,550,1650,550};

//variaveis do temporizador
int savedTime;
int totalTime = 0;
//variaveis leitura serial
String bufferSerial = "";
int numero; //contador para alterar a potencia do dimmer
void setup()
{
Serial.begin(9600);
//ir
pinMode(led, OUTPUT); // saida led
pinMode(ledIR ,OUTPUT); // saída do infravermelho
//dimmer
pinMode(ZERO, INPUT);
pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as output
attachInterrupt(0, zero_crosss_int, RISING); //zero-crossing - interrupção
numero = dimming; //inicializa a leitura da serial com o mesmo valor do dimming
//inicia temporizador que atualiza temperatura
savedTime = millis();
delay(100);


}

void loop()
{
//atualiza temperatura no intervalo de "totaltime"
int passedTime = millis() - savedTime;
if (passedTime > totalTime)
{
//temperatura LM35
int sum=0;
for (int i = 0; i < 50; i++) sum += analogRead(A5);
int media = (sum * 0.48875855) / 50;
Serial.print(media);
savedTime = millis(); // Save the current time to restart the timer!
totalTime = 5000; //Seta para 5seg
}
bufferSerial = "";
while (Serial.available()>0)
{
char c = Serial.read(); // Lê byte do buffer serial;
bufferSerial.concat(c); // Concatena valores
delay(5);
if (c == '@') break; // se leu o caracter @ sai do loop. Este caracter é enviado pelo comando do celular
}
if (bufferSerial.length()>0 && bufferSerial.length()<2) { //verifica se informação que chegou esta entre 1 e 2 caracteres (para futuras implementações)
digitalWrite(led, HIGH); //acende o led indicador de envio de IR / comando
if (bufferSerial == "A"){
irsend.sendNEC(TvLiga, freqNEC);
} // código que sera enviado a tv para ligar
if (bufferSerial == "B"){
irsend.sendNEC(TvVolL, freqNEC);
} // código que sera enviado a tv para diminuir o volume
if (bufferSerial == "C"){
irsend.sendNEC(TvVolH, freqNEC);
}// código que sera enviado a tv para aumentar o volume
if (bufferSerial == "D"){
irsend.sendNEC(TvTimer, freqNEC);
}// código que sera enviado a tv para timer
if (bufferSerial == "E"){
irsend.sendNEC(TvMute, freqNEC);
}// código que sera enviado a tv para mute
// código que sera enviado a o HT para ligar/desligar
if (bufferSerial == "M"){
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtLiga, compr, freq);
delay(50);
}
}


unsigned int rawCode[MySize];

// código que sera enviado a o HT para baixar o volume
if (bufferSerial == "N"){
for(int i=0; i<MySize; i++){
rawCode[i]=(pgm_read_word(&LgHtVolL[i]));
} //
/* for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtVolL, compr, freq);

delay(50);
}*/
}
// código que sera enviado a o HT para aumentar o volume
if (bufferSerial == "O"){
for(int i=0; i<MySize; i++){
rawCode[i]=(pgm_read_word(&LgHtVolH[i]));
} //
/*
for (int i = 0; i < 3; i++) {
irsend.sendRaw(LgHtVolH, compr, freq);
delay(50);
}
*/
}
// código que sera enviado a o HT para selecionar o source
if (bufferSerial == "P"){
for(int i=0; i<MySize; i++){
rawCode[i]=(pgm_read_word(&LgHtInput[i]));
} //
/*
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtInput, compr, freq);
delay(50);
}
*/
}
// código que sera enviado a o HT para abrir o deck
if (bufferSerial == "Q"){
for(int i=0; i<MySize; i++){
rawCode[i]=(pgm_read_word(&LgHtOpen[i]));
} //
/*
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtOpen, compr, freq);
delay(50);
}
*/
}
// código que sera enviado a o HT para mudar de estação / seleção -
if (bufferSerial == "R"){
for(int i=0; i<MySize; i++){
rawCode[i]=(pgm_read_word(&LgHtChL[i]));
} //
/*
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtChL, compr, freq);
delay(50);
}
*/
}
// código que sera enviado a o HT para mudar de estação / seleção +
if (bufferSerial == "S"){
for(int i=0; i<MySize; i++){
rawCode[i]=(pgm_read_word(&LgHtChH[i]));
} //
/*
for (int i = 0; i < 3; i++) {
irsend.sendRaw(LgHtChH, compr, freq);
delay(50);
}
*/
}
// código que sera enviado a o HT como enter
if (bufferSerial == "T"){
for(int i=0; i<MySize; i++){
rawCode[i]=(pgm_read_word(&LgHtEnter[i]));
} //
/*
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtEnter, compr, freq);
delay(50);
}
*/
}
// código que sera enviado a o HT como play
if (bufferSerial == "U"){
for(int i=0; i<MySize; i++){
rawCode[i]=(pgm_read_word(&LgHtPlay[i]));
} //
/*
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtPlay, compr, freq);
delay(50);
}
*/
}
// código que sera enviado a o HT como pause
if (bufferSerial == "V"){
for(int i=0; i<MySize; i++){
rawCode[i]=(pgm_read_word(&LgHtPause[i]));
} //
/*
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtPause, compr, freq);
delay(50);
}
*/
}
// código que sera enviado a o HT como skip -
if (bufferSerial == "X"){
for(int i=0; i<MySize; i++){
rawCode[i]=(pgm_read_word(&LgHtSkpL[i]));
} //
/*
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtSkpL, compr, freq);
delay(50);
}
*/
}
// código que sera enviado a o HT como skip +
if (bufferSerial == "Y"){
for(int i=0; i<MySize; i++){
rawCode[i]=(pgm_read_word(&LgHtSkpH[i]));
} //
/*
for (int i = 0; i < 3; i++){
irsend.sendRaw(LgHtSkpH, compr, freq);
delay(50);
}
*/
}
irsend.sendRaw(rawCode,68,freq); // send the IR code
}
//se o comando possui mais de 2 caracteres então é para o dimmer
if (bufferSerial.length()>2){
bufferSerial.trim(); //elimina possiveis espaços
if (bufferSerial.substring(0,2) == "#L") numero = numero+5; //incrementa contador do dimmer para diminuir potencia
if (bufferSerial.substring(0,2) == "#H") numero = numero-5; //decrementa contador do dimmer para aumentar potencia
if (numero >= 15 && numero <= 128) //se contador estiver abaixo ou acima dos limites do dimmer mantém a ultima leitura
{
dimming=numero;
}
else{
dimming=dimming;
}
}
digitalWrite(led, LOW); //apaga o led indicador de envio de IR / comando
}

// função disparada pelo zero-crossing
void zero_crosss_int()
{
int dimtime = (65*dimming); // For 60Hz =>65
delayMicroseconds(dimtime); // Off cycle
digitalWrite(AC_LOAD, HIGH); // triac firing
delayMicroseconds(8.33); // triac On propogation delay 10ms for 60Hz use 8.33)
digitalWrite(AC_LOAD, LOW); // triac Off
}

Mauricio, boa noite. 

Primeiramente grato pelo interesse. Fiz alguns testes rápidos e o programa não trava mais nem aparece ruído na serial. Dimmer e sensor de temperatura funcionando também. O envio dos comando para o IR ficou um pouco mais lento, mas creio que ai seja questão de alguns ajustes no código. Problema resolvido! Muito obrigado!!!.

Fernando,

Que bom que foi resolvido...

Fico a disposição.

Mauricio Ortega

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço