Zon simulatie voor terrarium

Toon hier Uw afgeronde projecten aan anderen.
Berichten: 9
Geregistreerd: 26 Jun 2013, 21:14

Zon simulatie voor terrarium

Berichtdoor jordan.altena » 08 Sep 2013, 07:33

Goedendag allemaal,
Dit is mijn eerste "echte" programma wat ik heb gemaakt (stukken van internet samenvoegen en aanpassingen van mij).
Hiervoor ben ik eigenlijk z'n beetje begonnen met Arduino.
Het Arduino bord stuurt een RGB-led strip aan tussen 6 uur en 19 uur simuleert hij een opkomende zon hierna gaat hij over in de de volle zon hier blijft op tot 19 uur.
Na 19 uur simuleert hij een ondergaande zon en deze gaat over in een maanlicht.
Om 7 uur word er nog een relais geschakeld, deze is voor een warmtelamp en een UV-lamp.
Het programma zal denk ik wel verbeterd kunnen worden, maar voor nu werkt hij.
Graag hoor ik nog reacties en opmerkingen voor de toekomst.

Code: Alles selecteren
/*
  Fade RGB LED like the sun (sunrise, full sun, sunset, moonlight)
  And control a relay teh heat and UV lamp
 
  Connect an RGB LED with appropriate resistors and mosfet on each anode to your Arduino;
  Red to pin 9, Green to pin 10, Blue to pin 11, Cathode to GND.
 
  Connect the RTC SDA to pin A4 ans SCL to pin A5
 
  Connect the relay to pin 12
 
  Developed for Arduino Uno by Jordan Altena
  With some help off the internet.
   
 */
 
 #include <DS1307new.h>             // RTC
 #include <Wire.h>                  // For some strange reasons, Wire.h must be included here
 
// voor de RTC
uint16_t startAddr = 0x0000;            // Start address to store in the NV-RAM
uint16_t lastAddr;                      // new address for storing in NV-RAM
uint16_t TimeIsSet = 0xaa55;            // Helper that time must not set again
#define uur_aan 7                       // Time for UV Heat and UV-lamp on (hour)
#define minuut_aan 00                   // Time for UV Heat and UV-lamp on (minute)
#define uur_uit 19                      // Time for UV Heat and UV-lamp off (hour)
#define minuut_uit 00                   // Time for UV Heat and UV-lamp off (minute)
#define instellen_klok_datum 2013,9,4  // Set date year,month,day
#define instellen_klok_tijd 19,21,00      // set time hour,minute,seconds

// Assign LED Output PWM Pins
int Red = 9;
int Green = 10;
int Blue = 11;

// Relay pin 12
int relay01 = 12;                 

//Set Initial Values
int RedVal = 0;
int GreenVal = 0;
int BlueVal = 0;
int fade = 3530;  // Delay Time approximately 15 minutes (15 => 900000milisec. 255 steps color. 90000000/255= 3529,41)
// int fade = 120;  // Delay Time approximately 15 minutes (15 => 900000milisec. 255 steps color. 90000000/255= 3529,41)

// Sunrise
int RedVal1 = 212;
int GreenVal1 = 101;
int BlueVal1 = 36;

// Full sun
int RedVal2 = 255;
int GreenVal2 = 255;
int BlueVal2 = 255;

// Sunset
int RedVal3 = 255;
int GreenVal3 = 20;
int BlueVal3 = 120;

// Moonlight
int RedVal4 = 0;
int GreenVal4 = 0;
int BlueVal4 = 120;

//Set initial mode (Colour Value Mode)
int mode = 0;

void setup()
{

 //----------------------- Assign outputs
   pinMode(Red, OUTPUT);
   pinMode(Green, OUTPUT);
   pinMode(Blue, OUTPUT);
   pinMode(relay01, OUTPUT);
   pinMode (17, OUTPUT);   // +5v for DS1307 RTC on analog 4 (digital 17)
   pinMode (16, OUTPUT);   // Ground for DS1307 on analog 3 (digital 16)
 //----------------------- Write Initial Values of 0 to outputs
   analogWrite(Red, RedVal);
   analogWrite(Green, GreenVal);
   analogWrite(Blue, BlueVal);
   digitalWrite (17, HIGH);   // tell pin 17 to be +5v
   digitalWrite (16, LOW);    // tell pin 16 to be Ground
//------------------------ RTC
  pinMode(2, INPUT);          // Test of the SQW pin, D2 = INPUT
  digitalWrite(2, HIGH);      // Test of the SQW pin, D2 = Pullup on

  Serial.begin(9600);
 

/*
   PLEASE NOTICE: WE HAVE MADE AN ADDRESS SHIFT FOR THE NV-RAM!!!
                  NV-RAM ADDRESS 0x08 HAS TO ADDRESSED WITH ADDRESS 0x00=0
                  TO AVOID OVERWRITING THE CLOCK REGISTERS IN CASE OF
                  ERRORS IN YOUR CODE. SO THE LAST ADDRESS IS 0x38=56!
*/
  RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));// Store startAddr in NV-RAM address 0x08

