timer ofzo.

Hallo allemaal.

Ik heb een nieuw probleem.

Mijn allereerste projectje, wat ik in de praktijk aan het werk gezet heb, is een Arduino (duemilanova), die 2 timertjes met relaitjes bedient.
1 voor het vullen van de sjasbak van de wc, met buitenwater,
en 1 voor de centrale verwarming van de oefenruimte.

Dat heeft bijna anderhalf jaar keurig gewerkt.
En nu heb ik m toch moeten resetten. (voeding uit en ff later weer aan).
Nu gaat ie weer anderhalf jaar mee, daar ben ik bijna zeker van.

Bij mijn generator was dat een paar weken geleden ook al zo.
Maar dat project is later gemaakt, maar was eerder stuk. (dwz. het deed niks meer.)
Daar heb ik dan maar de nieuwste proefversie die klaar lag voor geupload.
Kijken hoe lang dat meegaat.

Wat ik voor de toekomst wil is een timer subroutinetje, die ietje beter werkt.
Maar ik heb alle tijd, want voorlopig werkt het min of meer.
Ik publiceer dit eigenlijk alleen maar ter algemene lering en vermaak.

Beide sketsjes zijn bijgesloten als attachments.

Plus een nieuwe voor de tuin, waarvan ik denk dat die nog steeds even slecht is.
Alleen ga ik dat dan niet meer mee maken.

tuintimer.ino (2 KB)

wc_kachel_timer.ino (4.01 KB)

web_toggle_knop_timer_kubota_3_1.ino (10.6 KB)

Voorkomen dat je sketch vastloopt, zal niet eenvoudig zijn.
Zeker wanneer dat eens in de anderhalf jaar of na een aantal maanden voorkomt.
Daarom kun je wellicht beter proberen om te gaan met een vastgelopen sketch.
Hiervoor zijn verschillende methodes (voor verschillende oorzaken of soorten van foutief gedrag), maar de meest bekende is de watchdog timer.
Zo'n timer moet regelmatig gereset worden door je sketch.
Wanneer de timer niet op tijd een reset krijgt, zal deze op zijn beurt de controller / je sketch resetten.
Daar voorkom je dus niet mee dat je controller vastloopt, maar als ie vastgelopen is word ie weer "op de rails" gezet.
Ik heb onlangs gelezen dat er mogelijkheden zijn om dit in de Arduino te gebruiken maar ken de details daarover niet precies.
Een watchdog kan ook een stukje externe elektronica zijn die van buiten je controller werkt maar hetzelfde doet.

de watchdog is de oplossing voor jouw probleem.
Merk wel op dat je een andere bootloader zal moeten branden op je duemilanova want de bootloader die er "normaal" opstaat kan niet om met een watchdog timer.
De beste manier is de uno bootloader branden. Van dan af aan moet je wel altijd UNO kiezen en niet duemilenova.
Zet de watchdog ook niet te klein want dan zou je toch nog reset problemen kunnen hebben.
Met vriendelijke groet
Jantje

refactored tuinSproeier

/*
This example code is in the public domain.
 */

// PARAMETER 
int droog = 300;         // zelf invullen
int nat = 900;           // zelf invullen

int sproei_tijd = 10;    // zelf invullen

int vocht_sensor = A0;
int sensorValue = 0;
int tuinslang = 2;

unsigned long current_millis_value = 0;
unsigned long previous_millis_value = 0;
unsigned long lastSensorDisplay = 0;

uint8_t seconds = 0; 
uint8_t minutes = 0;
uint8_t hours = 0;
uint16_t days = 0;  // 365 does not fit an int.     
uint8_t weeks = 0;
uint8_t months = 0;

uint8_t years = 14; // 2014
unsigned long centuries = 20;

// nieuw datatype
enum sproeier
{
  AAN, UIT
};

sproeier tuinSproeier = UIT;

void setup() 
{
  pinMode(vocht_sensor, INPUT);
  digitalWrite(vocht_sensor, HIGH);

  pinMode(tuinslang, OUTPUT);
  digitalWrite (tuinslang, LOW);

  Serial.begin(115200);
  Serial.println("tuinsproeier");
  if (nat <= droog)
  {
    Serial.println("error");
  }
}

