klok
6 berichten
• Pagina 1 van 1
klok
ik heb een klok gemaakt die werkt op seconden, minuten, uren, dagen, weken, en jaren. pas na 100 jaar is hij weer op nul.
hier id de code
hier id de code
- Code: Alles selecteren
#include <Wire.h>
#include <LiquidCrystal.h>
#define MILLIS_OVERFLOW 34359738
/**
* Clock Variables
*/
unsigned long currentMillis, previousMillis, elapsedMillis;
int seconds, minutes, hours, days, weeks, years;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup()
{
Serial.begin(9600);
lcd.begin( 16, 2 );
lcd.print("My private Clock");
}
void loop()
{
setClock();
/**
* After set clock now you have 3 int variables with the current time
*/
//seconds
//minutes
//hours
//days
//weeks
//years
lcd.setCursor ( 0, 1);
lcd.print(years);
lcd.print(":");
lcd.print(weeks);
lcd.print(":");
lcd.print(days);
lcd.print(":");
lcd.print(hours);
lcd.print(":");
lcd.print(minutes);
lcd.print(":");
lcd.print(seconds);
}
void setClock()
{
currentMillis = millis();
/**
* The only moment when currentMillis will be smaller than previousMillis
* will be when millis() oveflows
*/
if (currentMillis < previousMillis){
elapsedMillis += MILLIS_OVERFLOW - previousMillis + currentMillis;
} else {
elapsedMillis += currentMillis - previousMillis;
}
/**
* If we use equals 1000 its possible that because of the mentioned loop limitation
* you check the difference when its value is (999) and on the next loop its value is (1001)
*/
if (elapsedMillis > 999){
seconds++;
elapsedMillis = elapsedMillis - 1000;
}
if (seconds == 60){
minutes++;
seconds = 0;
}
if (minutes == 60){
hours++;
minutes = 0;
}
if (hours == 24){
days++;
hours = 0;
}
if (days == 7){
weeks++;
days = 0;
}
if (weeks == 52){
years++;
weeks = 0;
}
if (years == 100){
years = 0;
}
previousMillis = currentMillis;
}
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: klok
Ik vrees dat hij wat te vroeg op zijn 100 jaar zit...
bijv. schrikkeljaren?
7 x 52 = 364 dagen. Een jaar heeft of 365 of 366 dagen...
Hoe stel je de datum/tijd in eigenlijk? Want nu lijkt het meer een timer en dan na ongeveer 100 jaar weer op 0 uitkomt.
Wat wel een optie zou zijn is gebruik maken van de Unix time-stamp. Dat is een seconden teller die uitgaat van een startmoment ergens in 1970 en dan gewoon door telt. Dat gaat goed tot 19-1-2038. Maar voor die tijd hebben ze vast al iets anders verzonnen
bijv. schrikkeljaren?
7 x 52 = 364 dagen. Een jaar heeft of 365 of 366 dagen...
Hoe stel je de datum/tijd in eigenlijk? Want nu lijkt het meer een timer en dan na ongeveer 100 jaar weer op 0 uitkomt.
Wat wel een optie zou zijn is gebruik maken van de Unix time-stamp. Dat is een seconden teller die uitgaat van een startmoment ergens in 1970 en dan gewoon door telt. Dat gaat goed tot 19-1-2038. Maar voor die tijd hebben ze vast al iets anders verzonnen
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: klok
Het is een "oud" project van jezelf. Is het dan niet beter dat je dat eerst zelf uitzoekt? Tenslotte kwam je zelf met het project?
Re: klok
leuk begin, lekker tellen en rekenen.
uiteraard een paar opmerkingen, laat het ding eens een dag lopen en je zult merken dat de precisie niet goed is, dus het getal moet je aanpassen.
het probleem is alleen dat je op 0.1 % maar kunt werken.
gebruik eens micros() dan ben je al een stuk precieser, echter moet je dan niet telkens op nul beginnen en geen 1000000 aftrekken maar jouw getal, telkens als de tijd boven 1000000 uitkomt. (denk aan overflow, maar dat kun je afvangen door de getallen af te trekken, zie oude discussies.
tja, ik moet nico gelijk geven, er klopt niet veel van dagtelling, maar ook daarvoor zijn oplossingen, weet alleen niet of dat interessant is.
je kunt ook een RTC kopen daar zit de tijd en datum direct in.
uiteraard een paar opmerkingen, laat het ding eens een dag lopen en je zult merken dat de precisie niet goed is, dus het getal moet je aanpassen.
het probleem is alleen dat je op 0.1 % maar kunt werken.
gebruik eens micros() dan ben je al een stuk precieser, echter moet je dan niet telkens op nul beginnen en geen 1000000 aftrekken maar jouw getal, telkens als de tijd boven 1000000 uitkomt. (denk aan overflow, maar dat kun je afvangen door de getallen af te trekken, zie oude discussies.
tja, ik moet nico gelijk geven, er klopt niet veel van dagtelling, maar ook daarvoor zijn oplossingen, weet alleen niet of dat interessant is.
je kunt ook een RTC kopen daar zit de tijd en datum direct in.
paul deelen
shooter@home.nl
shooter@home.nl
Re: klok
shooter schreef:leuk begin, lekker tellen en rekenen.
uiteraard een paar opmerkingen, laat het ding eens een dag lopen en je zult merken dat de precisie niet goed is, dus het getal moet je aanpassen.
het probleem is alleen dat je op 0.1 % maar kunt werken.
gebruik eens micros() dan ben je al een stuk precieser, echter moet je dan niet telkens op nul beginnen en geen 1000000 aftrekken maar jouw getal, telkens als de tijd boven 1000000 uitkomt. (denk aan overflow, maar dat kun je afvangen door de getallen af te trekken, zie oude discussies.
tja, ik moet nico gelijk geven, er klopt niet veel van dagtelling, maar ook daarvoor zijn oplossingen, weet alleen niet of dat interessant is.
je kunt ook een RTC kopen daar zit de tijd en datum direct in.
bedankt voor de tip
6 berichten
• Pagina 1 van 1
Terug naar Afgeronde projecten
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast