Arduino como Relógio

Projeto: Arduino como Relógio Leave a comment

O projeto de Arduino como Relógio utiliza a biblioteca Time, LCD por I2C e botões para alterar data e hora.

Vamos ao Projeto: Arduino como Relógio

Os botões servem para incrementar a hora, minuto, dia, mês e ano. O potenciômetro controla o contraste do LCD 16×2.

Arduino como Relógio

A programação TimeSerial foi modificada e está mostrada abaixo:

 

[pastacode lang=”cpp” manual=”%23include%20%3CTime.h%3E%20%0A%23include%20%3CWire.h%3E%20%0A%23include%20%3CLiquidCrystal_I2C.h%3E%0A%23define%20TIME_MSG_LEN%2011%20%2F%2F%20time%20sync%20to%20PC%20is%20HEADER%20followed%20by%20unix%20time_t%20as%20ten%20ascii%20digits%0A%23define%20TIME_REQUEST%207%20%2F%2F%20ASCII%20bell%20character%20requests%20a%20time%20sync%20message%20%0ALiquidCrystal_I2C%20lcd(56%2C16%2C2)%3B%20%20%20%2F%2FIf%20%0Along%20previousmillis%3D0%3B%0Aint%20hr%3D0%3B%0Aint%20minut%3D0%3B%0Aint%20dia%3D0%3B%0Aint%20mes%3D0%3B%0Aint%20ano%3D0%3B%0Aint%20count%3D0%3B%0Avoid%20setup()%20%7B%0Alcd.init()%3B%0Alcd.backlight()%3B%0ApinMode(2%2CINPUT)%3B%0ApinMode(3%2CINPUT)%3B%0ApinMode(4%2CINPUT)%3B%0ApinMode(5%2CINPUT)%3B%0ApinMode(6%2CINPUT)%3B%0ApinMode(7%2CINPUT)%3B%0ASerial.begin(9600)%3B%0ASerial.println(%22Waiting%20for%20sync%20message%22)%3B%0Alcd.print(%22Waiting%22)%3B%0Alcd.setCursor(0%2C1)%3B%0Alcd.print(%22for%20sync%20message%22)%3B%0AsetTime(0%2C0%2C0%2C1%2C1%2C0)%3B%0A%7D%0Avoid%20loop()%7B%20%0A%0Aif(Serial.available()%20)%20%0A%7B%0AprocessSyncMessage()%3B%0A%7D%0A%0A%0Aif((digitalRead(7)%3D%3DHIGH))%20%20%20%20%20%2F%2FChange%20button%0A%7B%0Acount%3Dcount%2B1%3B%0ASerial.println(%22OK%22)%3B%0Aif(count%3E1)%0A%7B%0Acount%3D0%3B%20%0A%7D%0A%7D%0Aif((digitalRead(3)%3D%3DHIGH)%20%26%26%20count%3D%3D1)%20%20%2F%2FHour%20button%0A%7B%0Ahr%3D3600%3B%0AadjustTime(hr)%3B%0A%7D%0Aif((digitalRead(2)%3D%3DHIGH)%20%26%26%20count%3D%3D1)%20%20%20%2F%2FMinute%20button%0A%7B%0Aminut%3D60%3B%0AadjustTime(minut)%3B%0A%7D%0Aif((digitalRead(6)%3D%3DHIGH)%20%26%26%20count%3D%3D1)%20%20%20%2F%2FDay%20Button%0A%7B%0Adia%2B%2B%3B%0Aif(dia%2Bday()%3E31)%0A%7B%0Adia%3D1-day()%3B%0A%7D%20%0A%7D%0Aif((digitalRead(5)%3D%3DHIGH)%20%26%26%20count%3D%3D1)%20%20%20%2F%2FMonth%20button%0A%7B%0Ames%2B%2B%3B%0Aif(mes%2Bmonth()%3E12)%0A%7B%0Ames%3D1-month()%3B%20%0A%7D%0A%7D%0Aif((digitalRead(4)%3D%3DHIGH)%20%26%26%20count%3D%3D1)%20%20%20%20%2F%2FYear%20Button%0A%7B%0Aano%2B%2B%3B%0A%0A%7D%0A%0Aif(timeStatus()!%3D%20timeNotSet)%20%0A%7B%0AdigitalWrite(13%2CtimeStatus()%20%3D%3D%20timeSet)%3B%20%2F%2F%20on%20if%20synced%2C%20off%20if%20needs%20refresh%20%0AdigitalClockDisplay()%3B%20%0A%7D%0Adelay(1000)%3B%0A%0A%7D%0Avoid%20digitalClockDisplay()%7B%0A%2F%2F%20digital%20clock%20display%20of%20the%20time%0Alcd.clear()%3B%0Alcd.print(%22Hora%3A%20%22)%3B%0Alcd.print(hour())%3B%0ASerial.print(hour())%3B%0AprintDigits(minute())%3B%0AprintDigits(second())%3B%0Alcd.setCursor(0%2C1)%3B%0ASerial.print(%22%20%22)%3B%0ASerial.print(dia%2Bday())%3B%0Alcd.print(%22Data%3A%20%22)%3B%0Alcd.print(dia%2Bday())%3B%0Alcd.print(%22.%22)%3B%0ASerial.print(%22%20%22)%3B%0ASerial.print(mes%2Bmonth())%3B%0Alcd.print(mes%2Bmonth())%3B%0Alcd.print(%22.%22)%3B%0ASerial.print(%22%20%22)%3B%0ASerial.print(ano%2Byear())%3B%0Alcd.print(ano%2Byear())%3B%20%0ASerial.println()%3B%20%0A%7D%0Avoid%20printDigits(int%20digits)%7B%0A%2F%2F%20utility%20function%20for%20digital%20clock%20display%3A%20prints%20preceding%20colon%20and%20leading%200%0ASerial.print(%22%3A%22)%3B%0Alcd.print(%22%3A%22)%3B%0Aif(digits%20%3C%2010)%7B%0ASerial.print(‘0′)%3B%0Alcd.print(%220%22)%3B%0A%7D%0ASerial.print(digits)%3B%0Alcd.print(digits)%3B%0A%7D%0Avoid%20processSyncMessage()%20%7B%0A%2F%2F%20if%20time%20sync%20available%20from%20serial%20port%2C%20update%20time%20and%20return%20true%0Awhile(Serial.available()%20%3E%3D%20TIME_MSG_LEN%20)%7B%20%2F%2F%20time%20message%20consists%20of%20a%20header%20and%20ten%20ascii%20digits%0Achar%20c%20%3D%20Serial.read()%20%3B%20%0ASerial.print(c)%3B%20%0Aif(%20c%20%3D%3D%20TIME_HEADER%20)%20%7B%20%0Atime_t%20pctime%20%3D%200%3B%0Afor(int%20i%3D0%3B%20i%20%3C%20TIME_MSG_LEN%20-1%3B%20i%2B%2B)%7B%20%0Ac%20%3D%20Serial.read()%3B%20%0Aif(%20c%20%3E%3D%20’0’%20%26%26%20c%20%3C%3D%20’9′)%7B%20%0Apctime%20%3D%20(10%20*%20pctime)%20%2B%20(c%20-%20’0’)%20%3B%20%2F%2F%20convert%20digits%20to%20a%20number%20%0A%7D%0A%7D%20%0AsetTime(pctime)%3B%20%2F%2F%20Sync%20Arduino%20clock%20to%20the%20time%20received%20on%20the%20serial%20port%0A%7D%20%0A%7D%0A%7D%0Atime_t%20requestSync()%0A%7B%0ASerial.write(TIME_REQUEST)%3B%20%0Areturn%200%3B%20%2F%2F%20the%20time%20will%20be%20sent%20later%20in%20response%20to%20serial%20mesg%0A%7D” message=”” highlight=”” provider=”manual”/]

 

Adicionamos os botões e a biblioteca LCD 16×2 por I2C. Para alterar a hora, por exemplo, é necessário apertar o botão de mudança (localizado no pino digital 7). E depois apertar o botão da hora (localizado no pino digital 3). Ao apertar o botão, incrementará a hora.

Cuidado! Neste projeto não estamos utilizando o RTC (Real Time Clock)! Se o Arduino desligar, a configuração será perdida!

Onde Comprar

Na loja da Tecnotronics você encontra Arduino, eletrônicos e ferramentas. Os preços são ótimos, a agilidade é matadora e as entregas são feitas para todo o Brasil.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

×