/*
   Uncomment the next 2 lines if you want to SET the clock
   Comment them out if the clock is set.
   DON'T ASK ME WHY: YOU MUST UPLOAD THE CODE TWICE TO LET HIM WORK
   AFTER SETTING THE CLOCK ONCE.
*/
//  TimeIsSet = 0xffff;
//  RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t)); 

/*
  Control the clock.
  Clock will only be set if NV-RAM Address does not contain 0xaa.
  DS1307 should have a battery backup.
*/
  RTC.getRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
  if (TimeIsSet != 0xaa55)
  {
    RTC.stopClock();
       
    RTC.fillByYMD(instellen_klok_datum);
    RTC.fillByHMS(instellen_klok_tijd);
   
    RTC.setTime();
    TimeIsSet = 0xaa55;
    RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
    RTC.startClock();
  }
  else
  {
    RTC.getTime();
  }

/*
   Control Register for SQW pin which can be used as an interrupt.
*/
  RTC.ctrl = 0x00;                      // 0x00=disable SQW pin, 0x10=1Hz,
                                        // 0x11=4096Hz, 0x12=8192Hz, 0x13=32768Hz
  RTC.setCTRL();

// Set initial mode (Colour Value Mode) (1 = sunrise, 3 = sunset)
if (RTC.hour >= 6 && RTC.hour < 19)
{
mode = 1;
}
else {
mode = 3;
}
}

void loop()                            // Begin Main Program Loop

{
  RTC.getTime();
  Serial.print(RTC.hour, DEC);
  Serial.print(":");
  Serial.print(RTC.minute, DEC);
  Serial.println("");

//set heat and UV-lamp
  if (RTC.hour >= uur_aan && RTC.hour < uur_uit){
    digitalWrite(relay01, HIGH);
}
  else {
    digitalWrite(relay01, LOW);
  }

// LCD sun simulation
  RTC.getTime();
  if (RTC.hour >= 6 && RTC.hour < 19 && mode == 1)
                {
                zonop();                // Sunrise
                }
  else if (RTC.hour >= 6 && RTC.hour < 19 && mode == 2){
      vollezon();             //full sun
      }
  else if (RTC.hour <6 && mode == 3 || RTC.hour>= 19 && mode == 3){
                schemering();          //sunset
                }
  else if (RTC.hour <6 && mode == 4 || RTC.hour >= 19 && mode == 4){
      maanlicht();           //moonlight
      }
      
   }

// Sunrise
void zonop()
{
    Serial.println("Zon op");
    RTC.getTime();   
    mode = 1;
    if(RedVal < RedVal1){              // If RedVal is less than desired RedVal1
      RedVal ++;                       // increment RedVal
    } else if(RedVal > RedVal1){       // If RedVal is more than desired RedVal1
      RedVal --;                       // decrement RedVal
    } else if(RedVal == RedVal1){      // If RedVal is equal to desired RedVal1
      //Do Nothing
    }
                                       // Repeated as above for BlueVal
    if(BlueVal < BlueVal1){
      BlueVal ++;
    } else if(BlueVal > BlueVal1){
      BlueVal --;
    } else if(BlueVal == BlueVal1){
      //Do Nothing
    }
      // Repeated as above for GreenVal
    if(GreenVal < GreenVal1){
      GreenVal ++;
    } else if (GreenVal > GreenVal1){
      GreenVal --;
    } else if (GreenVal == GreenVal1){
      // Do Nothing
    }
      // Now we have a new set of values, we write them to the PWM Pins.
    analogWrite(Red, RedVal);
    analogWrite(Green, GreenVal);
    analogWrite(Blue, BlueVal);
    delay(fade);
     
    if(RedVal == RedVal1 && GreenVal == GreenVal1 && BlueVal == BlueVal1){    // If RedVal & GreenVal & BlueVal are all at the desired values
      delay(500);                                                             // Delay to hold this colour for a little while
       mode = 2;                                                              // Change the mode to the next colour. Exiting this while loop and into the next one
  }
   
}

