Hallo zusammen,
kurz vorangestellt: Ich bin sowohl was Elektronik als auch Programmierung angeht lediglich mit angelesenen Einsteigerfähigkeiten ausgestattet, also seht es mir bitte nach, wenn ich blöde Fragen oder blöde Nachfragen stelle. Zu meinem Probelm: Ich möchte ein Modellhaus mittels Arduino (später Aty45) mit WS2812 (5 LEDs) beleuchten, und zwar über den unten angefügten Sketch, den ich von https://analog-h0.de/ habe. Angepasst habe ich bereits die Helligkeit, weil mir die Voreinstellungen erheblich zu hell waren. Jetzt möchte ich aber auch die Lichtfarbe ändern, weil mir das voreingestellte Weiß zu kalt ist. Nun finde ich absolut nicht die Stelle(n), wo ich das anpassen kann. Könntet ihr mir einen Tipp geben, wo und ggfls. wie ich das machen kann?
Hier der vorhandene Code:
/**
*** Beleuchtung eines Mehrparteinen-Wohnhauses mit TV Flimmern
*** Räume werden zufällig beleuchtet, es gibt eine Treppenhausbeleuchtung mit dem typischen Leuchtstoffröhren-Einschaltflackern, oder eine Simulation, die dem TV-Flackern ähnelt
***
*** Ansteuerung eines LED-Strang mit WS2812B mit Attiny85 oder Attiny45
*** CPU Clock mindestens auf 8Mhz stellen!
**/
#include <Adafruit_NeoPixel.h>
// diese Definitionen nach Geschmack anpassen
#define PIN 4 //Ausgabepin des Attiny
#define ANZAHL_RAEUME 5 //Anzahl der Räume im Haus
#define TREPPENHAUS 1 //Der Raum im Haus, der das Treppenhaus darstellt
#define PAUSE 50 //Pause zwischen den Schritten des Zeitzählers
#define TIMER_MAX 250 //Zeit für die nächste Raumauslosung (TIMER_MAX * PAUSE msec)
#define MSEKUNDEN 200 //Zeitvorgabe fuer die minimale Beleuchtungsdauer
#define RAND_TEIL 125 //Zufallszugabe für die Beleuchtungsdauer
#define ROOM_BRIGHTNESS 8 //Helligkeitseinstellung der LED's bei Raumbeleuchtung
#define TV_BRIGHTNESS 4 // Helligkeit des TV-Flimmerns
#define LS_ROEHRE 125 //msec für Leuchtstoffröhren-Flackern
// die folgenden Definitionen nicht anfassen!
#define LICHT_AUS 0
#define LICHT_AN 1
#define TV_AN 2
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(ANZAHL_RAEUME, PIN, NEO_GRB + NEO_KHZ800);
byte Room[ANZAHL_RAEUME];
byte Zeit = 0;
byte Counter = TIMER_MAX;
void setup() {
#if defined(__AVR_ATtiny85__) && (F_CPU == 16000000)
clock_prescale_set(clock_div_1);
#endif
// Initialisierung des Zufallsgenerators
#define SERIAL Serial
randomSeed(analogRead(0));
// Initialisierung der LED-Kette
pixels.begin();
// Alle LEDs abschalten
for (byte i = 0; i < ANZAHL_RAEUME; i++) {
pixels.setPixelColor(i, pixels.Color(0, 0, 0));
Room[i] = LICHT_AUS;
}
// LEDs ansteuern
pixels.show();
}
void loop() {
// LEDs ansteuern
pixels.show();
// Fernsehsimulation aufrufen und Treppenhausbeleuchtung prüfen
tvFlimmern();
// Prüfen, ob der Zeitintervall um ist
if (Counter == TIMER_MAX) {
Counter = 0;
// Raum auslosen
byte r = random(ANZAHL_RAEUME);
// Wenn das Treppenhaus ermittelt wurde, die LLeuchtstoffröhren-Simulation für den Raum aufrufen und den Timer starten
if (r == TREPPENHAUS) {
TreppenhausBeleuchtung();
}
else {
// prüfen, ob das Licht im Raum aus ist
if (Room[r] == LICHT_AUS) {
// falls ja, einmal würfeln
byte w = random(6);
// bei 0-3 geht nur das Licht an
if (w <= 3) {
pixels.setPixelColor(r, pixels.Color(ROOM_BRIGHTNESS, ROOM_BRIGHTNESS, ROOM_BRIGHTNESS)); //Leuchstärke der lED Farben festlegen
Room[r] = LICHT_AN;
}
// bei 4-5 geht der Fernseher an
else {
Room[r] = TV_AN;
}
}
// ist in dem Raum bereits eine Beleuchtung an, dann diese ausschalten
else{
pixels.setPixelColor(r, pixels.Color( 0, 0, 0));
Room[r] = LICHT_AUS;
}
}
}
// warten
delay(PAUSE);
// Zeitzähler hochzählen
Counter++;
}
void tvFlimmern() {
for (byte r = 0; r < ANZAHL_RAEUME; r++) {
// Dort, wo ein Fernseher laufen soll, für Flimmern sorgen
if (Room[r] == TV_AN) {
pixels.setPixelColor(r, pixels.Color(random(TV_BRIGHTNESS), random(TV_BRIGHTNESS), random(TV_BRIGHTNESS)));
}
// Timer im Treppenhaus prüfen und ggfs runterzählen
// wenn die Zeit abgelaufen ist, Licht ausschalten
if(r == TREPPENHAUS ){
// wenn die Zeit angelaufen ist, Licht abschalten
if((Zeit==0)&&(Room[r]==LICHT_AN)){
pixels.setPixelColor(r, pixels.Color( 0, 0, 0));
Room[r]=LICHT_AUS;
}
// Sonst Timer runterzählen
else{
Zeit--;
}
}
}
// LEDs ansteuern
pixels.show();
}
void TreppenhausBeleuchtung() {
// Einschaltflackern nur, wenn im Treppenhaus kein Licht brennt
if (Room[TREPPENHAUS] == LICHT_AUS) {
// dreimal blinken
for (byte i = 0; i < 3; i++) {
pixels.setPixelColor(TREPPENHAUS, pixels.Color(ROOM_BRIGHTNESS, ROOM_BRIGHTNESS, ROOM_BRIGHTNESS));
pixels.show();
delay(LS_ROEHRE);
pixels.setPixelColor(TREPPENHAUS, pixels.Color(0, 0, 0));
pixels.show();
delay(LS_ROEHRE);
}
// Licht einschalten und Timer starten
pixels.setPixelColor(TREPPENHAUS, pixels.Color(ROOM_BRIGHTNESS, ROOM_BRIGHTNESS, ROOM_BRIGHTNESS));
Room[TREPPENHAUS] = LICHT_AN;
Zeit = MSEKUNDEN+random(RAND_TEIL);
}
// LEDs ansteuern
pixels.show();
}