void loop() 
{
  // UPDATE CLOCK
  clock();

  // SENSOR
  sensorValue = analogRead(vocht_sensor);
  if (millis() - lastSensorDisplay >= 10000)  // ieder 10 seconden 
  {
    lastSensorDisplay = millis();
    Serial.print(hours);
    Serial.print(":");
    Serial.print(minutes);
    Serial.print(":");
    Serial.print(seconds);
    Serial.print("\t");
    Serial.print("vocht sensor");
    Serial.println(sensorValue);
  }


  // SCHAKEL MOMENTEN
  if ((hours == 0) && (minutes == 0) && (sensorValue < droog) && (tuinSproeier == UIT)) 
  { 
    tuinSproeier = AAN; 
  }
  if ((hours == 0) && (minutes == 30) && (tuinSproeier == AAN)) 
  { 
    tuinSproeier = UIT; 
  }
  if ((sensorValue >= nat) && (tuinSproeier == AAN))
  { 
    tuinSproeier = UIT; 
  }

  // execute de sproeier;
  if (tuinSproeier == AAN) digitalWrite(tuinslang, HIGH );
  if (tuinSproeier == UIT) digitalWrite(tuinslang, LOW );
}



/*    CLOCK     */

void clock() 
{
  current_millis_value = millis();

  if (current_millis_value - previous_millis_value >= 1000) // subtraction + inequality
  {
    previous_millis_value = current_millis_value;

    seconds++;
    if (seconds == 60) 
    {
      minutes++;
      seconds = 0;
      if (minutes == 60)
      {
        hours++;
        minutes = 0;
        if (hours == 24)
        {
          days++;
          hours = 0;
          // these formulas are approximate
          if (days % 7 == 0) weeks++;
          if (days % 30 == 0) months++;
          if (days % 365 == 0)    // does not do leapyears yet
          {
            years++;
            days = 1;
            weeks = 1;
            months = 1;
          }
          if (years == 100)
          {
            centuries++;  // can do 4294967295 centuries == 30x age of universe
            years = 0;
          }
        }
      }
    }
  }
}

Pfff.
Okee dat ziet er goed uit.
Ik heb blijkbaar wat te studeren.

En een hoop te herschrijven.

Bedankt in ieder geval.

You're welcome,
Ervaring en vooraf een ontwerp maken hoe eea moet werken helpen het meeste dus niet te bang zijn om te proberen.
"programmeren is moeilijker dan je denkt, maar wordt makkelijker als je denkt" :slight_smile:

Een paar uitbreidingen die je kunt doen op basis van de sketch.

Uitbreiding 1:
Het programma geeft nu max. 30 minuten water. Kun je het programma zo aanpassen dat het max. 10 minuten water geeft en als dat niet genoeg is een uur later een keer 10 minuten. (kan het water wat intrekken)

Uitbreiding 2:
Het programma laat zien hoe vochtig de grond is. Nu laat ie iedere 10 seconden de vochtigheid zien.
Voeg code regels toe dat ie dat alleen doet als de sproeier uitstaat.
Voeg daarna regels code toe zodat hij als de sproeier aanstaat iedere seconde de vochtigheid meet.

Uitbreiding 3:
Verander het programma zo dat de vochtigheid het eerste uur na het sproeien met een interval van 1 seconde blijft meten.
(opdroogcurve)
HInt: behalve de states AAN, UIT heb je een 3e state nodig.

Uitbreiding 4:
Voeg regels toe om de onboard led 13 te laten knipperen met 1x per seconde . HInt: millis() truc en een 2e state

Uitbreiding 5:
Maak de snelheid van het knipperen van de led afhankelijk van de vochtigheid.
< droog => interval = 4 seconden
droog.. nat => interval = 1 seconde

nat => interval = 4 keer /seconde
bonuspunten voor een glijdende schaal :wink:

Uitbreiding 1, 2 en 3 ziten hier in.
Op naar 4 en 5.
Voordat ik aan de bonus toe ben zal nog wel even duren.

/*
This example code is in the public domain.
 */

// PARAMETER 
int droog = 300;         // zelf invullen
int nat = 900;           // zelf invullen

int sproei_tijd = 10;    // zelf invullen

int vocht_sensor = A0;
int sensorValue = 0;
int tuinslang = 2;

unsigned long current_millis_value = 0;
unsigned long previous_millis_value = 0;
unsigned long lastSensorDisplay = 0;

uint8_t seconds = 0; 
uint8_t minutes = 0;
uint8_t hours = 0;
uint16_t days = 0;  // 365 does not fit an int.     
uint8_t weeks = 0;
uint8_t months = 0;

uint8_t years = 14; // 2014
unsigned long centuries = 20;