// full sun
    void vollezon()
    {
    Serial.println("Volle Zon");
    RTC.getTime();   
    mode = 2;
    if(RedVal < RedVal2){
      RedVal ++;                     
    } else if(RedVal > RedVal2){
      RedVal --;                     
    } else if(RedVal == RedVal2){
      //Do Nothing
    }

    if(BlueVal < BlueVal2){
      BlueVal ++;
    } else if(BlueVal > BlueVal2){
      BlueVal --;
    } else if(BlueVal == BlueVal2){
      //Do Nothing
    }

    if(GreenVal < GreenVal2){
      GreenVal ++;
    } else if (GreenVal > GreenVal2){
      GreenVal --;
    } else if (GreenVal == GreenVal2){
      // Do Nothing
    }

    analogWrite(Red, RedVal);
    analogWrite(Green, GreenVal);
    analogWrite(Blue, BlueVal);
    delay(fade);

    if(RedVal == RedVal2 && GreenVal == GreenVal2 && BlueVal == BlueVal2){
      delay(500);
      mode = 3;
     }
     }

// Sunset
void schemering()
{
    Serial.println("Schemering");
    RTC.getTime();   
    mode = 3;
    if(RedVal < RedVal3){
      RedVal ++;
    } else if(RedVal > RedVal3){
      RedVal --;
    } else if(RedVal == RedVal3){
      //Do Nothing
    }

    if(BlueVal < BlueVal3){
      BlueVal ++;
    } else if(BlueVal > BlueVal3){
      BlueVal --;
    } else if(BlueVal == BlueVal3){
      //Do Nothing
    }

    if(GreenVal < GreenVal3){
      GreenVal ++;
    } else if (GreenVal > GreenVal3){
      GreenVal --;
    } else if (GreenVal == GreenVal3){
      // Do Nothing
    }

    analogWrite(Red, RedVal);
    analogWrite(Green, GreenVal);
    analogWrite(Blue, BlueVal);
    delay(fade);

    if(RedVal == RedVal3 && GreenVal == GreenVal3 && BlueVal == BlueVal3){
    Serial.println("Schemering klaar");
      delay(500);
      mode = 4;
      //break;
        }
}

// Moonlight
void maanlicht()
    {
    Serial.println("Maanlicht");
    RTC.getTime();   
    mode = 4;
    if(RedVal < RedVal4){
      RedVal ++;
    } else if(RedVal > RedVal4){
      RedVal --;
    } else if(RedVal == RedVal4){
      //Do Nothing
    }

    if(BlueVal < BlueVal4){
      BlueVal ++;
    } else if(BlueVal > BlueVal4){
      BlueVal --;
    } else if(BlueVal == BlueVal4){
      //Do Nothing
    }

    if(GreenVal < GreenVal4){
      GreenVal ++;
    } else if (GreenVal > GreenVal4){
      GreenVal --;
    } else if (GreenVal == GreenVal4){
      // Do Nothing
    }

    analogWrite(Red, RedVal);
    analogWrite(Green, GreenVal);
    analogWrite(Blue, BlueVal);
    delay(fade);

    if(RedVal == RedVal4 && GreenVal == GreenVal4 && BlueVal == BlueVal4){
      delay(500);
      Serial.println("Maanlicht klaar");
      mode = 1;                                 // Set mode back to 1 to return to the original colour.
     //break;
    }
  }
     

Advertisement

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

Re: Zon simulatie voor terrarium

Berichtdoor pjh » 08 Sep 2013, 13:00

Fijn dat het allemaal werkt. Doet de mens goed: dingen die het doen.
Ik wist niet dat er een RTCnew library was voor de DS1307 Real Time Clock -IC. Ga ik naar kijken.
Wat me wel opvalt in je sketch is dat je twee manieren van timen gebruikt.
1) De RTC-klok bepaalt wanneer het relais voor de UV schakelt en wanneer de vier verschillende episoden van licht ingaan (opkomende zon, volle zon, ondergaande zon en maanlicht).
2) De interne timer (via de delay-functie) regeld vervolgens de fade van de RGB-LED strip.

Dat komt wat onlogisch over. Maar aan de andere kant doe ikzelf niets anders dan "brokken" van andere combineren tot werkzame stukken. En als het dan werkt begint de eigenlijke fun pas: verbeteren om te begrijpen.

