collapse

* Posts Recentes

Arame de Estendal por almamater
[Ontem às 16:16]


O que é isto ? por SerraCabo
[12 de Abril de 2024, 14:20]


Amplificador - Rockboard HA 1 In-Ear por almamater
[11 de Abril de 2024, 20:46]


Emulador NES em ESP32 por dropes
[10 de Abril de 2024, 15:30]


Meu novo robô por josecarlos
[29 de Março de 2024, 18:30]


Bateria - Portátil por almamater
[25 de Março de 2024, 22:14]


Escolher Osciloscópio por jm_araujo
[06 de Fevereiro de 2024, 23:07]


TP4056 - Dúvida por dropes
[31 de Janeiro de 2024, 14:13]


Leitura de dados por Porta Serie por jm_araujo
[22 de Janeiro de 2024, 14:00]


Distancia Cabo por jm_araujo
[08 de Janeiro de 2024, 16:30]

Autor Tópico: ajuda contador simples  (Lida 3936 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline julioat

  • Mini Robot
  • *
  • Mensagens: 2
ajuda contador simples
« 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 ?



Offline artur36

  • Mini Robot
  • *
  • Mensagens: 795
Re: ajuda contador simples
« Responder #1 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.

Offline julioat

  • Mini Robot
  • *
  • Mensagens: 2
Re: ajuda contador simples
« Responder #2 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);
}
}

Offline artur36

  • Mini Robot
  • *
  • Mensagens: 795
Re: ajuda contador simples
« Responder #3 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?

Offline MRData

  • Mini Robot
  • *
  • Mensagens: 81
Re: ajuda contador simples
« Responder #4 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");
      }
}
"We are legion"

StarRider

  • Visitante
Re: ajuda contador simples
« Responder #5 em: 29 de Agosto de 2014, 17:22 »

Vou precisar de um rtc ?

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


Offline ivitro

  • Mini Robot
  • *
  • Mensagens: 451
Re: ajuda contador simples
« Responder #6 em: 29 de Agosto de 2014, 17:41 »

Vou precisar de um rtc ?

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

xD