Tijd programmeren

Arduino specifieke Software
Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Tijd programmeren

Berichtdoor pjh » 23 Jan 2013, 15:31

precies: dikke kans dat hij een seconde mist als hij net bezig is. Is waar. En dat kun je weer opvangen.

Even terug naar het begin: het blijft een antwoord op de vraag naar een tijdelijke tijdsmeter voor een school projectje. Heb echter niks meer van hem gehoord.... Delay(10e100)

Advertisement

Berichten: 29
Geregistreerd: 01 Dec 2012, 18:34

Re: Tijd programmeren

Berichtdoor h.lith » 23 Jan 2013, 22:15

Waarschijnlijk zit ie dan nog in de ISR :lol:
Toevallig vandaag mijn verjaardags boekje over de post gekregen van mijn geliefde schoonmoeder.
Gaat voor een groot deel over C, kan er denk ik wel in vinden die zaken die ik als assembler mannetje zo moeilijk te doorzien vind.
Beginning Arduino Programming van Brian Evans.
Dus ik ben voorlopig nog wel bezig, heb dus vooral interesse in het interrupt gebeuren, misschien moet je daar dan ook nog wel duiken in zeer gespesialiseerde lectuur, of zelf flink wat uit proberen.
Groet maar weer mannen.
Henk Lith

Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

Re: Tijd programmeren

Berichtdoor dirk ambu » 05 Feb 2013, 23:19

beste
ik heb net de code gekopieerd van pjh
maar ik loop tegen een uitdaging aan er staat nu 22:17:17 wat klopt maar als het 22:07:17 is dan zet hij 22:7:17 neer
weet iemand hoe dit is op te lossen
Code: Alles selecteren
    volatile unsigned long seconden = 0;
    unsigned long seconden_oud = 0;

    int seco;
    int minu;
    int uren;

    ISR(TIMER1_OVF_vect) {
      TCNT1=0xBDC;
      seconden = seconden+1;
    }

    void setup() {
      Serial.begin(9600);
     
      TIMSK1=0x01; // enabled global and timer overflow interrupt;
      TCCR1A = 0x00; // normal operation page 148 (mode0);
      TCNT1=0xBDC; // set initial value to remove time error (16bit counter register)
      TCCR1B = 0x04; // start timer/ set clock
     
      zetTijd();
    };

    void loop () {
      if (seconden_oud != seconden){
        seconden_oud = seconden;
        seco++;
        if (seco == 60){
          seco = 0;
          minu++;
          if (minu == 60){
            minu = 0;
            uren++;
            if (uren == 24){
              uren = 0;
            }
          }
        }
        Serial.print(uren);
        Serial.print(':');
        Serial.print(minu);
        Serial.print(':');
        Serial.println(seco);
      }
    };

    void zetTijd(){
      String tijd = __TIME__;
      uren = (tijd.charAt(0)-48)*10+tijd.charAt(1)-48;
      minu = (tijd.charAt(3)-48)*10+tijd.charAt(4)-48;
      seco = (tijd.charAt(6)-48)*10+tijd.charAt(7)-48;
    }


ik hoor het graag

groet dirk

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Tijd programmeren

Berichtdoor pjh » 06 Feb 2013, 00:44

Code: Alles selecteren
    volatile unsigned long seconden = 0;
    unsigned long seconden_oud = 0;

    int seco;
    int minu;
    int uren;

    ISR(TIMER1_OVF_vect) {
      TCNT1=0xBDC;
      seconden = seconden+1;
    }

    void setup() {
      Serial.begin(9600);
     
      TIMSK1=0x01; // enabled global and timer overflow interrupt;
      TCCR1A = 0x00; // normal operation page 148 (mode0);
      TCNT1=0xBDC; // set initial value to remove time error (16bit counter register)
      TCCR1B = 0x04; // start timer/ set clock
     
      zetTijd();
    };

    void loop () {
      if (seconden_oud != seconden){
        seconden_oud = seconden;
        seco++;
        if (seco == 60){
          seco = 0;
          minu++;
          if (minu == 60){
            minu = 0;
            uren++;
            if (uren == 24){
              uren = 0;
            }
          }
        }
        if (uren < 10){
          Serial.print('0');
        }
        Serial.print(uren);
        Serial.print(':');
         if (minu < 10){
         Serial.print('0');
        }
        Serial.print(minu);
        Serial.print(':');
        if (seco < 10){
          Serial.print('0');
        }
        Serial.println(seco);
      }
    };

    void zetTijd(){
      String tijd = __TIME__;
      uren = (tijd.charAt(0)-48)*10+tijd.charAt(1)-48;
      minu = (tijd.charAt(3)-48)*10+tijd.charAt(4)-48;
      seco = (tijd.charAt(6)-48)*10+tijd.charAt(7)-48;
    }

Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