Wat je eerste aandacht hierin zou kunnen vormen is het volgende:
Je gebruikt nergens in je sketch de seconden van je DS1307 klok. Heb je deze wel, dan heb je mooi 1/86.400-ste van een dag.

Berichten: 1
Geregistreerd: 14 Nov 2015, 18:43

Re: Zon simulatie voor terrarium

Berichtdoor borddan » 07 Feb 2018, 19:26

jordan.altena schreef:Goedendag allemaal,
Dit is mijn eerste "echte" programma wat ik heb gemaakt (stukken van internet samenvoegen en aanpassingen van mij).
Hiervoor ben ik eigenlijk z'n beetje begonnen met Arduino.
Het Arduino bord stuurt een RGB-led strip aan tussen 6 uur en 19 uur simuleert hij een opkomende zon hierna gaat hij over in de de volle zon hier blijft op tot 19 uur.
Na 19 uur simuleert hij een ondergaande zon en deze gaat over in een maanlicht.
Om 7 uur word er nog een relais geschakeld, deze is voor een warmtelamp en een UV-lamp.
Het programma zal denk ik wel verbeterd kunnen worden, maar voor nu werkt hij.
Graag hoor ik nog reacties en opmerkingen voor de toekomst.

Code: Alles selecteren
/*
  Fade RGB LED like the sun (sunrise, full sun, sunset, moonlight)
  And control a relay teh heat and UV lamp
 
  Connect an RGB LED with appropriate resistors and mosfet on each anode to your Arduino;
  Red to pin 9, Green to pin 10, Blue to pin 11, Cathode to GND.
 
  Connect the RTC SDA to pin A4 ans SCL to pin A5
 
  Connect the relay to pin 12
 
  Developed for Arduino Uno by Jordan Altena
  With some help off the internet.
   
 */
 
 #include <DS1307new.h>             // RTC
 #include <Wire.h>                  // For some strange reasons, Wire.h must be included here
 
// voor de RTC
uint16_t startAddr = 0x0000;            // Start address to store in the NV-RAM
uint16_t lastAddr;                      // new address for storing in NV-RAM
uint16_t TimeIsSet = 0xaa55;            // Helper that time must not set again
#define uur_aan 7                       // Time for UV Heat and UV-lamp on (hour)
#define minuut_aan 00                   // Time for UV Heat and UV-lamp on (minute)
#define uur_uit 19                      // Time for UV Heat and UV-lamp off (hour)
#define minuut_uit 00                   // Time for UV Heat and UV-lamp off (minute)
#define instellen_klok_datum 2013,9,4  // Set date year,month,day
#define instellen_klok_tijd 19,21,00      // set time hour,minute,seconds

// Assign LED Output PWM Pins
int Red = 9;
int Green = 10;
int Blue = 11;

// Relay pin 12
int relay01 = 12;                 

//Set Initial Values
int RedVal = 0;
int GreenVal = 0;
int BlueVal = 0;
int fade = 3530;  // Delay Time approximately 15 minutes (15 => 900000milisec. 255 steps color. 90000000/255= 3529,41)
// int fade = 120;  // Delay Time approximately 15 minutes (15 => 900000milisec. 255 steps color. 90000000/255= 3529,41)

// Sunrise
int RedVal1 = 212;
int GreenVal1 = 101;
int BlueVal1 = 36;

// Full sun
int RedVal2 = 255;
int GreenVal2 = 255;
int BlueVal2 = 255;

// Sunset
int RedVal3 = 255;
int GreenVal3 = 20;
int BlueVal3 = 120;

// Moonlight
int RedVal4 = 0;
int GreenVal4 = 0;
int BlueVal4 = 120;

//Set initial mode (Colour Value Mode)
int mode = 0;

