LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: vdr em 10 de Fevereiro de 2010, 01:18

Título: [Ajuda] Projecto de um temporizador
Enviado por: vdr em 10 de Fevereiro de 2010, 01:18
Boas noites, este é o meu primeiro post no lusorobotica ^^

Amanha chegará o meu Arduino ;D, e como projecto inicial decidi fazer um temporizador de contagem regressiva, nada muito complicado, é algo que se faz bem em linguagem C, penso que passar passar para o arduino não será muito complicado.
Pensei em utilizar dois botões de pressão para fazer o SetAlarm.
Em que quando são pressionados os dois ao mesmo tempo, inicia-se a definição do tempo. Um dos botões fica responsável pelo incremento e o outro para alterar entre os horas/minutos/segundos.
Pensei em utilizar o ecrã dum nokia 3310, não tendo assim de comprar um display.

As minha dúvidas começam pelo material necessário além do arduino, dos botões e do LCD, visto que quero utilizar o temporizador fora do arduino, por exemplo para não deixar queimar o arroz xD.

Outra questão é saber quantos clocks ocorrem num segundo, será esta o melhor método para saber que passou um segundo?
Título: Re: [Ajuda] Projecto de um temporizador
Enviado por: microbyte em 10 de Fevereiro de 2010, 01:56
Outra questão é saber quantos clocks ocorrem num segundo, será esta o melhor método para saber que passou um segundo?

Não precisas de nenhum temporizador externo. Tu podes defenir a periodicidade em que executas o código, basta adicionares um delay().

Se meteres o código todo, com um delay(1000) asseguras que o código irá correr a cada segundo.
Título: Re: [Ajuda] Projecto de um temporizador
Enviado por: ghostbuster em 10 de Fevereiro de 2010, 02:50
procura no forum que comecei um projecto parecido, so não o acabei porque aranjei o temp de um microondas ;D
Título: Re: [Ajuda] Projecto de um temporizador
Enviado por: vdr em 10 de Fevereiro de 2010, 20:47
Então podia ficar por exemplo assim:

Depois de ler os dados do utilizador,

Código: [Seleccione]
seg_total=SEC+MIN*60+HOR*3600;

while( seg_total > 0) {
       
       delay(1000);
       SEC++;
   
   
        if(SEC==0) {
           if(MIN==0)
                if(HOR==0){
                    return;   
                }
                else {
                    MIN=59;
                    SEC=59;
                    HOR--;
                }
            else {
                MIN--;
                SEC=59;
            }
        }
}

ghostbuster, não encontrei o tópico que referiste.
Cumprimentos.
Título: Re: [Ajuda] Projecto de um temporizador
Enviado por: senso em 11 de Fevereiro de 2010, 02:09
Outra questão é saber quantos clocks ocorrem num segundo, será esta o melhor método para saber que passou um segundo?

Não precisas de nenhum temporizador externo. Tu podes defenir a periodicidade em que executas o código, basta adicionares um delay().

Se meteres o código todo, com um delay(1000) asseguras que o código irá correr a cada segundo.

Eu conheço a função delay do avr-gcc e essa função serve para fazer um atraso de x milisegundos, ou seja, durante os x milisegundos que metes como parametro na função, o processador não fará mais nada a não ser nop's, logo se ele mete um delay e depois código a seguir não sabe quanto tempo demora o código dele a ser executado.
A maneira mais simples de fazer um relógio será usar um timer e definir um pre-scaler para obter um numero inteiro de clocks para cada segundo e a partir dai pode usar incrementação de variáveis para gerar os minutos, horas e etc. Enquanto o timer fica a fazer mais um "ciclo" dá tempo para escrever o que é preciso para o alarme, mas nunca fará nada quando chega ao valor predefinido para incrementar o valor dos minutos e/ou das horas.
Se for preciso algo realmente preciso o melhor é usar um rtc e a cada par de horas reacertar as variáveis que estão no processador para manter o relógio correcto e sem erros.
Título: Re: [Ajuda] Projecto de um temporizador
Enviado por: vdr em 12 de Fevereiro de 2010, 02:40
Como ainda não tenho os botões para testar, deixo aqui o código que fui fazendo.
O objectivo é iniciar o setAlarm quando os dois botões são pressionados. Depois, um dos botões serve como incremento da hora/minuto/segundo enquanto que o 2º botão serve para mudar de hora/minuto/segundo.

Código: [Seleccione]
int switch1pin = 2;
int switch2pin = 3;
int switchState[2]={0};
int SW1=0;
int SW2=0;
int i;

void setup () {

  Serial.begin(9600);
  pinMode(switch1pin, INPUT);
  pinMode(switch2pin, INPUT); 

}

void loop () {
//Get Data
switchState[0]= digitalRead(switch1pin);
switchState[1]= digitalRead(switch2pin);

//se os dois botões estão pressionados...
if(switchState[0]==1 && switchState[1]==1) {
  //start setTime
  for(i=0; i<2 ; i++) {
    //enquanto o 2º botão não for pressionado 
    while(switchState[1]==0) {
      switchState[0]= digitalRead(switch1pin);
   
      if(switchState[0]==1)
          SW1++;
   
      switchState[1]= digitalRead(switch2pin);
    }
    //Chega aqui quando o 2º botão for pressionado
    crono[i]=SW1; //guardar o numero de incrementos
    SW1=0; //reset à variavel
  }
}
Título: Re: [Ajuda] Projecto de um temporizador
Enviado por: senso em 12 de Fevereiro de 2010, 03:06
Olha este link, diz precisamente como fazer um temporizador correctamente com incrementos de 1 segundo, simlpes e com código que podes copiar/tirar ideias
Título: Re: [Ajuda] Projecto de um temporizador
Enviado por: vdr em 12 de Fevereiro de 2010, 03:16
Esqueceste-te do link  :P
Título: Re: [Ajuda] Projecto de um temporizador
Enviado por: senso em 12 de Fevereiro de 2010, 13:04
ups, peço desculpa:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1167000525 (http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1167000525)