Anfängerfrage WS2812b AN/AUS über Schalter

Hallo Zusammen,

ich habe mit einem Arduino nano und der IDE angefangen WS2812b zu programmieren.
Soweit hat auch alles funktioniert, wie z.b. ein VU-Meter oder die Stripes mit vorgefertigten Sequenzen abspielen zulassen.

Jetzt wollte ich mich mal mit was eigenem versuchen.
Nur leider scheitere ich hier an der wohl wahrscheinlich einfachsten Aufgabe.

Als Aufgabe hatte ich mir gestellt, erstmal eine WS2812b LED über einen Schalter an und aus zuschalten, nur leider komme ich hier nach ausprobieren sämtlichen Varianten nicht zum Ergebnis.

Hier mal mein sketch zum Durchschauen.

#include <Adafruit_NeoPixel.h>

#define PIN     6 // Daten Pin
#define NUMPIXELS  8 // wieviele LED's sind am arduino angeschlossen

Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);

const int buttonPin = 2; // die Nummer vom TasterPin
int buttonState = 0; // in diese Variable wir der Schaltstatus zwischengespeichert

void setup() {

  pinMode(buttonPin, INPUT); // Setzt den TasterPin als Eingang
  pixels.begin();
  pixels.show();
}

void loop() {

  buttonState = digitalRead(buttonPin); //liest den Status vom Drucktastereingang

  if (buttonState == HIGH) { // am Schalteingang liegt ein HIGH Signal an
    pixels.setPixelColor (1, pixels.Color(0, 255, 0)); // Werte für die LED Nr.2

    pixels.show();   // schickt die eingetragenenen Werte ab
  }
  else {
    pixels.clear(); // schaltet die LED's ab
  }
}

Hier verhält es sich also so, das die zweite LED sofort leuchtet und der Schalter leider gar keine Funktion aufweist.

Für euch ist es sicherlich ein klacks. Ich bin leider mit meinem Latein am Ende.
Vielen Dank im Voraus…

Gruß Thomas

Hast Du einen PullDown-Widerstand von ca. 10 kOhm an Deinem Tasterpin nach GND?

Gruß Tommy

Nein habe ich nicht. Ich dacht da es bei dem VU-Meter auch ohne funktioniert hat beötige ich ihn hier auch erstmal nicht. Aber meiner Meinung nach, dürfte doch beim starten des arduino's ersmal gar keine LED leuchten. Erst wenn ich den eingang auf HIGH setze.

Freie Eingänge wirken wie Antennen und fangen alles (un)mögliche ein.

Gruß Tommy

Hallo,

für den Fall das Du keinen Widerstand hast, kannst Du den Schalter am pin und 0V anschliessen, dann gibt er 0V auf den Eingang. Dann verwendest Du den internen Pullup und drehst deine Logik um

Heinz

pinMode(buttonPin, INPUT_PULLUP); // Setzt den TasterPin als Eingang
.
.
.
buttonState = !digitalRead(buttonPin); //liest den Status , das "!" invertiert

Den 10kOhm Widerstand musste ich jetzt erstmal bestellen. Hätte nur einen 120 Ohm Widerstand hier gehabt.

Hallo Heinz

das werde ich gleich mal ausprobieren.

Vermutlich wird das nächste Problem, dass du über den Unterschied zwischen Schalter und Taster stolpern wirst. Nach dem aktuellen Sketch musst du nämlich den Taster dauerhaft gedrückt halten. Wahrscheinlich willst du aber mit jeweils einem (kurzzeitigen) Tastendruck die WS2812 ein- und wieder ausschalten.

[edit] Ergibt sich einfach aus der unterschiedlichen Benennung: Tasterpin im Sketch, Schalter hier im Thread...

Eigentlich wollte ich erstmal einen Schalter programmieren erschien mir am Anfang einfacher.
Hier auf meinem Schreibtisch halte ich auch nur zwei Drähte zusammen.

Soweit hat es jetzt auch funktioniert, nur geht beim loslassen die LED nicht aus.
Für mich heitßt es jetzt, dass die "else" Bedingung nicht funktioniert.

Da dürfte ein pixels.show() fehlen oder Du ziehst das vorhandene nach die schließende } vom else.

Gruß Tommy

Super, Danke! Jetzt klappt es wie gedacht. Was so Kleinigkeiten ausmachen...
Da muss man erstmal drauf kommen!

Jetzt kann ich nach und nach die nächsten Funktionen einbauen.
Ich melde mich bestimmt bald wieder!

Gruß Thomas