Re: Tijd programmeren

Berichtdoor dirk ambu » 06 Feb 2013, 10:31

is het zo simpel ;)

bedankt

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Tijd programmeren

Berichtdoor pjh » 06 Feb 2013, 10:54

omdat na de if (...) maar één opdracht staat, kun je dit
Code: Alles selecteren
        if (uren < 10){
          Serial.print('0');
        }
        Serial.print(uren);
        Serial.print(':');
         if (minu < 10){
         Serial.print('0');
        }
        Serial.print(minu);
        Serial.print(':');
        if (seco < 10){
          Serial.print('0');
        }
        Serial.println(seco);
     

ook zo schrijven:
Code: Alles selecteren
        if (uren < 10) Serial.print('0');
        Serial.print(uren);
        Serial.print(':');
        if (minu < 10) Serial.print('0');
        Serial.print(minu);
        Serial.print(':');
        if (seco < 10) Serial.print('0');
        Serial.println(seco);


Verder schrijf ik ('0') wat alleen bij één karakter kan. Wanneer ik bijvoorbeeld drie nullen had gewild, dat had ik ("000") moeten gebruiken: dus " ipv '
Er is ook een manier een getallen met voorloop nullen te noteren. Die code kan een ervaren C programmeur zo ophoesten denk ik.

Dus: eenvoudige oplossing, maar alles heeft zijn mitsen en maren.
Doe! :D

Berichten: 144
Geregistreerd: 29 Okt 2012, 16:54

Re: Tijd programmeren

Berichtdoor dirk ambu » 08 Feb 2013, 23:09

nou het werkt erg leuk
maar als ik de stekker eruit haal dan is de tijd weg
of anders gezegd als ik de stekker er weer in stop dan begint hij weer op de tijd die hij had gekregen van de pc zeg dat ik het programma om 17:00 inlaat
dan gaat hij altijd naar 17:00 bij een spanning uitval
weet iemand een oplossing om met 1 knop ( deze ingedrukt te houden ) de tijd opnieuw in te stellen
ik hoor het graag


groet dirk ambu

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Tijd programmeren

Berichtdoor pjh » 08 Feb 2013, 23:48

Er is denk ik maar één manier zonder RTC: het programma opnieuw compileren en uploaden. Hij neemt namelijk de systeemklok van je pc over op het moment van compileren.
Andere oplossing: met RTC.

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Tijd programmeren

Berichtdoor pjh » 10 Feb 2013, 03:11

Ik heb mijn eigen sketch gebruikt, om een klok-display te testen. Ging me niet om de RTC. Heb verslagje geschreven (http://huinink.info/1438-2/) en filmpje gemaakt (http://youtu.be/CBMPRXy02zU).
Afbeelding

Berichten: 10
Geregistreerd: 11 Jan 2013, 13:08

Re: Tijd programmeren

Berichtdoor martinus » 11 Feb 2013, 18:59

Hallo,

Hier hebben we het over tijd programmeren,
misschien ligt dit ook wel in die lijn.

Ik wil in een programma afvragen hoeveel seconden een output pin hoog oftewel laag is geweest.
heb wat zitten stoeien met begintijd en eindtijd. millis
simpel begonnen met de sketch, button,
en met die uitkomst wil ik verder rekenen.
ook met zoeken ben ik niet echt verder gekomen.
misschien een hint van iemand?

Martien.

VorigeVolgende

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 22 gasten