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 é:
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

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

Popular posts from this blog

Connecting Raspberry Pi 2 to P10(1R)-V706 LED Dot Matrix - Raspberry Pi Forums

TypeError: <unknown> is not a numpy array - Raspberry Pi Forums

datso and removing imagetitle - Joomla! Forum - community, help and support