Arduino schéma - arduino.sk

Hodiny Budik bez RTC

Kompletné projekty s návodom a zdrojovým kódom
Príspevky: 89
Registrovaný: Uto 03. Jún 2014 21:48:35
Bydlisko: Košice Slovakia

Hodiny Budik bez RTC

Poslaťod kosice4 » Str 13. Máj 2015 23:03:38

Na potulkách netom keď som hľadal budík z Arduina, natrafil som zaujímavý projekt hodín s budíkom bez RTC s využitím millis.
Samozrejme nastavený čas vypadne po odpojení zdroja !
Trošku som ho upravil na moje obľúbené pripojenie displeja 1602 cez i2c a tlačítka cez digitálne vstupy ošetrené 10k odpormi.

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);
#include "RTClib.h"
RTC_DS1307 RTC;

int starttime;
int activetime;
int prevoustime = 0;

int hours = 0;
int mins = 0;
int ahours = 0;
int amins = 0;

int Buzzer = 9;
int Budik = 4;
int Hodinky = 3;
int Min_Plus = 5;
int Hod_Plus = 6;

void setup()
{
lcd.init();
lcd.backlight();
lcd.clear();

Wire.begin();
RTC.begin();

Serial.begin(115200);

pinMode(Hodinky, INPUT);
pinMode(Min_Plus, INPUT);
pinMode(Hod_Plus, INPUT);
pinMode(Budik, INPUT);
pinMode(Buzzer, OUTPUT);

starttime = millis()/1000;
}

void loop()
{
while(digitalRead(Budik) == 1)
{
lcd.setCursor(6,1);
lcd.print("Alarm");
lcd.setCursor(6,0);
if(digitalRead(Min_Plus) == 1)
{
amins++;
}
else if (digitalRead(Hod_Plus) == 1)
{
ahours++;
}
lcd.setCursor(6,0);
if(ahours < 10)
{
lcd.print("0");
lcd.print(ahours);
}
else
{
lcd.print(ahours);
}
lcd.print(":");
if (amins < 10)
{
lcd.print("0");
lcd.print(amins);
}
else
{
lcd.print(amins);
}
if(amins > 59)
{
ahours++;
amins = 0;
}
if(ahours > 23)
{
ahours = 0;
}
delay(500);
lcd.clear();
}
if(digitalRead(Hodinky) == 1)
{
lcd.setCursor(5,1);
lcd.print("Set Time");
lcd.setCursor(6,0);
if(digitalRead(Min_Plus) == 1)
{
mins++;
}
else if (digitalRead(Hod_Plus) == 1)
{
hours++;
}
}
activetime = (millis() / 1000) - starttime;
if(prevoustime < (activetime - 59))
{
mins++;
prevoustime = activetime;
}
if(mins > 59)
{
hours++;
mins = 0;
}
if(hours > 24)
{
hours = 0;
}
lcd.setCursor(6,0);
if(hours < 10)
{
lcd.print("0");
lcd.print(hours);
}
else
{
lcd.print(hours);
}
lcd.print(":");
if (mins < 10)
{
lcd.print("0");
lcd.print(mins);
}
else
{
lcd.print(mins);
}
if(ahours == hours && amins == mins && amins != 0)
{
tone(Buzzer, 1000, 200);
delay(200);
noTone(Buzzer);
delay(200);
}
else
{
delay(300);
}
lcd.clear();
}
Skôr to slúži ako hračka a niečo sa naučiť s časom 8-)
Ďakujem za pomoc posjirka, Diego, Xeram a barado :)

Späť na Hotové projekty