Avaliação do Usuário

Estrela inativaEstrela inativaEstrela inativaEstrela inativaEstrela inativa
 

Existem muitas aplicações, somente de software ou de automação, onde contar o tempo é necessário, ou seja, onde é preciso ter um relógio.

Esse relógio pode ser feito apenas via software, com programação, ou pode ser implementado utilizando-se hardware específico (cristal oscilador e etc.). A ideia deste artigo é utilizar apenas técnicas de programação e comandos da linguagem C do Arduino para programar um relógio.

Eis o código fonte:

 

{code}

int seg=0,

min=0,

hor=0;

 

void setup()

{

Serial.begin(9600);

}

 

void loop()

{

static unsigned long ult_tempo = 0;

int tempo = millis();

if(tempo - ult_tempo >= 1000) {

ult_tempo = tempo;

seg++;

}

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);

}

{/code}

 

O que fizemos:

A função millis() retorna a quantidade de milissegundos desde o início da execução do programa. Esse retorno é bastante estável uma vez que volta ao zero apenas em aproximadamente 50 dias!

A cada 1000 milissegundos contamos um segundo, incrementando a variável seg (segundos) e guardamos essa marca, para podermos refazer a conta para encontrar os próximos 1000 milissegundos, uma vez que a contagem da função millis() sempre caminha em frente (excento quando zera, no caso que comentei acima).

Depois disso é o mais fácil: a cada 60 segundos, incrementamos um minuto, a cada 60 minutos incrementamos uma hora e a cada 24 horas voltamos tudo ao zero.

O delay é para que a impressão no terminal serial não fique confusa, mostrando várias vezes o tempo repetidamente.

Uma vez compilado e enviado ao Arduino, basta iniciar o Serial Monitor e verificar a contagem do tempo:

 

Mas talvez, mais interessante ainda, é incluirmos alguma coisa para ajustarmos a contagem do tempo o horário atual. Para isso você vai precisar de:

1. Um Botão

2. Um resistor (220?)

3. Fios

 

A ligação é a seguinte:

GND---| Resistor |-----| Botão | --------------- Pino 3 do Arduino 
5V-------------------------|          |

 

Altere o programa para que fique assim:

 

{code highlight=[4,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34] }

int seg=0,

min=0,

hor=0,

botao;

 

void setup()

{

pinMode(3,INPUT);

Serial.begin(9600);

}

 

void loop()

{

botao = digitalRead(3);

while(botao == HIGH) {

digitalWrite(13, HIGH);

botao = digitalRead(3);

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(200);

}

static unsigned long ult_tempo = 0;

int tempo = millis();

if(tempo - ult_tempo >= 1000) {

ult_tempo = tempo;

seg++;

}

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);

}

{/code}

 

Com isso quando se mantem o botão pressionado o tempo correrá mais rápido, cada segundo será incrementado em 200 milissegundos, ou seja, o tempo correrá 5 vezes mais rápido. Ao despressionar o botão o tempo voltará a correr normalmente, com um segundo valendo um segundo.

Dessa forma você poderá ajustar o tempo do Arduino a um relógio.

Lógico, esse projeto pode ser melhorando em muito, seja CRIATIVO!