void setup()
{

 //----------------------- Assign outputs
   pinMode(Red, OUTPUT);
   pinMode(Green, OUTPUT);
   pinMode(Blue, OUTPUT);
   pinMode(relay01, OUTPUT);
   pinMode (17, OUTPUT);   // +5v for DS1307 RTC on analog 4 (digital 17)
   pinMode (16, OUTPUT);   // Ground for DS1307 on analog 3 (digital 16)
 //----------------------- Write Initial Values of 0 to outputs
   analogWrite(Red, RedVal);
   analogWrite(Green, GreenVal);
   analogWrite(Blue, BlueVal);
   digitalWrite (17, HIGH);   // tell pin 17 to be +5v
   digitalWrite (16, LOW);    // tell pin 16 to be Ground
//------------------------ RTC
  pinMode(2, INPUT);          // Test of the SQW pin, D2 = INPUT
  digitalWrite(2, HIGH);      // Test of the SQW pin, D2 = Pullup on

  Serial.begin(9600);
 

/*
   PLEASE NOTICE: WE HAVE MADE AN ADDRESS SHIFT FOR THE NV-RAM!!!
                  NV-RAM ADDRESS 0x08 HAS TO ADDRESSED WITH ADDRESS 0x00=0
                  TO AVOID OVERWRITING THE CLOCK REGISTERS IN CASE OF
                  ERRORS IN YOUR CODE. SO THE LAST ADDRESS IS 0x38=56!
*/
  RTC.setRAM(0, (uint8_t *)&startAddr, sizeof(uint16_t));// Store startAddr in NV-RAM address 0x08

/*
   Uncomment the next 2 lines if you want to SET the clock
   Comment them out if the clock is set.
   DON'T ASK ME WHY: YOU MUST UPLOAD THE CODE TWICE TO LET HIM WORK
   AFTER SETTING THE CLOCK ONCE.
*/
//  TimeIsSet = 0xffff;
//  RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t)); 

/*
  Control the clock.
  Clock will only be set if NV-RAM Address does not contain 0xaa.
  DS1307 should have a battery backup.
*/
  RTC.getRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
  if (TimeIsSet != 0xaa55)
  {
    RTC.stopClock();
       
    RTC.fillByYMD(instellen_klok_datum);
    RTC.fillByHMS(instellen_klok_tijd);
   
    RTC.setTime();
    TimeIsSet = 0xaa55;
    RTC.setRAM(54, (uint8_t *)&TimeIsSet, sizeof(uint16_t));
    RTC.startClock();
  }
  else
  {
    RTC.getTime();
  }

/*
   Control Register for SQW pin which can be used as an interrupt.
*/
  RTC.ctrl = 0x00;                      // 0x00=disable SQW pin, 0x10=1Hz,
                                        // 0x11=4096Hz, 0x12=8192Hz, 0x13=32768Hz
  RTC.setCTRL();

// Set initial mode (Colour Value Mode) (1 = sunrise, 3 = sunset)
if (RTC.hour >= 6 && RTC.hour < 19)
{
mode = 1;
}
else {
mode = 3;
}
}

void loop()                            // Begin Main Program Loop

{
  RTC.getTime();
  Serial.print(RTC.hour, DEC);
  Serial.print(":");
  Serial.print(RTC.minute, DEC);
  Serial.println("");

//set heat and UV-lamp
  if (RTC.hour >= uur_aan && RTC.hour < uur_uit){
    digitalWrite(relay01, HIGH);
}
  else {
    digitalWrite(relay01, LOW);
  }

// LCD sun simulation
  RTC.getTime();
  if (RTC.hour >= 6 && RTC.hour < 19 && mode == 1)
                {
                zonop();                // Sunrise
                }
  else if (RTC.hour >= 6 && RTC.hour < 19 && mode == 2){
      vollezon();             //full sun
      }
  else if (RTC.hour <6 && mode == 3 || RTC.hour>= 19 && mode == 3){
                schemering();          //sunset
                }
  else if (RTC.hour <6 && mode == 4 || RTC.hour >= 19 && mode == 4){
      maanlicht();           //moonlight
      }
      
   }

// Sunrise
void zonop()
{
    Serial.println("Zon op");
    RTC.getTime();   
    mode = 1;
    if(RedVal < RedVal1){              // If RedVal is less than desired RedVal1
      RedVal ++;                       // increment RedVal
    } else if(RedVal > RedVal1){       // If RedVal is more than desired RedVal1
      RedVal --;                       // decrement RedVal
    } else if(RedVal == RedVal1){      // If RedVal is equal to desired RedVal1
      //Do Nothing
    }
                                       // Repeated as above for BlueVal
    if(BlueVal < BlueVal1){
      BlueVal ++;
    } else if(BlueVal > BlueVal1){
      BlueVal --;
    } else if(BlueVal == BlueVal1){
      //Do Nothing
    }
      // Repeated as above for GreenVal
    if(GreenVal < GreenVal1){
      GreenVal ++;
    } else if (GreenVal > GreenVal1){
      GreenVal --;
    } else if (GreenVal == GreenVal1){
      // Do Nothing
    }
      // Now we have a new set of values, we write them to the PWM Pins.
    analogWrite(Red, RedVal);
    analogWrite(Green, GreenVal);
    analogWrite(Blue, BlueVal);
    delay(fade);
     
    if(RedVal == RedVal1 && GreenVal == GreenVal1 && BlueVal == BlueVal1){    // If RedVal & GreenVal & BlueVal are all at the desired values
      delay(500);                                                             // Delay to hold this colour for a little while
       mode = 2;                                                              // Change the mode to the next colour. Exiting this while loop and into the next one
  }
   
}