// nieuw datatype
enum sproeier
{
  AAN, UIT, TJOETSCHA
};

sproeier tuinSproeier = UIT;

enum Led_13
{ AAN, UIT
};




void setup() 
{
  pinMode(vocht_sensor, INPUT);
  digitalWrite(vocht_sensor, HIGH);

  pinMode(tuinslang, OUTPUT);
  digitalWrite (tuinslang, LOW);

  Serial.begin(115200);
  Serial.println("tuinsproeier");
  if (nat <= droog)
  {
    Serial.println("error");
  }
}

void loop() 
{
  // UPDATE CLOCK
  clock();

  // SENSOR
  sensorValue = analogRead(vocht_sensor);

  if (millis() - lastSensorDisplay >= 10000 && (tuinSproeier == UIT)) // iedere 10 seconden als de tuinsproeier uitstaat.
  {
    lastSensorDisplay = millis();
    Serial.print(hours);
    Serial.print(":");
    Serial.print(minutes);
    Serial.print(":");
    Serial.print(seconds);
    Serial.print("\t");
    Serial.print("vocht sensor");
    Serial.println(sensorValue);
  }
  
  if (millis() - lastSensorDisplay >= 1000 && (tuinSproeier == AAN)) //iedere seconde als de sproeier aanstaat.
  {
    lastSensorDisplay = millis();
    Serial.print(hours);
    Serial.print(":");
    Serial.print(minutes);
    Serial.print(":");
    Serial.print(seconds);
    Serial.print("\t");
    Serial.print("vocht sensor");
    Serial.println(sensorValue);
  }

if (millis() - lastSensorDisplay >= 1000 && (tuinSproeier == TJOETCHA)) //iedere seconde als de sproeier aanstaat.
  {
    lastSensorDisplay = millis();
    Serial.print(hours);
    Serial.print(":");
    Serial.print(minutes);
    Serial.print(":");
    Serial.print(seconds);
    Serial.print("\t");
    Serial.print("vocht sensor");
    Serial.println(sensorValue);
  }

  // SCHAKEL MOMENTEN

  if ((hours == 0) && (minutes == 0) && (sensorValue < droog) && (tuinSproeier == UIT)) 
  { 
    tuinSproeier = AAN;
  }

  if ((hours == 1) && (minutes == 0) && (sensorValue < droog) && (tuinSproeier == UIT)) 
  { 
    tuinSproeier = AAN; 
  }

  if ((hours == 1) && (minutes == 0) && (sensorValue < droog) && (tuinSproeier == TJOETSCHA)) 
  { 
    tuinSproeier = UIT; 
  }

  if ((hours == 0) && (minutes == 10) && (tuinSproeier == AAN)) 
  { 
    tuinSproeier = TJOETSCHA; 
  }

  if ((hours == 1) && (minutes == 10) && (tuinSproeier == AAN)) 
  { 
    tuinSproeier = TJOETSCHA; 
  }

  if ((sensorValue >= nat) && (tuinSproeier == AAN))
  { 
    tuinSproeier = UIT; 
  }

  // execute de sproeier;
  if (tuinSproeier == AAN) digitalWrite(tuinslang, HIGH );
  if (tuinSproeier == TJOETSCHA) digitalWrite(tuinslang, LOW );
  if (tuinSproeier == UIT) digitalWrite(tuinslang, LOW );
  
  //onboard led_13 1 / seconde
  
  
}



/*    CLOCK     */

void clock() 
{
  current_millis_value = millis();

  if (current_millis_value - previous_millis_value >= 1000) // subtraction + inequality
  {
    previous_millis_value = current_millis_value;

    seconds++;
    if (seconds == 60) 
    {
      minutes++;
      seconds = 0;
      if (minutes == 60)
      {
        hours++;
        minutes = 0;
        if (hours == 24)
        {
          days++;
          hours = 0;
          // these formulas are approximate
          if (days % 7 == 0) weeks++;
          if (days % 30 == 0) months++;
          if (days % 365 == 0)    // does not do leapyears yet
          {
            years++;
            days = 1;
            weeks = 1;
            months = 1;
          }
          if (years == 100)
          {
            centuries++;  // can do 4294967295 centuries == 30x age of universe
            years = 0;
          }
        }
      }
    }
  }
}

rikky:
Voordat ik aan de bonus toe ben zal nog wel even duren.

Dat geloof ik.
Voor een glijdende schaal zal je 'm buiten moeten zetten.
Maar er is nog lang geen vorst in zicht, dus glijden zit er voorlopig ook nog niet in. :stuck_out_tongue:

