timer ofzo.

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