klok

Toon hier Uw afgeronde projecten aan anderen.
Berichten: 3
Geregistreerd: 29 Okt 2015, 12:46

klok

Berichtdoor yoltimo » 29 Okt 2015, 12:49

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

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: klok

Berichtdoor nicoverduin » 29 Okt 2015, 14:36

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 :)
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 3
Geregistreerd: 29 Okt 2015, 12:46

Re: klok

Berichtdoor yoltimo » 29 Okt 2015, 17:19

nu je het zo zegt, ja. dit is ook een oud project van mij, maar nu doet hij het net wat anders dan eerst. zou iemand hiermee kunnen helpen

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: klok

Berichtdoor nicoverduin » 29 Okt 2015, 21:10

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?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4064
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: klok

Berichtdoor shooter » 30 Okt 2015, 09:36

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.
paul deelen
shooter@home.nl

Berichten: 3
Geregistreerd: 29 Okt 2015, 12:46

Re: klok

Berichtdoor yoltimo » 30 Okt 2015, 12:16

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

Terug naar Afgeronde projecten

Wie is er online?

Gebruikers in dit forum: Majestic-12 [Bot] en 8 gasten