// full sun
    void vollezon()
    {
    Serial.println("Volle Zon");
    RTC.getTime();   
    mode = 2;
    if(RedVal < RedVal2){
      RedVal ++;                     
    } else if(RedVal > RedVal2){
      RedVal --;                     
    } else if(RedVal == RedVal2){
      //Do Nothing
    }

    if(BlueVal < BlueVal2){
      BlueVal ++;
    } else if(BlueVal > BlueVal2){
      BlueVal --;
    } else if(BlueVal == BlueVal2){
      //Do Nothing
    }

    if(GreenVal < GreenVal2){
      GreenVal ++;
    } else if (GreenVal > GreenVal2){
      GreenVal --;
    } else if (GreenVal == GreenVal2){
      // Do Nothing
    }

    analogWrite(Red, RedVal);
    analogWrite(Green, GreenVal);
    analogWrite(Blue, BlueVal);
    delay(fade);

    if(RedVal == RedVal2 && GreenVal == GreenVal2 && BlueVal == BlueVal2){
      delay(500);
      mode = 3;
     }
     }

// Sunset
void schemering()
{
    Serial.println("Schemering");
    RTC.getTime();   
    mode = 3;
    if(RedVal < RedVal3){
      RedVal ++;
    } else if(RedVal > RedVal3){
      RedVal --;
    } else if(RedVal == RedVal3){
      //Do Nothing
    }

    if(BlueVal < BlueVal3){
      BlueVal ++;
    } else if(BlueVal > BlueVal3){
      BlueVal --;
    } else if(BlueVal == BlueVal3){
      //Do Nothing
    }

    if(GreenVal < GreenVal3){
      GreenVal ++;
    } else if (GreenVal > GreenVal3){
      GreenVal --;
    } else if (GreenVal == GreenVal3){
      // Do Nothing
    }

    analogWrite(Red, RedVal);
    analogWrite(Green, GreenVal);
    analogWrite(Blue, BlueVal);
    delay(fade);

    if(RedVal == RedVal3 && GreenVal == GreenVal3 && BlueVal == BlueVal3){
    Serial.println("Schemering klaar");
      delay(500);
      mode = 4;
      //break;
        }
}

// Moonlight
void maanlicht()
    {
    Serial.println("Maanlicht");
    RTC.getTime();   
    mode = 4;
    if(RedVal < RedVal4){
      RedVal ++;
    } else if(RedVal > RedVal4){
      RedVal --;
    } else if(RedVal == RedVal4){
      //Do Nothing
    }

    if(BlueVal < BlueVal4){
      BlueVal ++;
    } else if(BlueVal > BlueVal4){
      BlueVal --;
    } else if(BlueVal == BlueVal4){
      //Do Nothing
    }

    if(GreenVal < GreenVal4){
      GreenVal ++;
    } else if (GreenVal > GreenVal4){
      GreenVal --;
    } else if (GreenVal == GreenVal4){
      // Do Nothing
    }

    analogWrite(Red, RedVal);
    analogWrite(Green, GreenVal);
    analogWrite(Blue, BlueVal);
    delay(fade);

    if(RedVal == RedVal4 && GreenVal == GreenVal4 && BlueVal == BlueVal4){
      delay(500);
      Serial.println("Maanlicht klaar");
      mode = 1;                                 // Set mode back to 1 to return to the original colour.
     //break;
    }
  }
     

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

Re: Zon simulatie voor terrarium

Berichtdoor shooter » 07 Feb 2018, 21:01

Inderdaad ik zou die delays vervangen door timers en dan die functies telkens aanroepen tot de mode weer goed is, dat heeft het voordeel dat de loop sneller gaat, en je niet hoeft te wachten tot de mode verandert of de tijd.
paul deelen
shooter@home.nl

Terug naar Afgeronde projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 1 gast