desativada a interrupção do dimmer também funciona:
Exemplo: if (bufferSerial == "A"){detachInterrupt(0);irsend.send(1,0x2FD48B7,32); attachInterrupt(0, zero_crosss_int, RISING); enviou =1; delay(5);} // código NEC(1) TV para ligar
A conexão serial com a placa é feita pelo modulo BT HC-05.
Grato pelo interesse.
#include <IRLib.h>#include <IRLibMatch.h>#include <IRLibRData.h>#include <IRLibTimer.h>
//definições dimmerint ZERO = 2; // pino de interrupção do zero crossint AC_LOAD = 10; // Output para o Triacvolatile int dimming = 100; // Dimming level (0-128) 0 = ON, 128 = OFFString ValorDimmer;
//definições do Receptor IRIRsend irsend; //instância para enviar IR const int led = 8; // pino do led de indicação de envio IR const int ledIR = 3; //pino do emissor IR
//variaveis do temporizador para temperaturaint savedTime;int totalTime = 0;
//variaveis leitura serialString bufferSerial = "";int numero; //contador para alterar a potencia do dimmerint enviou; //flag para indicar que foi enviado codigo IR
void setup(){Serial.begin(9600);
//irpinMode(led, OUTPUT); // saida led pinMode(ledIR ,OUTPUT); // saída do infravermelho
//dimmerpinMode(ZERO, INPUT);pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as outputattachInterrupt(0, zero_crosss_int, RISING); //zero-crossing - interrupçãonumero = dimming; //inicializa a leitura da serial com o mesmo valor do dimming
//inicia temporizador que atualiza temperaturasavedTime = 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; savedTime = millis(); // totalTime = 5000; //Seta para 5seg } bufferSerial = ""; while (Serial.available()>0) { enviou = 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 pela rotina do celular }
if (bufferSerial.length()>0 && bufferSerial.length()<2 && !enviou) { //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.send(1,0x2FD48B7,32); enviou =1; delay(5);} // código NEC(1) TV para ligar if (bufferSerial == "B"){irsend.send(1,0x2FD7887,32); enviou =1; delay(5);} // código NEC(1) TV para diminuir o volume if (bufferSerial == "C"){irsend.send(1,0x2FD58A7,32); enviou =1; delay(5);}// código NEC(1) TV para aumentar o volume if (bufferSerial == "D"){irsend.send(1,0x2FDA857,32); enviou =1; delay(5);}// código NEC(1) TV para timer if (bufferSerial == "E"){irsend.send(1,0x2FD08F7,32); enviou =1; delay(5);}// código NEC(1) TV para mute if (bufferSerial == "M"){irsend.send(7,0x34347887,32);enviou =1; delay(5);} // código NECx(7) HTLG para ligar/desligar if (bufferSerial == "N"){irsend.send(7,0x34346897,32);enviou =1; delay(5);} // código NECx(7) HTLG para baixar o volume if (bufferSerial == "O"){irsend.send(7,0x3434e817,32);enviou =1; delay(5);}// código NECx(7) HTLG para aumentar o volume if (bufferSerial == "P"){irsend.send(7,0x343451AE,32);enviou =1; delay(5);}// código NECx(7) HTLG para selecionar o source if (bufferSerial == "Q"){irsend.send(7,0x343459A6,32);enviou =1; delay(5);}// código NECx(7) HTLG para abrir o deck if (bufferSerial == "R"){irsend.send(7,0x343415EA,32);enviou =1; delay(5);} // código NECx(7) HTLG para mudar de estação / seleção - if (bufferSerial == "S"){irsend.send(7,0x3434956A,32);enviou =1; delay(5);} // código NECx(7) HTLG para mudar de estação / seleção + if (bufferSerial == "T"){irsend.send(7,0x343455AA,32);enviou =1; delay(5);}// código NECx(7) HTLG como enter if (bufferSerial == "U"){irsend.send(7,0x343420DF,32);enviou =1; delay(5);}// código NECx(7) HTLG como play if (bufferSerial == "V"){irsend.send(7,0x3434F20D,32);enviou =1; delay(5);}// código NECx(7) HTLG como pause if (bufferSerial == "X"){irsend.send(7,0x3434609F,32);enviou =1; delay(5);} // código NECx(7) HTLG como skip - if (bufferSerial == "Y"){irsend.send(7,0x3434E01F,32);enviou =1; delay(5);}// código NECx(7) HTLG como skip + }
//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-crossingvoid zero_crosss_int() {int dimtime = (65*dimming); // For 60Hz =>65 delayMicroseconds(dimtime); // Off cycledigitalWrite(AC_LOAD, HIGH); // triac firingdelayMicroseconds(8.33); // triac On propogation delay 10ms for 60Hz use 8.33)digitalWrite(AC_LOAD, LOW); // triac Off}…
Adicionado por Fernando Souza ao 10:53 em 10 novembro 2014
ão é 000,1%
então na teoria consegui entender um pouco, mas quando parti para pratica, não consegui fazer nada.Rsrrsrs
e agora qualquer tecla que preciono começa somente a primeira contagem.
o codigo é esse,
void loop() { int Botao = analogRead (0);
if (Botao < 99) { lcd.clear(); lcd.setCursor(5, 0); lcd.print("Tempo"); lcd.setCursor(2, 1); lcd.print("2 Segundos");
}
else if (Botao < 800) { lcd.clear(); lcd.setCursor(7, 1); lcd.print("1"); delay(1000); lcd.setCursor(7, 1); lcd.print("2"); }
if (Botao < 200) { lcd.clear(); lcd.setCursor(5, 0); lcd.print("Tempo"); lcd.setCursor(2, 1); lcd.print("5 Segundos");
}
else if (Botao < 800) { lcd.clear(); lcd.setCursor(7, 1); lcd.print("1"); delay(1000); lcd.setCursor(7, 1); lcd.print("2"); lcd.setCursor(7, 1); lcd.print("3"); delay(1000); lcd.setCursor(7, 1); lcd.print("4"); delay(1000); lcd.setCursor(7, 1); lcd.print("5");}
}
desde sempre lhe agradeço.
…
nusbot_9_3pi_modelo.cpp:5:20: error: Button.h: No such file or directorylinusbot_9_3pi_modelo.cpp:6:24: error: QTRSensors.h: No such file or directorylinusbot_9_3pi_modelo:14: error: 'Button' does not name a typelinusbot_9_3pi_modelo:18: error: 'QTRSensorsRC' does not name a typelinusbot_9_3pi_modelo:18: error: expected unqualified-id before ',' tokenlinusbot_9_3pi_modelo:18: error: expected unqualified-id before numeric constantlinusbot_9_3pi_modelo.cpp: In function 'void setup()':linusbot_9_3pi_modelo:66: error: 'button' was not declared in this scopelinusbot_9_3pi_modelo:86: error: 'qtr' was not declared in this scopelinusbot_9_3pi_modelo.cpp: In function 'void loop()':linusbot_9_3pi_modelo:113: error: 'button' was not declared in this scopelinusbot_9_3pi_modelo:124: error: 'qtr' was not declared in this scope
Estou utilizando a IDE 1.0
Outra dúvida e a respeito da pinagem do LCD que você esta utilizando, você poderia fornecer o modelo que esta utilizando? No seu projeto você colocou o pino R/W ligado ao pino 13 do arduino e nos exemplos que vejo ele está no GND. Obrigado e Parabéns…
ora: 24-hour format, from 0 to 23 //Minuto: from 0 to 59 //Second: from 0 to 59{ wdt_disable(); // DESABILITA A FUNÇÃO WDT NESTA PARTE DO PROGRAMA. delay(1000); while( i> 0 && i<8) { lcd.setCursor(0,0); LerTecla(); if(i==1){lcd.print(" Entre com Ano ");} if(i==2){lcd.print(" Entre com Mes ");} if(i==3){lcd.print(" Entre com Dia ");} if(i==4){lcd.print(" Entre cm Semana");} if(i==5){lcd.print(" Entre com Hora ");} if(i==6){lcd.print(" Entre com Minut");} if(i==7){lcd.print(" Entre com Segun");} if(UP){acertahora[i]++;estouro = 0;UP = 0;} //alteração custela if (DOWN && acertahora[i] >= 0){acertahora[i]--;estouro = 0; DOWN = 0;} //alteração custela if (SELECT){i ++;estouro = 0; SELECT = 0; delay(200);} //alteração custela if(acertahora[1] < 1 ){acertahora[1] = 13;} if(acertahora[2] > 12){acertahora[2] = 1;} if(acertahora[2] == 0){acertahora[2] = 12;} if(acertahora[3] > 31){acertahora[3] = 1;} if(acertahora[3] == 0){acertahora[3] = 31;} // 1 domigo 2 segunda 3 terca 4 quarta 5 quinta 6 sexta 7 sabado if(acertahora[4] > 7){acertahora[4] = 1;} if(acertahora[4] == 0){acertahora[4] = 7;} if(acertahora[5] > 23){acertahora[5] = 0;} if(acertahora[5] == -1){acertahora[5] = 23;} if(acertahora[6] > 59){acertahora[6] = 0;} if(acertahora[6] == -1){acertahora[6] = 59;} if(acertahora[7] > 59){acertahora[7] = 0;} if(acertahora[7] == -1){acertahora[7] = 59;} lcd.setCursor(9, 1); lcd.print(acertahora[i], DEC);lcd.print(" "); if(estouro == 90){ i = 0 ; estouro = 0;} lcd.clear(); }
DS1307.setDate(acertahora[1], acertahora[2], acertahora[3], acertahora[4], acertahora[5], acertahora[6], acertahora[7]); // AQUI ENVIAMOS OS DADOS DEFINIDOS PARA O REAL TIME CLOK lcd.clear(); }Quero incluir essse case para quando eu selecionar o acertahora[4] mostre switch(acertahora[4]) { case 1:lcd.print("Dom"); break; case 2:lcd.print("Seg"); break; case 3:lcd.print("Ter"); break; case 4:lcd.print("Quar"); break; case 5:lcd.print("Qui"); break; case 6:lcd.print("Sex"); break; case 7:lcd.print("Sab"); }…