Ajuda com temporizador

Ola galera, sou iniciante em arduino, e estou com duvida em um projeto que estou fazendo.

É o seguinte, preciso fazer um temporizador que seja programável através de botões… pesquisando na internet achei um projeto que atende as minhas necessidades, exceto por um porém: Ele envia o sinal apenas uma vez e volta para a tela de programar o tempo, e para a minha aplicação é necessário que o sinal seja emitido toda vez que o tempo estipulado for percorrido. Ficou meio confuso a explicação, então vou tentar exemplificar:

Por exemplo, no projeto original, vc estipula o tempo em 10s, e da o start, então após passar 10 segundos um sinal é emitido e então para e volta para a tela de estipular o tempo.
Para as minhas necessidades precisaria ser assim: O tempo é estipulado em 10s, e após passar esse tempo um sinal é emitido durante um período pré determinado, e após isso, o tempo volta a contar até passar 10 segundos e emitir o sinal novamente, e fica repetindo isso.

Bom, ficou meio confuso mas acho que da para entender… Agradeço quem puder me ajudar.

ah, o link do projeto que achei: http://electronicavm.net/2011/06/22/temporizador-arduino-lcd/
e o programa: http://electronicavm.net/2011/06/22/temporizador-arduino-lcd/

Viva marcoslima9604! Bem-vindo ao fórum.

Fico com duas dúvidas:
O que é o sinal que é emitido? (não vi o "projecto base", no entanto pode o que precisa pode ser diferente)
Como pretende fazer a paragem (e/ou reconfiguração do tempo)? (se está a alterar essa funcionalidade do projecto base, como está a pensar fazer isso no seu?)

luisilva,

O sinal seria emitido em qualquer saida do arduino.
Para fazer a reconfiguração do tempo eu estava pensando em adicionar um botão que ao ser pressionado apareceria no display a tela de configurar o tempo.

marcoslima9604:
(...)
O sinal seria emitido em qualquer saida do arduino.
(...)

O que significa isto? Trocar o estado de uma saída? Colocar uma saída a ALTO durante algum tempo e depois passa-la a BAIXO? (se for esta opção, durante quanto tempo vai estar a ALTO?)

marcoslima9604:
(...)
Para fazer a reconfiguração do tempo eu estava pensando em adicionar um botão que ao ser pressionado apareceria no display a tela de configurar o tempo.

Pois, isto parece-me uma boa opção.

Também estive a ver o programa, e ou eu estou a ver mal, ou o programa quando termina o tempo não volta a "pedir o tempo", mas fica a mostrar a mensagem "Tempo finalizado" e fica a "apitar. Não gosto muito do programa tem algumas coisas com que não concordo, mas não me parece muito difícil de alterar para aquilo que pretende. Qual é o problema exactamente?

Então, ele precisaria fica com sinal ALTO durante 2 segundos.

O problema é que para a minha aplicação ele precisaria mostrar a mensagem"Tempo finalizado" e manter o sinal alto por 2 segundos, e após isso voltar a contar o tempo.

Sendo assim, penso que qualquer coisa como a que se segue deve funcionar:

//TEMPORIZADOR ARDUINO + LCD 

#include <LiquidCrystal.h> //Libreria del display LCD

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //Inicializamos la libreria con el numero de los pines a utilizar

int buzzer = 13;           //Alarma
int ahoras = 0;            //Variable a mostrar por LCD de las horas
int aminutos = 0;          //Variable a mostrar por LCD de los minutos
int asegundos = 0;         //Variable a mostrar por LCD de los segundos
int segundostotal = 0;     //Tiempo total
int msg= 0;                //Barrera para el mensaje de bienvenida

int start = A2;            //Pulsador de arranque
int empieza = 1024;        // Variable para almacenaje del pulsador de arranque

int buth = A5;             //Pulsador de Horas
int butm = A4;             //Pulsador de Minutos
int buts = A3;             //Pulsador de segundos

int varbuth = 0;           //Variable para almacenar el valor del pulsador de horas
int varbutm = 0;           //Variable para almacenar el valor del pulsador de minutos
int varbuts = 0;           //Variable para almacenar el valor del pulsador de segundos


//variaveis adicionadas
unsigned long tiempo_fin=0;
int segundostotal_mem = 0;     

//constantes adicionadas
const unsigned long tiempo_senal = 2000;

void setup() 
{
  lcd.begin(16, 2);         // Configuramos el numero de columnas y filas del LCD.  

  pinMode(buzzer, OUTPUT);  //Pin de alarma --> Salida
  pinMode(buth, INPUT);     //Pin de pulsador de horas --> Entrada
  pinMode(butm, INPUT);     //Pin de pulsador de minutos --> Entrada
  pinMode(buts, INPUT);     //Pin de pulsador de segundos --> Entrada
  pinMode(start, INPUT);    //Pin de pulsador de arranque --> Entrada

  msg = 0;                  //Barrera del mensaje de bienvenida
  empieza = 1024;           //Barrera de arranque

  varbuth = 1;              //Barrera de horas
  varbutm = 1;              //Barrera de minutos
  varbuts = 1;              //Barrera de segundos
}

