Accionando um rele a uma determinada hora pela leitura de RTC DS1307
pll
como já mencionei em outro tópico o meu "hardware" é:
- arduino mega;
- teclado matricial 4x4
- 8 reles
- lcd (ainda não montado porque aguardo pelo potênciometro)
- relogio rtc ds1307
o código por defeito "apresenta" horas no serial monitor, e com introdução da password interrompe, e ao pressionar uma tecla altera o estado respectivo rele e escreve que relé está ligar/desligar, (tipo relé 1 on).
resumidamente:
1 - apresenta horas;
2 - para ao introduzir password
3 - ao introduzir um numero, altera o estado respectivo relé e escreve no serial monitor o estado
4 - ao bloquear o teclado volta ao ponto 1
até aqui tudo bem, (com algumas ajudas e tal...).
agora estou passar para uma nova fase, que é:
a - mantendo o que já existe (pontos 1 4), ligar um relé uma determinada hora e desligar outra determinada hora.
tenho estado experimentar com os minutos e no serial monitor.
o código nesta parte é:
agora, no principio código quando substituo:
if(minuto>=13 && minuto<14 && estado==false)
{(serial.println(" "));}
[font=verdana]testado e qd condição é verdadeira ele imprime no serial monitor " ", passando para o ponto 1 quando condição passa falsa [/font]
por:
if(minuto>=13 && minuto<14 && estado==false)
{digitalwrite(relehqi, high);}
o relé mesmo quando condição é verdadeira não liga???
resta-me dizer que ligando o relé via terclado ele liga, (o que exclui erros de "harware").
se funciona com função serial.println, porque não funciona com função digitalwrite???
como já mencionei em outro tópico o meu "hardware" é:
- arduino mega;
- teclado matricial 4x4
- 8 reles
- lcd (ainda não montado porque aguardo pelo potênciometro)
- relogio rtc ds1307
o código por defeito "apresenta" horas no serial monitor, e com introdução da password interrompe, e ao pressionar uma tecla altera o estado respectivo rele e escreve que relé está ligar/desligar, (tipo relé 1 on).
resumidamente:
1 - apresenta horas;
2 - para ao introduzir password
3 - ao introduzir um numero, altera o estado respectivo relé e escreve no serial monitor o estado
4 - ao bloquear o teclado volta ao ponto 1
até aqui tudo bem, (com algumas ajudas e tal...).
agora estou passar para uma nova fase, que é:
a - mantendo o que já existe (pontos 1 4), ligar um relé uma determinada hora e desligar outra determinada hora.
tenho estado experimentar com os minutos e no serial monitor.
o código nesta parte é:
code: [select]
void loop()
{
if(minuto>=13 && minuto<14 && estado==false)
{(serial.println(" "));}
char key = keypad.getkey();
if (estado == false)
if (millis() - tempo > 1000)
{imprimedadosmodulo();
tempo = millis();}
if (estado == false && key != no_key) //verifica o estado teclado
{switch (key)
{case '*':
if (password.evaluate()) // verifica se password introduzida é correcta
{mostrainfo(target, 0, 0, "desbloqueado");
estado = true; } // e activa o teclado
break;
case '#': password.reset(); break; // se precionado # reseta password
default: password.append(key);
//chamando função para imprimir na tela os dados gravados no módulo.
}
}
else if (estado == true && key != no_key) // se o teclado está activado, e foi precionada uma tecla
//serial.println(key);
{if (key >= '0' && key <= '9')
{value = value * 10 + key - '0';}
if (key == '*')
//serial.println(value); //mostra valor total (actual) == se isto tivesse estado aqui o problema tinha sido descoberto antes
{switch (value)
{case 1 :
if (digitalread(relehqi) == low) // verifica se lâmpadas hqi estão desligadas
{digitalwrite(relehqi, high); // se verdadeiro liga lâmpadas hqi
mostrainfo(target, 0, 0, "hqi off");}
else
{digitalwrite(relehqi, low); // se falso desliga lâmpadas hqi
mostrainfo(target, 0, 0, "hqi on");}
break;
case 2 :
if (digitalread(relet8) == low)
{digitalwrite(relet8, high);
mostrainfo(target, 0, 0, "t8 off");}
else
{digitalwrite(relet8, low);
mostrainfo(target, 0, 0, "t8 on");}
break;
default:
estado = false;
password.reset(); // vai ler novamente password, por isso elimina os valores anteriores
mostrainfo(target, 0, 0,indisponibilidade);
delay(500);
mostrainfo(target, 0, 0,"bloqueado");
}
value = 0; // elimina teclas anteriores (nova leitura)
}
if (key >= 'a' && key <= 'd')
{switch (key)
{case 'a' :
if ((digitalread(relehqi) == high) ||
(digitalread(relet8) == high) ||
(digitalread(relemoonlight) == high))
{ digitalwrite(relehqi, low);
digitalwrite(relet8, low) ;
digitalwrite(relemoonlight, low);
else
{digitalwrite(relehqi, high);
digitalwrite(relet8, high);
digitalwrite(relemoonlight, high);
mostrainfo(target, 0, 0, "calha desligada");}
break;
default:
estado = false;
password.reset(); // vai ler novamente password, por isso elimina os valores anteriores
mostrainfo(target, 0, 0,indisponibilidade);
delay(500);
mostrainfo(target, 0, 0,"bloqueado");
}
value = 0;
}
}
}
agora, no principio código quando substituo:
if(minuto>=13 && minuto<14 && estado==false)
{(serial.println(" "));}
[font=verdana]testado e qd condição é verdadeira ele imprime no serial monitor " ", passando para o ponto 1 quando condição passa falsa [/font]
por:
if(minuto>=13 && minuto<14 && estado==false)
{digitalwrite(relehqi, high);}
o relé mesmo quando condição é verdadeira não liga???
resta-me dizer que ligando o relé via terclado ele liga, (o que exclui erros de "harware").
se funciona com função serial.println, porque não funciona com função digitalwrite???
importas-te de testar isso com texto em vez de 3 espacos... e ja que vais testar, activar estes serial.print
que e que tens ligado no rele para saber que o mesmo ligou?
code: [select]
else if (estado == true && key != no_key) // se o teclado está activado, e foi precionada uma tecla
serial.println(key);
{if (key >= '0' && key <= '9')
{value = value * 10 + key - '0';}
if (key == '*')
serial.println(value); //mostra valor total (actual) ==
{switch (value)
que e que tens ligado no rele para saber que o mesmo ligou?
Arduino Forum > International > Portugues > Accionando um rele a uma determinada hora pela leitura de RTC DS1307
arduino
Comments
Post a Comment