Guten Abend
Ich bin gerade etwas am verzweifeln. Ich versuche mich schon seit einigen Wochen an einem Projekt wo ich dachte: ,,so schwer kann das doch nicht sein!`` Denkste, mittlerweile habe ich echt grossen Respekt vor Programmierern. Ich werde bestimmt nicht mehr motzen wenn ein Spiel nicht ganz einwandfrei läuft Ich habe sehr viel im Internet gesucht aber keine passende Lösung für mich gefunden, oder dann habe ich sie wohl nicht verstanden.
Mein Ziel wäre folgendes:
Ich möchte im Handlauf der Treppe ein Neopixel LED-Band einlassen (SK 6812, also eigentlich wie WS2812 aber halt RGBW). Ein Taster unten an der Treppe, einer oben an der Treppe.
Funktion:
Normalbetrieb nur mit weissem Licht:
Drückt man den Taster unten soll das Licht von unten nach oben einschalten (Lauflicht) und erst mal so bleiben. Dann geht man ja entweder die Treppe nach oben oder auch nicht, deswegen dann zwei Optionen.
- man drückt erneut den Taster unten, das Licht soll von oben nach unten ausschalten
- man drückt den Taster oben, das Licht soll einem folgen und von unten nach oben ausschalten.
Das ganze dann auch umgekehrt (Licht ist aus, man drückt oben, Licht geht von oben nach unten an, entweder oben noch einmal drücken oder unten)
Als kleiner Party Trick würde ich dann gerne durch langen Tastendruck einen Regenbogen starten und beenden.
Mein Problem ist vor allem, dass ich nicht verstehe wie ein Schalter mehrere Funktionen haben kann.
Einmal müsste ja das Licht von unten nach oben und wenn ich noch einmal drücke umgekehrt von oben nach unten.
Das ist bestimmt ein Anfänger Problem, weil mir die Basics fehlen. Aber mir fehlt leider etwas die Zeit mich da noch besser einzuarbeiten. Ich mache noch eine Weiterbildung zur Zeit und für beides reicht es im Moment nicht. Gerne würde ich aber bei dem Projekt auch einmal weiterkommen, weshalb ich nun hier gelandet bin.
Ich danke Euch auf jeden Fall schon für eure Hilfe.
Hier noch mein bisheriger Code:
#include <Adafruit_NeoPixel.h> // Vorprogrammierte Befehle für Neopixel
#define LED_PIN 6 // Welcher Anschluss ist am LED Band
#define LED_ANZAHL 40 // Wie viele NeoPixel hat das LED Band
#define HELLIGKEIT 50 // definiert die Helligkeit der einzelnen LED (zwischen 0 und max. 255)
// jede LED hat 20mA bei voller Helligkeit
// (max. ist 60mA wenn RGB voll an = weisses Licht durch mischen)
#define GESCHWINDIGKEIT 50 // Wie schnell das Licht wandert (Pause zwischen einzelnen LED in ms)
//Beschreibung vom LED Band:
Adafruit_NeoPixel strip(LED_ANZAHL, LED_PIN, NEO_GRBW + NEO_KHZ800);
// Hier werden die oben eingegbenen Werte verarbeitet (könnte man auch hier reinschreiben, oben ist es aber sauberer)
// Verdrahtung der Pixel (Wie ist das Band aufgebaut, die meisten sind GRB (nicht RGB, auch wenn sie überall so heissen)
// Frequenz des Bandes (meistens 800 kHz, kann auch 400 kHz sein)
int schalterZustandUnten = 0;
int schalterZustandOben = 0;
// die Variable schalterZustandUnten ist zuerst 0, ändert sich aber während betätigung des Schalters auf 1
// bis hier Grundeinstellungen
// ab hier Setup (Einstellung welche Pins Eingänge / Ausgänge)
void setup() {
pinMode (2,INPUT);
pinMode (4,INPUT);
// Bestimmt das Pin 2 und 4 Eingänge sind
strip.begin(); // Startet Neopixel
strip.show(); // Sendet Befehle an Neopixel
strip.setBrightness(HELLIGKEIT); // Helligkeit des Bandes auf obige Einstellung setzen
}
// ab hier Programm das ausgeführt wird
void loop() {
schalterZustandUnten = digitalRead (2); // überprüft den Zustand am Pin 2 und speichert diesen in der Variable (schalterZustandUnten)
schalterZustandOben = digitalRead (4); //dito
if (schalterZustandUnten == HIGH)
{
for(int unten=0; unten<LED_ANZAHL; unten++) { //Die Variabel unten ist 0 und kleiner als die LED Anzahl zähle +1
strip.setPixelColor(unten, strip.Color(0, 0, 0, HELLIGKEIT)); //unten = LED, also LED 0 beginnt weiss zu Leuchten, immer +1 bis LED Anzahl erreicht
strip.show(); // sende die info
delay(GESCHWINDIGKEIT); // Wie schnell das Licht von einer LED zur nächsten wandert
}
} // Alle Leuchten und warten bis Schalter Oben gedrückt wird
if (schalterZustandOben == HIGH)
{
for(int unten1=0; unten1<LED_ANZAHL; unten1++) { //Die Variabel unten1 ist 0 und kleiner als die LED Anzahl zähle +1
strip.setPixelColor(unten1, strip.Color(0, 0, 0, 0)); //unten1 = LED, also LED 0 bekommt als weiss den Wert 0 (aus), immer +1 bis LED Anzahl erreicht
strip.show();
delay(GESCHWINDIGKEIT);
}
}
}