void loop() 
{
  if(msg==0) {           //Mostramos el mensaje de bienvenida solo una vez

    lcd.setCursor(0,0);
    lcd.print("Temporizador con");
    lcd.setCursor(1,1);
    lcd.print("Arduino + LCD");
    delay(2500); 
    msg = 1;
    lcd.clear();


    //-------------------------------------------------------------------------------------------------     
    // LECTURA DE LOS BOTONES Y ELECCIÓN DEL TIEMPO, NO SALE DEL BUCLE HASTA PULSAR 
    // EL BOTON DE ARRANQUE
    //-------------------------------------------------------------------------------------------------

    do                   
    {
      varbuth = analogRead(buth);   //Leemos boton de horas
      varbutm = analogRead(butm);   //Leemos boton de minutos
      varbuts = analogRead(buts);   //Leemos boton de segundos

        if(varbuth == 0)              //Si el boton ha sido pulsado, aumentamos las horas en una unidad
      {
        ahoras = ahoras + 1 ;
        delay(250);
      }  

      if(varbutm == 0)            //Si el boton ha sido pulsado, aumentamos los minutos en una unidad
      {
        aminutos = aminutos + 1;
        delay(250);
      }  

      if(varbuts == 0)            //Si el boton ha sido pulsado, aumentamos los segundos en una unidad
      {
        asegundos = asegundos + 1; 
        delay(250);
      }  

      lcd.setCursor(0,0);
      lcd.print("Elige el tiempo");  //Muestra mensaje y las HH:MM:SS que vayamos aumentando

      lcd.setCursor(4,1);     

      if (ahoras < 10) lcd.print("0");    // Si las horas son menor que 10, pone un "0" delante.
      lcd.print(ahoras);                 // Sin este codigo, se muestra asi: H:M:S  (1:M:S)
      lcd.print(":");

      if (aminutos < 10) lcd.print("0");  // Si los minutos son menor que 10, pone un "0" delante.
      lcd.print(aminutos);               // Sin este codigo, se muestra asi: H:M:S  (H:1:S)

      lcd.print(":");
      if (asegundos < 10) lcd.print("0"); // Si los segundos son menor que 10, pone un "0" delante.
      lcd.print(asegundos);              // Sin este codigo, se muestra asi: H:M:S  (H:M:1)

      empieza = analogRead(start);   //Lee el boton de arranque

      if (empieza == 0)              //Si el boton de arranque, fue pulsado...
      {
        segundostotal = asegundos + (aminutos * 60) + (ahoras * 60 * 60);  //Convierte el tiempo elegido en segundos!!
      }

    } 
    while(empieza != 0);  // Se repite el menu de elegir tiempo hasta que pulsemos el boton de arranque.

    segundostotal_mem = segundostotal;
  }     
  //-------------------------------------------------------------------------------------------------
  // UNA VEZ PULSADO EL BOTON DE ARRANQUE Y ACUMULADO EL TIEMPO, ENTRA EN EL SIGUIENTE WHILE
  // Y NO FINALIZA HASTA TERMINAR LA CUENTA.
  //-------------------------------------------------------------------------------------------------
  segundostotal = segundostotal_mem;

  while (segundostotal > 0) {
    delay (1000);          //Descontamos en periodos de 1 segundo
    segundostotal--;     

    ahoras = ((segundostotal / 60)/ 60);   //Convertimos los segundos totales en horas
    aminutos = (segundostotal / 60) % 60;  //Convertimos los segundos totales en minutos
    asegundos = segundostotal % 60;        //Convertimos los segundos totales en periodos de 60 segundos

    lcd.setCursor(0,0);
    lcd.print("Tiempo restante");        //Mostramos mensaje de tiempo restante

    lcd.setCursor(4,1);
    if (ahoras < 10) lcd.print("0");     // Si las horas son menor que 10, pone un "0" delante.
    lcd.print(ahoras);                   // Sin este codigo, se muestra asi: H:M:S  (1:M:S)
    lcd.print(":");

    if (aminutos < 10) lcd.print("0");   // Si los minutos son menor que 10, pone un "0" delante.
    lcd.print(aminutos);                 // Sin este codigo, se muestra asi: H:M:S  (H:1:S)

    lcd.print(":");
    if (asegundos < 10) lcd.print("0");  // si el valor de segundo esta por debajo de 9 (unidad) antepone un cero
    lcd.print(asegundos);                // Sin este codigo, se muestra asi: H:M:S  (H:M:1)

    if (analogRead(start) == 0) {
      msg = 0;
    }

    if (segundostotal == 0)            //Si finaliza el tiempo
    {           
      tiempo_fin = millis();

      while(millis() - tiempo_fin < tiempo_senal) {
        if (analogRead(start) == 0) {
          msg = 0;
        }

        lcd.clear();
        lcd.setCursor(5,0);
        lcd.print("Tiempo");
        lcd.setCursor(3,1);
        lcd.print("Finalizado");

        digitalWrite(buzzer, HIGH);
      }      
      digitalWrite(buzzer, LOW);
    }
  }

}

Muito obrigado pela ajuda! encomendei um display pela internet, assim que ele chegar eu vou testar.

Ola sou novo nestas andanças, peço ajuda para fazer um temporizador para rega hidroponica. tem que ligar a bomba de rega das 06h00 até as 19h00 de 15 em 15 minutos. quer dizer que liga 15minutos e para 15 minutos. Das 19h00 as 06h00 liga 15 minutos e para 2 a 3 horas depende da temperatura noturna. alguem me ajude.

Boa noite poderia me enviar código e como ligar no display
materiais

achei interessante o projeto

Olá galera estou..... A passar por certas dificuldades para programamar o 4 Display tm 1637.h
Bom o meu grande objectivo é ajustar o tempo atrqves de quatro butoes um para aumentar o tempo outro para diminuir ainda outro para gravar e mais um para passar para outra casa decimal. Mas sempre que o tempo inicia tem que tocar o buzzer e ao terminar o tempo ajustado tocar novamente por uns 2 segundos ou menos.

Peço a vossa ajuda nisso....