#include "Timer.h"Timer t;int bovenLED = 6;int achterLED = 12;int winkelLED = 11;byte tvLED = 9;long knipperStart,knipperEind,knipperDuur;void setup() { pinMode(bovenLED, OUTPUT); pinMode(achterLED, OUTPUT); pinMode(winkelLED, OUTPUT); pinMode(tvLED, OUTPUT); program();}void program() { boven(); //waardes hieronder zijn de starttijden, tijdsduur staan in de functies t.after(120000,achter); t.after(240000,winkel); t.after(780000,achter); t.after(900000,boven); t.after(1080000,bovenMetTV); t.after(1500000,program);}void loop() { t.update();}void boven() { digitalWrite(bovenLED,HIGH); t.after(180000,bovenUit); //tijd uit}void bovenUit() { digitalWrite(bovenLED,LOW);}void achter() { digitalWrite(achterLED,HIGH); t.after(180000,achterUit); //tijd uit}void achterUit() { digitalWrite(achterLED,LOW);}void winkel() { digitalWrite(winkelLED,HIGH); t.after(600000,winkelUit); //tijd uit}void winkelUit() { digitalWrite(winkelLED,LOW);}void bovenMetTV() { digitalWrite(bovenLED,HIGH); t.after(300000,bovenUit); //tijd uit. Let op, moet inclusief knipperDuur hieronder zijn! knipperDuur = 180000; //hoe lang staat de TV aan static byte knipperHelderheid; knipperStart = millis()+60000; // starttijd van de TV knipperEind = knipperStart+knipperDuur; // eindtijd TV while (millis()<knipperEind) { knipperHelderheid = random(256); analogWrite(tvLED, knipperHelderheid); } digitalWrite(tvLED, LOW);}
byte leds[] = {3,6,9,10,11};long randOn;long randOff;int fadeAmount=5;long randLed;int randBrightness;int randFrequency;//variables for timerunsigned long timeStart;unsigned long timeEnd;unsigned long timeNow;unsigned long duration = 120000;long randNumber;void setup() {for (int led=0;led<sizeof(leds);led++){ pinMode(leds[led], OUTPUT); }}void flashingLight() { //random flash LED's 5 times for (int t=0;t<5;t++)//repeate 5 times { for (int i=0;i<sizeof(leds);i++) //as long as i is smalled than the number of LED's { randOn = random(sizeof(leds)); //pick a random pin digitalWrite(leds[randOn],HIGH); //put pin on high delay(30); //wait randOff = random(sizeof(leds)); // pick a random pin digitalWrite(leds[randOff],LOW); // put pin on low delay(30); } }}void fadeIn() { for (int i=0;i<sizeof(leds);i++){ digitalWrite(leds[i], LOW); // turn off all pins } for (int brightness=0; brightness <= 255; brightness=brightness+fadeAmount) { //for as long as brightness is not full for (int x=0; x<=4; x++){ analogWrite(leds[x], brightness); //loop through all leds to set brightness } delay(30); }}void flickeringLight() { randLed = random(sizeof(leds)); //pick a random pin randFrequency = random(5, 10); //pick a number of flickerings for (int x=0;x<randFrequency;x++){ randBrightness = random(50, 255); //pick a brightness level analogWrite(leds[randLed], randBrightness); //set brightness level to pin delay(50); } digitalWrite(leds[randLed], HIGH); //turn led back on}void highMidLow(){ int loopNr = 0; do{ for (int x=0; x<=4; x++){ int HMLBright = random(120, 255); analogWrite(leds[x], HMLBright); //set brightness to low level } delay(1500); loopNr++; }while (loopNr < 10);}void fadeOut() { for (int brightness=255; brightness >= 0; brightness=brightness-fadeAmount) { //for as long as brightness is not full for (int x=0; x<=4; x++){ analogWrite(leds[x], brightness); //loop through all leds to set brightness } delay(30); }}void loop() { flashingLight(); fadeIn(); timeStart = millis(); timeEnd = timeStart+duration; do{ highMidLow(); randNumber = random(2); if (randNumber == 1) { flickeringLight(); } timeNow = millis(); } while (timeNow < timeEnd); fadeOut(); delay(5000); }
/****************************************************************************** woonhuis_met_winkel v1 - Scene based light program for a huis with store Created by Timo Engelgeer (Septillion), November 23 2015 With a couple of wake up scenes and a couple of go to bed scenes including a TV. Controlles 3 sets of lights, LedBoven (upstairs), LedAchter (livingroom/kitchen?) and LedWinkel (the store)******************************************************************************/#include "Timer.h"#include <Bounce2.h>Timer t; //De timer voor alles//De aangesloten uitgangenconst byte LedBoven = 6;const byte LedAchter = 12;const byte LedWinkel = 11;const byte LedTv = 9;//Aangesloten knoppen, aangesloten tussen deze pin en GNDconst byte OpstaanPin = 2;const byte NaarBedPin = 3;//Knop object voor debounceBounce opstaan, naarBed;byte scene = 0; //Welke scene hebben we nu?const byte AantalScenes = 11;//Tv settingsconst unsigned int TvInterval[] = {500, 2000}; //minimale en maximale tijd tussen twee verscillende tv helderhedenconst byte TvHelderheid[] = {20, 255}; //minimale en maximale tv helderheid/*** Lisjt met scenes0 Nacht, we slapen en wachten om wakker te worden gemaakt1 Worden wakker, licht boven gaat aan2 Zijn naar beneden gelopen, licht achterhuis ook aan3 Zijn boven klaar, licht daar uit4 Tijd om de winkel te openen!5 Werkdag, we zijn in de winkel, licht achter uit. Nu wachten op naarBed6 Dag zit erop, licht achter aan7 Winkel dicht, licht uit8 Op naa boven, licht daar aan9 Zijn klaar beneden, licht achter uit10 We gaan nog even tv kijken boven11 Tv uit0 Nacht, licht uit en slapen, wachten om wakker gemaakt te worden*/void setup(){ pinMode(LedBoven, OUTPUT); pinMode(LedAchter, OUTPUT); pinMode(LedWinkel, OUTPUT); opstaan.attach(OpstaanPin, INPUT_PULLUP); naarBed.attach(NaarBedPin, INPUT_PULLUP);}void loop(){ t.update(); //zorg dat de timer blijft lopen //Als het scene 0 is moeten we kijken of we wakker willen worden if(scene == 0){ opstaan.update(); if(opstaan.fell()){ volgendeScene(); } } //Als het scene 5 is moeten we kijken of we naar bed willen gaan else if(scene == 5){ naarBed.update(); if(naarBed.fell()){ volgendeScene(); } } //Als het scene 10 is moeten we de tv updaten else if(scene == 10){ tvKijken(); }}void volgendeScene(){ scene++; //Volgende scene //Controleren of we nu niet naar een scene te veel gaan, andere terug naar de eerste. if(scene > AantalScenes){ scene = 0; } switch(scene){ case 0: digitalWrite(LedBoven, LOW); break; case 1: digitalWrite(LedBoven, HIGH); t.after(2 * 60 * 1000UL, volgendeScene); break; case 2: digitalWrite(LedAchter, HIGH); t.after(1 * 60 * 1000UL, volgendeScene); break; case 3: digitalWrite(LedBoven, LOW); t.after(1 * 60 * 1000UL, volgendeScene); break; case 4: digitalWrite(LedWinkel, HIGH); t.after(1 * 60 * 1000UL, volgendeScene); break; case 5: digitalWrite(LedAchter, LOW); break; case 6: digitalWrite(LedAchter, HIGH); t.after(1 * 60 * 1000UL, volgendeScene); break; case 7: digitalWrite(LedWinkel, LOW); t.after(2 * 60 * 1000UL, volgendeScene); break; case 8: digitalWrite(LedBoven, HIGH); t.after(1 * 60 * 1000UL, volgendeScene); break; case 9: digitalWrite(LedAchter, LOW); //goed, om de tv zo een beetje random te laten zijn moeten we de random functie voorzien van een random seed. //We lezen hiervoor de analoge pin 0 voor uit. Hierop zit niets aangesloten en is dus redelijk random randomSeed(analogRead(A0)); t.after(2 * 60 * 1000UL, volgendeScene); break; case 10: //we gaan hier tv kijken, wordt gedaan in de loop t.after(3 * 60 * 1000UL, volgendeScene); break; case 11: digitalWrite(LedTv, LOW); //dus hier wel ff de tv uit zetten t.after(2 * 60 * 1000UL, volgendeScene); break; }}//void tvKijken(){ static unsigned int millisVorigeKeer = 0; static unsigned int knipperTijd = 0; unsigned int millisNu = millis(); //Tijd om de helderheid van de tv aan te passen? if(millisNu - millisVorigeKeer >= knipperTijd){ //We doen dit nu dus de tijd nu opslaan voor de volgende keer millisVorigeKeer = millisNu; //Nieuwe random helderheid tussen min en max helderheid van TvHelderheid analogWrite(LedTv, random(TvHelderheid[0], TvHelderheid[1])); //Nu nog een nieuwe tijd bepalen wanneer de tv de volgende keer moet knipperen. Tijd tussen min en max van TvInterval knipperTijd = random(TvInterval[0], TvInterval[1]); }}
const int Minuten = 60*1000ULcase 1: digitalWrite(LedBoven, HIGH); t.after(2 * Minuten, volgendeScene); break;
#define MINUTEN *60*100UL
t.after(2 MINUTEN, volgendeScene);