Uitbreiding 4, maar dan beter.

/*
This example code is in the public domain.
 */

// PARAMETER 
int droog = 300;         // zelf invullen
int nat = 900;           // zelf invullen

int sproei_tijd = 10;    // zelf invullen

int vocht_sensor = A0;
int sensorValue = 0;
int tuinslang = 2;

const int ledPin =  13;
boolean ledState = LOW;

unsigned long current_millis_value = 0;
unsigned long previous_millis_value = 0;
unsigned long lastSensorDisplay = 0;

uint8_t seconds = 0; 
uint8_t minutes = 0;
uint8_t hours = 0;
uint16_t days = 0;  // 365 does not fit an int.     
uint8_t weeks = 0;
uint8_t months = 0;

uint8_t years = 14; // 2014
unsigned long centuries = 20;

// nieuw datatype
enum sproeier
{
  AAN, UIT, TJOETSCHA
};

sproeier tuinSproeier = UIT;


void setup() 
{
  pinMode(ledPin, OUTPUT);  
  pinMode(vocht_sensor, INPUT);
  digitalWrite(vocht_sensor, HIGH);

  pinMode(tuinslang, OUTPUT);
  digitalWrite (tuinslang, LOW);

  Serial.begin(115200);
  Serial.println("tuinsproeier");
  if (nat <= droog)
  {
    Serial.println("error");
  }
}

void loop() 
{
  // UPDATE CLOCK
  clock();

  // SENSOR
  sensorValue = analogRead(vocht_sensor);

  if (millis() - lastSensorDisplay >= 10000 && (tuinSproeier == UIT)) // iedere 10 seconden als de tuinsproeier uitstaat.
  {
    lastSensorDisplay = millis();
    Serial.print(hours);
    Serial.print(":");
    Serial.print(minutes);
    Serial.print(":");
    Serial.print(seconds);
    Serial.print("\t");
    Serial.print("vocht sensor");
    Serial.println(sensorValue);
  }
  
  if (millis() - lastSensorDisplay >= 1000 && (tuinSproeier == AAN)) //iedere seconde als de sproeier aanstaat.
  {
    lastSensorDisplay = millis();
    Serial.print(hours);
    Serial.print(":");
    Serial.print(minutes);
    Serial.print(":");
    Serial.print(seconds);
    Serial.print("\t");
    Serial.print("vocht sensor");
    Serial.println(sensorValue);
  }

if (millis() - lastSensorDisplay >= 1000 && (tuinSproeier == TJOETSCHA)) //iedere seconde als de sproeier aanstaat.
  {
    lastSensorDisplay = millis();
    Serial.print(hours);
    Serial.print(":");
    Serial.print(minutes);
    Serial.print(":");
    Serial.print(seconds);
    Serial.print("\t");
    Serial.print("vocht sensor");
    Serial.println(sensorValue);
  }
  
  if (millis() - lastSensorDisplay >= 1000 && (seconds % 2 == 0)) 
  {
    ledState = LOW;
  }
   
  else
  {
   ledState = HIGH; 
  }
  
  // SCHAKEL MOMENTEN

  if ((hours == 0) && (minutes == 0) && (sensorValue < droog) && (tuinSproeier == UIT)) 
  { 
    tuinSproeier = AAN;
  }

  if ((hours == 1) && (minutes == 0) && (sensorValue < droog) && (tuinSproeier == UIT)) 
  { 
    tuinSproeier = AAN; 
  }

  if ((hours == 1) && (minutes == 0) && (sensorValue < droog) && (tuinSproeier == TJOETSCHA)) 
  { 
    tuinSproeier = UIT; 
  }

  if ((hours == 0) && (minutes == 10) && (tuinSproeier == AAN)) 
  { 
    tuinSproeier = TJOETSCHA; 
  }

  if ((hours == 1) && (minutes == 10) && (tuinSproeier == AAN)) 
  { 
    tuinSproeier = TJOETSCHA; 
  }

  if ((sensorValue >= nat) && (tuinSproeier == AAN))
  { 
    tuinSproeier = UIT; 
  }

  // execute de sproeier;
  if (tuinSproeier == AAN) digitalWrite(tuinslang, HIGH );
  if (tuinSproeier == TJOETSCHA) digitalWrite(tuinslang, LOW );
  if (tuinSproeier == UIT) digitalWrite(tuinslang, LOW );
  
  //onboard led_13. 1* per seconde.
  digitalWrite(ledPin, ledState);
  
}



