Ik maak in principe alle programma's zelf. Natuurlijk kijk ik wel naar voorbeelden op het Internet. Je moet het tenslotte ergens van leren.
Dit is de betreffende programma-code. In Arduino-termen de Sketch:
Code: Selecteer alles
// Flatgebouw verlichting
#include <Adafruit_NeoPixel.h>
// Which pin on the Arduino is connected to the NeoPixels?
#define Pin_Slaapkamer1 2
#define Pin_Keuken1 3
#define Pin_Woonkamer1a 4
#define Pin_Woonkamer1b 5
#define Pin_Slaapkamer2 6
#define Pin_Keuken2 7
#define Pin_Woonkamer2 8
#define Pin_Trappenhuis 9
// How many NeoPixels are attached to the Arduino?
#define Etages 8
#define KamerCount 8
#define Col_Slaapkamer1 0
#define Col_Keuken1 1
#define Col_Woonkamer1a 2
#define Col_Woonkamer1b 3
#define Col_Woonkamer2 4
#define Col_Keuken2 5
#define Col_Slaapkamer2 6
#define Col_Trappenhuis 7
// Declare our NeoPixel strip objects:
Adafruit_NeoPixel Kamers[] = {Adafruit_NeoPixel(Etages, Pin_Slaapkamer1, NEO_GRB + NEO_KHZ800),
Adafruit_NeoPixel(Etages, Pin_Keuken1, NEO_GRB + NEO_KHZ800),
Adafruit_NeoPixel(Etages, Pin_Woonkamer1a, NEO_GRB + NEO_KHZ800),
Adafruit_NeoPixel(Etages, Pin_Woonkamer1b, NEO_GRB + NEO_KHZ800),
Adafruit_NeoPixel(Etages, Pin_Slaapkamer2, NEO_GRB + NEO_KHZ800),
Adafruit_NeoPixel(Etages, Pin_Keuken2, NEO_GRB + NEO_KHZ800),
Adafruit_NeoPixel(Etages, Pin_Woonkamer2, NEO_GRB + NEO_KHZ800),
Adafruit_NeoPixel(Etages, Pin_Trappenhuis, NEO_GRB + NEO_KHZ800)};
// Argument 1 = Number of pixels in NeoPixel strip
// Argument 2 = Arduino pin number (most are valid)
// Argument 3 = Pixel type flags, add together as needed:
// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)
// setup() function -- runs once at startup --------------------------------
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
for (int i=0; i<4; i++) { //enkele secondes aftellen
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
digitalWrite(2, HIGH); // turn the LED on (HIGH is the voltage level)
delay(300); // wait for 3/10 second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
digitalWrite(2, LOW); // turn the LED off by making the voltage LOW
delay(700); // wait for 7/10 second
} // countdown
Serial.begin(57600);
for(int i=0; i<KamerCount; i++) { // For each strip...
Kamers[i].begin(); // INITIALIZE NeoPixel strip object (REQUIRED)
Kamers[i].show(); // Turn OFF all pixels ASAP
Kamers[i].setBrightness(80); // Set BRIGHTNESS to about 1/5 (max = 255)
}; // Alle strips initializeren
ShowAllColors();
randomSeed(analogRead(0));
} // setup
// loop() function -- runs repeatedly as long as board is on ---------------
void loop() {
int Kans_Slaapkamer=0;
int Kans_Keuken=0;
int Kans_Woonkamer=0;
int Kans_Trappenhuis=0;
int Kans=0;
int Rood = 0;
int Groen = 0;
int Blauw = 0;
int StapPauze = 200; // milliseconden
Serial.println("DagEnNacht");
// doorloop een dag en een nacht
for (int Uur=0; Uur<24; Uur++) { // alle uren
switch(Uur) {
case 0:
Kans_Slaapkamer=20;
Kans_Keuken=20;
Kans_Woonkamer=20;
Kans_Trappenhuis=100;
break;
case 1:
Kans_Slaapkamer=10;
Kans_Keuken=10;
Kans_Woonkamer=20;
Kans_Trappenhuis=100;
break;
case 2:
Kans_Slaapkamer=10;
Kans_Keuken=5;
Kans_Woonkamer=10;
Kans_Trappenhuis=100;
break;
case 3:
Kans_Slaapkamer=5;
Kans_Keuken=5;
Kans_Woonkamer=10;
Kans_Trappenhuis=100;
break;
case 4:
Kans_Slaapkamer=5;
Kans_Keuken=5;
Kans_Woonkamer=10;
Kans_Trappenhuis=100;
break;
case 5:
Kans_Slaapkamer=10;
Kans_Keuken=5;
Kans_Woonkamer=5;
Kans_Trappenhuis=100;
break;
case 6:
Kans_Slaapkamer=30;
Kans_Keuken=20;
Kans_Woonkamer=30;
Kans_Trappenhuis=100;
break;
case 7:
Kans_Slaapkamer=50;
Kans_Keuken=40;
Kans_Woonkamer=50;
Kans_Trappenhuis=80;
break;
case 8:
Kans_Slaapkamer=80;
Kans_Keuken=6;
Kans_Woonkamer=60;
Kans_Trappenhuis=60;
break;
case 9:
Kans_Slaapkamer=60;
Kans_Keuken=80;
Kans_Woonkamer=80;
Kans_Trappenhuis=0;
break;
case 10:
Kans_Slaapkamer=40;
Kans_Keuken=70;
Kans_Woonkamer=60;
Kans_Trappenhuis=0;
break;
case 11:
Kans_Slaapkamer=20;
Kans_Keuken=50;
Kans_Woonkamer=50;
Kans_Trappenhuis=0;
break;
case 12:
Kans_Slaapkamer=10;
Kans_Keuken=90;
Kans_Woonkamer=70;
Kans_Trappenhuis=0;
break;
case 13:
Kans_Slaapkamer=10;
Kans_Keuken=80;
Kans_Woonkamer=70;
Kans_Trappenhuis=0;
break;
case 14:
Kans_Slaapkamer=10;
Kans_Keuken=50;
Kans_Woonkamer=60;
Kans_Trappenhuis=0;
break;
case 15:
Kans_Slaapkamer=10;
Kans_Keuken=40;
Kans_Woonkamer=70;
Kans_Trappenhuis=0;
break;
case 16:
Kans_Slaapkamer=10;
Kans_Keuken=50;
Kans_Woonkamer=80;
Kans_Trappenhuis=0;
case 17:
Kans_Slaapkamer=20;
Kans_Keuken=70;
Kans_Woonkamer=90;
Kans_Trappenhuis=0;
break;
case 18:
Kans_Slaapkamer=30;
Kans_Keuken=90;
Kans_Woonkamer=90;
Kans_Trappenhuis=60;
break;
case 19:
Kans_Slaapkamer=40;
Kans_Keuken=80;
Kans_Woonkamer=90;
Kans_Trappenhuis=80;
break;
case 20:
Kans_Slaapkamer=60;
Kans_Keuken=70;
Kans_Woonkamer=90;
Kans_Trappenhuis=100;
break;
case 21:
Kans_Slaapkamer=80;
Kans_Keuken=50;
Kans_Woonkamer=80;
Kans_Trappenhuis=100;
break;
case 22:
Kans_Slaapkamer=90;
Kans_Keuken=30;
Kans_Woonkamer=70;
Kans_Trappenhuis=100;
break;
case 23:
Kans_Slaapkamer=50;
Kans_Keuken=20;
Kans_Woonkamer=60;
Kans_Trappenhuis=100;
break;
}; // switch Uur
Serial.print(Uur);
Serial.print(" ");
Serial.print(Kans_Slaapkamer);
Serial.print(" ");
Serial.print(Kans_Keuken);
Serial.print(" ");
Serial.print(Kans_Woonkamer);
Serial.print(" ");
Serial.print(Kans_Trappenhuis);
Serial.println();
for(int e=0; e<Etages; e++) { // For each Etage...
Kans = rand() % 100 + 1;
if (Kans_Slaapkamer>Kans) {
Rood = rand() % 100 + 80;
Groen = rand() % 100 + 80;
Blauw = rand() % 120 + 50;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Slaapkamer1].setPixelColor(e, Rood, Groen, Blauw); // On
Kamers[Col_Slaapkamer1].show(); // Update strip to match
delay(StapPauze); // Pause for a moment
Kans = rand() % 100 + 1;
if (Kans_Keuken>Kans) {
Rood = rand() % 50 + 200;
Groen = rand() % 50 + 200;
Blauw = rand() % 50 + 150;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Keuken1].setPixelColor(e, Rood, Groen, Blauw);
Kamers[Col_Keuken1].show(); // Update strip to match
delay(StapPauze); // Pause for a moment
Kans = rand() % 100 + 1;
if (Kans_Woonkamer>Kans) {
Rood = rand() % 100 + 155;
Groen = rand() % 100 + 150;
Blauw = rand() % 50 + 50;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Woonkamer1a].setPixelColor(e, Rood, Groen, Blauw);
Kamers[Col_Woonkamer1a].show(); // Update strip to match
delay(StapPauze); // Pause for a moment
Kans = rand() % 100 + 1;
if (Kans_Woonkamer>Kans) {
Rood = rand() % 150 + 100;
Groen = rand() % 150 + 100;
Blauw = rand() % 50 + 50;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Woonkamer1b].setPixelColor(e, Rood, Groen, Blauw);
Kamers[Col_Woonkamer1b].show(); // Update strip to match
delay(StapPauze); // Pause for a moment
Kans = rand() % 100 + 1;
if (Kans_Slaapkamer>Kans) {
Rood = rand() % 100 + 150;
Groen = rand() % 100 + 150;
Blauw = rand() % 100 + 100;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Slaapkamer2].setPixelColor(e, Rood, Groen, Blauw);
Kamers[Col_Slaapkamer2].show(); // Update strip to match
delay(StapPauze); // Pause for a moment
Kans = rand() % 100 + 1;
if (Kans_Keuken>Kans) {
Rood = rand() % 50 + 200;
Groen = rand() % 50 + 200;
Blauw = rand() % 50 + 150;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Keuken2].setPixelColor(e, Rood, Groen, Blauw);
Kamers[Col_Keuken2].show(); // Update strip to match
delay(StapPauze); // Pause for a moment
Kans = rand() % 100 + 1;
if (Kans_Woonkamer>Kans) {
Rood = rand() % 150 + 100;
Groen = rand() % 150 + 100;
Blauw = rand() % 50 + 80;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Woonkamer2].setPixelColor(e, Rood, Groen, Blauw);
Kamers[Col_Woonkamer2].show(); // Update strip to match
delay(StapPauze); // Pause for a moment
} // Each Etage
Kans = rand() % 100 + 1;
for(int e=0; e<Etages; e++) { // For each Etage...
if (Kans_Trappenhuis>=Kans) {
Rood = 127;
Groen = 127;
Blauw = 100;
}
else {
Rood = 0;
Groen = 0;
Blauw = 0;
}
Kamers[Col_Trappenhuis].setPixelColor(e, Rood, Groen, Blauw);
Kamers[Col_Trappenhuis].show();
} // Each Etage
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for 3/10 second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(100); // wait for 7/10 second
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(100); // wait for 3/10 second
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(700); // wait for 7/10 second
} // alle uren
} // loop
void ShowAllColors(){
for(int i=0; i<KamerCount; i++) { // For each strip...
for(int j=0; j<Kamers[i].numPixels(); j++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(255, 0, 0)); // Red
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
for(int j=0; j<Kamers[i].numPixels(); j++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(0, 255, 0)); // Green
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
for(int j=0; j<Kamers[i].numPixels(); j++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(0, 0, 255)); // Blue
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
for(int j=0; j<Kamers[i].numPixels(); j++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(0, 0, 0)); // Off
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
}; // Each strip
for(int j=0; j<Etages; j++) { // For each Etage...
for(int i=0; i<KamerCount; i++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(255, 0, 0)); // Red
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
for(int i=0; i<KamerCount; i++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(0, 255, 0)); // Green
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
for(int i=0; i<KamerCount; i++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(0, 0, 255)); // Blue
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
for(int i=0; i<KamerCount; i++) { // For each pixel in strip...
Kamers[i].setPixelColor(j, Kamers[i].Color(0, 0, 0)); // Off
Kamers[i].show(); // Update strip to match
delay(50); // Pause for a moment
};
}; // Each Etage
}; // ShowAllColors
Een array 'kamer' in het programma komt overeen met een kolom boven elkaar liggende ramen in het gebouw. Dit is een stripje van 7 of 8 leds die ik in een plastic kolom heb ingebouwd.
Het programma begint om alle leds per kolom en per etage de basis-kleuren rood, groen en blauw te laten zien. Dit ter controle of alle leds werken.