LusoRobótica - Robótica em Português

Sistemas específicos => Arduino / AVR => Tópico iniciado por: julioat em 29 de Agosto de 2014, 00:07

Título: ajuda contador simples
Enviado por: julioat em 29 de Agosto de 2014, 00:07
Queria fazer um contador simples. para saber quanto tempo um led ficou ligado.

Caso digitasse 'a' na serial ligasse o led e iniciasse uma contagem. Quando digitasse 'b' o led apagassee pausava a contagem

E quando digitasse 'a' novamente a contagem continuaria de onde terminou.


Vou precisar de um rtc ?


Título: Re: ajuda contador simples
Enviado por: artur36 em 29 de Agosto de 2014, 00:31
Não é necessariamente obrigatório, crias uma interrupção com uma frequência tipo 20hz e sempre que queiras contar o tempo incrementas uma variável a cada passagem da interrupção, quando quiseres saber o tempo é ler a variável e fazer os cálculos para ajustar à escala de tempo que quiseres, no caso dos 20hz se dividires o valor da variável por 20 tens o tempo em segundos.
Título: Re: ajuda contador simples
Enviado por: julioat em 29 de Agosto de 2014, 04:07
Consegui fazer um contador.. mas ele quando crio uma condição de if pro contador disparar quando o led e aceso ele so conta 1, na verdade ta contando so o numero de clicks

o codigo do contador

Código: [Seleccione]
  int seg=0,
min=0,
hor=0;
 
void setup()
{
Serial.begin(9600);
}
 
void loop()
{
  char c ;
c  = Serial.read(); // le caracter
static unsigned long ult_tempo = 0;
int tempo = millis();
if(tempo - ult_tempo >= 1000) {
ult_tempo = tempo;
if(seg>=60) {
seg = 0;
min++;
}
if(min>=60) {
min = 0;
hor++;
}
if(hor>=24) {
hor=0;
min=0;
}
Serial.print(hor);
Serial.print(":");
Serial.print(min);
Serial.print(":");
Serial.println(seg);
delay(1000);
}
}
Título: Re: ajuda contador simples
Enviado por: artur36 em 29 de Agosto de 2014, 08:23
Lendo o código na diagonal:
Onde é que testas o valor do serial read?
Onde é que acendes o led?
Onde é que verifica se o led está acesso ou apagado para iniciar o contador?
Título: Re: ajuda contador simples
Enviado por: MRData em 29 de Agosto de 2014, 16:43
Boas JulioAt,

Vê se isto serve para o que queres.
Fiz este pequeno codigo para :

- Quando introduzes o 'a' (minusculo) no serial monitor seguindo de "enter" o counter inicia e acende o led na board (port13)
- Quando introduzes o 'b' seguido de "enter" o led apaga e tens dois valores, to tempo decorrido entre a ultima vez que acendeu e apagou, e o tempo total de led "acesso".

Se entendi era isto que querias, se necessitares de alguma ajuda no codigo diz. O codigo está 100% funcional.

Código: [Seleccione]
int led = 13;
int counter = 0;
unsigned long StartTime = 0;
unsigned long TotalTime = 0;
int incomingByte = 0;

void setup() {               
  pinMode(led, OUTPUT);
  Serial.begin(9600); 
}

void loop() {
      unsigned long CurrentTime = millis();
      unsigned long ElapsedTime = CurrentTime - StartTime;
      counter = 0;
      char character[20];
      character[0]='x';
      while(Serial.available()) {
          character[counter] = Serial.read();
          counter++;
      }

      if (character[0] == 'a') {
        Serial.println(character[0]);
        digitalWrite(led,HIGH);
        StartTime = millis();
      }
      if (character[0] == 'b') {
        Serial.println(character[0]);
        digitalWrite(led,LOW);
        TotalTime = TotalTime + ElapsedTime;
        Serial.println(String(ElapsedTime) + " Tempo decorrido");
        Serial.println(String(TotalTime) + " Tempo acumulado");
      }
}
Título: Re: ajuda contador simples
Enviado por: StarRider em 29 de Agosto de 2014, 17:22

Vou precisar de um rtc ?

O que precisas mesmo é de alguma educação !!!!!!!!!

Título: Re: ajuda contador simples
Enviado por: ivitro em 29 de Agosto de 2014, 17:41

Vou precisar de um rtc ?

O que precisas mesmo é de alguma educação !!!!!!!!!!

xD