/*    CLOCK     */

void clock() 
{
  current_millis_value = millis();

  if (current_millis_value - previous_millis_value >= 1000) // subtraction + inequality
  {
    previous_millis_value = current_millis_value;

    seconds++;
    if (seconds == 60) 
    {
      minutes++;
      seconds = 0;
      if (minutes == 60)
      {
        hours++;
        minutes = 0;
        if (hours == 24)
        {
          days++;
          hours = 0;
          // these formulas are approximate
          if (days % 7 == 0) weeks++;
          if (days % 30 == 0) months++;
          if (days % 365 == 0)    // does not do leapyears yet
          {
            years++;
            days = 1;
            weeks = 1;
            months = 1;
          }
          if (years == 100)
          {
            centuries++;  // can do 4294967295 centuries == 30x age of universe
            years = 0;
          }
        }
      }
    }
  }
}

Ik ben maar een ouwe man, dus het duurt allemaal lang.
Ik heb ook allemaal andere dingen te doen.
Dankzij de griep heb ik toch nog achter de computer kunen kruipen, en ik heb inmiddels al mijn belangrijke programmaatjes herschreven.
Die zijn hier bijgesloten, just in case mn computer weer een keer crashed,, maar nog niet geupload, dus ook niet getest.
Dat wordt morgen ofzo.

En ,, uitbreiding 5, zoals beloofd.

/*
This example code is in the public domain.
 */

// PARAMETER 
int Droog = 300;         // zelf invullen
int Nat = 900;           // zelf invullen
int bestwelNat = 700;
int tussenNatDroog = 600;
int bestwelDroog = 500;
int ledInterval = 1000;

int sproei_tijd = 10;    // zelf invullen

int vocht_sensor = A0;
int sensorValue = 0;
int tuinslang = 2;

const int ledPin =  13;
boolean ledState = LOW;

unsigned long current_millis_value = 0;
unsigned long previous_millis_value = 0;
unsigned long lastSensorDisplay = 0;
unsigned long lastLedDisplay = 0;

uint8_t seconds = 0; 
uint8_t minutes = 0;
uint8_t hours = 0;
uint16_t days = 0;  // 365 does not fit an int.     
uint8_t weeks = 0;
uint8_t months = 0;

uint8_t years = 14; // 2014
unsigned long centuries = 20;

// nieuw datatype
enum sproeier
{
  AAN, UIT, TJOETSCHA
};

sproeier tuinSproeier = UIT;


void setup() 

{
  pinMode(ledPin, OUTPUT);  
  pinMode(vocht_sensor, INPUT);
  digitalWrite(vocht_sensor, HIGH);

  pinMode(tuinslang, OUTPUT);
  digitalWrite (tuinslang, LOW);

  Serial.begin(115200);
  Serial.println("tuinsproeier");
  if (Nat <= Droog)
  {
    Serial.println("error");
  }
}

void loop() 
{
  // UPDATE CLOCK
  clock();

  // SENSOR
  sensorValue = analogRead(vocht_sensor);

  if (millis() - lastSensorDisplay >= 10000 && (tuinSproeier == UIT)) // iedere 10 seconden als de tuinsproeier uitstaat.
  {
    lastSensorDisplay = millis();
    Serial.print(hours);
    Serial.print(":");
    Serial.print(minutes);
    Serial.print(":");
    Serial.print(seconds);
    Serial.print("\t");
    Serial.print("vocht sensor");
    Serial.println(sensorValue);
  }
  
  if (millis() - lastSensorDisplay >= 1000 && (tuinSproeier == AAN)) //iedere seconde als de sproeier aanstaat.
  {
    lastSensorDisplay = millis();
    Serial.print(hours);
    Serial.print(":");
    Serial.print(minutes);
    Serial.print(":");
    Serial.print(seconds);
    Serial.print("\t");
    Serial.print("vocht sensor");
    Serial.println(sensorValue);
  }

if (millis() - lastSensorDisplay >= 1000 && (tuinSproeier == TJOETSCHA)) //iedere seconde als de sproeier aanstaat.
  {
    lastSensorDisplay = millis();
    Serial.print(hours);
    Serial.print(":");
    Serial.print(minutes);
    Serial.print(":");
    Serial.print(seconds);
    Serial.print("\t");
    Serial.print("vocht sensor");
    Serial.println(sensorValue);
  }
  
  if (millis() - lastLedDisplay >= ledInterval) 
  {
    lastLedDisplay = millis();
    if (ledState == LOW)
    {ledState = HIGH;}
    else
    {ledState = LOW;}
  }
   
  
  
  // SCHAKEL MOMENTEN

  if ((hours == 0) && (minutes == 0) && (sensorValue < Droog) && (tuinSproeier == UIT)) 
  { 
    tuinSproeier = AAN;
  }

  if ((hours == 1) && (minutes == 0) && (sensorValue < Droog) && (tuinSproeier == UIT)) 
  { 
    tuinSproeier = AAN; 
  }

  if ((hours == 1) && (minutes == 0) && (sensorValue < Droog) && (tuinSproeier == TJOETSCHA)) 
  { 
    tuinSproeier = UIT; 
  }

  if ((hours == 0) && (minutes == 10) && (tuinSproeier == AAN)) 
  { 
    tuinSproeier = TJOETSCHA; 
  }

  if ((hours == 1) && (minutes == 10) && (tuinSproeier == AAN)) 
  { 
    tuinSproeier = TJOETSCHA; 
  }

  if ((sensorValue >= Nat) && (tuinSproeier == AAN))
  { 
    tuinSproeier = UIT; 
  }

  
  

  if (sensorValue <= Droog)
  {
  ledInterval = 500;  //have seconde betekent emergency
  }

  if (sensorValue > Droog)
  {
  ledInterval = 1000;
  }

  if (sensorValue >= bestwelDroog)
  {
  ledInterval = 2000;
  }

 if (sensorValue >= tussenNatDroog)
  {
  ledInterval = 3000;
  }
  
   if (sensorValue >= bestwelNat)
  {
  ledInterval = 4000;
  }
  
   if (sensorValue >= Nat)
  {
  ledInterval = 5000;
  }

  // execute de sproeier;
  if (tuinSproeier == AAN) digitalWrite(tuinslang, HIGH );
  if (tuinSproeier == TJOETSCHA) digitalWrite(tuinslang, LOW );
  if (tuinSproeier == UIT) digitalWrite(tuinslang, LOW );
  
  //onboard led_13. ledInterval per milliseconde.
    digitalWrite(ledPin, ledState);

  //bonus
  //if Droog, Nat tussenNatDroog
  //if (ledState etc
}



/*    CLOCK     */

void clock() 
{
  current_millis_value = millis();

  if (current_millis_value - previous_millis_value >= 1000) // subtraction + inequality
  {
    previous_millis_value = current_millis_value;

    seconds++;
    if (seconds == 60) 
    {
      minutes++;
      seconds = 0;
      if (minutes == 60)
      {
        hours++;
        minutes = 0;
        if (hours == 24)
        {
          days++;
          hours = 0;
          // these formulas are approximate
          if (days % 7 == 0) weeks++;
          if (days % 30 == 0) months++;
          if (days % 365 == 0)    // does not do leapyears yet
          {
            years++;
            days = 1;
            weeks = 1;
            months = 1;
          }
          if (years == 100)
          {
            centuries++;  // can do 4294967295 centuries == 30x age of universe
            years = 0;
          }
        }
      }
    }
  }
}

Nog niet helemaal perfect, but don't you worry.

web_toggle_knop_timer_kubota_20140113.ino (11.2 KB)

wc_kachel_timer_Corto_Maltese_20140112.ino (4.77 KB)

verlichting_vooronder_20140113.ino (7.29 KB)

effe laten weten dat we nog mee lezen.
Je schrijft

uint16_t days = 0;  // 365 does not fit an int.

maar dat klopt niet. Wat je vast bedoelt is

uint16_t days = 0;  // 365 does not fit a byte.

met vriendelijke groet
Jantje

Mijn remark is misgelopen.

[code/]
staat op de verkeerde plek.
Is er een manier om dat achteraf te vwranderen?

rikky:
Mijn remark is misgelopen.
[ code/]
staat op de verkeerde plek.
Is er een manier om dat achteraf te vwranderen?

I zie wel niet waar en ik denk dat het [ /code] in plaats van [code/] moet zijn; maar ja je kan dat veranderen (toch als het om een post op dit forum gaat :wink: )
Bij elke post die jij hebt gemaakt staat een modify. Click daarop en je kan je tekst helemaal aanpassen.
Indien het om een inhoudelijke aanpassing gaat vraagt de beleefdheid dat ook aan te duiden.
Met vriendelijke groet
Jantje

Done.
Merci bien.