INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
WS2812B Strip mit Schalter Ein und Aus schalten
10.03.2020, 16:16 (Dieser Beitrag wurde zuletzt bearbeitet: 10.03.2020 22:50 von TimoGoGoGo.)
Beitrag #1
WS2812B Strip mit Schalter Ein und Aus schalten
Hallo zusammen. Ich habe einen kleinen Sketch der per Tastendruck verschiedene Farben am Strip auswählt. So weit so gut. Ich hätte aber gern einen zweiten Taster, der den Strip ausschaltet (Licht aus) wenn er gedrückt wird. Wenn man den Taster wieder loslässt soll der Strip wieder leuchten.

Ich würde es gerne wie eine Taschenlampe zum Lightpainting benutzen. Also quasi mit dem einen Taster die Farben auswählen und mit dem anderen Taster das Licht Ein/Aus schalten.

Leider habe ich nicht wirklich Ahnung davon. Einfach Ein und Ausschalten bringt ja nichts, da der IC dann kein Strom mehr hat.

Über jede Hilfe wäre ich dankbar.
DANKE im Voraus.

LG,
Timo

Code:
#include "FastLED.h"

#define NUM_LEDS 5
#define DATA_PIN 6

// Define the array of leds
CRGB leds[NUM_LEDS];


// Digital IO pin connected to the button. This will be driven with a
// pull-up resistor so the switch pulls the pin to ground momentarily.
// On a high -> low transition the button press logic will execute.
//
#define BUTTON_PIN   2      // Button to change the color.


boolean oldState = HIGH;
int     mode     = 0;       // Currently-active animation mode, 0-9

void setup() {
  FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);

  pinMode(BUTTON_PIN, INPUT_PULLUP);

}

void loop() {

  FastLED.setBrightness(64);

  // Get current button state.
  boolean newState = digitalRead(BUTTON_PIN);

  // Check if state changed from high to low (button press).
  if ((newState == LOW) && (oldState == HIGH)) {
    // Short delay to debounce button.
    delay(20);
    // Check if button is still low after debounce.
    newState = digitalRead(BUTTON_PIN);
    if (newState == LOW) {     // Yes, still low
      if (++mode > 3) mode = 0; // Advance to next mode, wrap around after #3
      switch (mode) {          // Start the new animation...

        case 0:  //  Red
          leds[0].setRGB( 255, 0, 0);
          leds[1].setRGB( 255, 0, 0);
          leds[2].setRGB( 255, 0, 0);
          leds[3].setRGB( 255, 0, 0);
          leds[4].setRGB( 255, 0, 0);
          FastLED.show();
          delay(1000);
          break;

        case 1:   //  Green
          leds[0].setRGB( 0, 255, 0);
          leds[1].setRGB( 0, 255, 0);
          leds[2].setRGB( 0, 255, 0);
          leds[3].setRGB( 0, 255, 0);
          leds[4].setRGB( 0, 255, 0);
          FastLED.show();
          delay(1000);
          break;

        case 2:   //  Blue
          leds[0].setRGB( 0, 0, 255);
          leds[1].setRGB( 0, 0, 255);
          leds[2].setRGB( 0, 0, 255);
          leds[3].setRGB( 0, 0, 255);
          leds[4].setRGB( 0, 0, 255);
          FastLED.show();
          delay(1000);
          break;

        case 3:  //  White
          leds[0].setRGB( 255, 255, 255);
          leds[1].setRGB( 255, 255, 255);
          leds[2].setRGB( 255, 255, 255);
          leds[3].setRGB( 255, 255, 255);
          leds[4].setRGB( 255, 255, 255);
          FastLED.show();
          delay(1000);
          break;

      }
    }
  }

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.03.2020, 16:19
Beitrag #2
RE: WS2812B Stip mit Schalter Ein und Aus schalten
Stelle Deinen Sketch bitte in Codetags.
Wie das geht, steht hier.
Das kannst Du auch noch nachträglich ändern.

Bei dieser Gelegenheit kannst Du ihn auch gleich ordentlich formatieren (<Strg>+T in der IDE hilft Dir dabei). Dann ist er besser lesbar.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.03.2020, 22:28 (Dieser Beitrag wurde zuletzt bearbeitet: 10.03.2020 23:00 von Bitklopfer.)
Beitrag #3
RE: WS2812B Strip mit Schalter Ein und Aus schalten
Dein Problem ist, dass die LED im Stripe sequentiell ihre Werte durchgereicht bekommen.
D.h. Wenn Du alle ausmachen willst, musst Du alle auf Schwarz setzen oder clear() benutzen. Dann ist die Info in den LED aber weg und Du musst sie hinterher wieder neu füllen.

Bei der Neopixel-Lib ist das etwas problematisch. Wenn Du mit FastLed arbeiten würdest, wäre es einfacher, da Du dort den direkten Zugriff auf das LED-Array hast und das über die schnelle memcpy-Funkktion umkopieren könntest.

Bei 5 LED sollte der Speicheraufwand für 3 LED-Arrays (Aus, gespeicherter letzter Stand, aktueller Stand) in Grenzen bleiben.

Das mal als Ansatz. Mein Vorschlag wäre: Schreibe Deinen Sketch auf FastLed um, lerne einen Taster einzulesen und dann können wir uns um das Ausschalten kümmern.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.03.2020, 22:53 (Dieser Beitrag wurde zuletzt bearbeitet: 10.03.2020 23:00 von Bitklopfer.)
Beitrag #4
RE: WS2812B Strip mit Schalter Ein und Aus schalten
(10.03.2020 22:28)Tommy56 schrieb:  Dein Problem ist, dass die LED im Stripe sequentiell ihre Werte durchgereicht bekommen.
D.h. Wenn Du alle ausmachen willst, musst Du alle auf Schwarz setzen oder clear() benutzen. Dann ist die Info in den LED aber weg und Du musst sie hinterher wieder neu füllen.

Bei der Neopixel-Lib ist das etwas problematisch. Wenn Du mit FastLed arbeiten würdest, wäre es einfacher, da Du dort den direkten Zugriff auf das LED-Array hast und das über die schnelle memcpy-Funkktion umkopieren könntest.

Bei 5 LED sollte der Speicheraufwand für 3 LED-Arrays (Aus, gespeicherter letzter Stand, aktueller Stand) in Grenzen bleiben.

Das mal als Ansatz. Mein Vorschlag wäre: Schreibe Deinen Sketch auf FastLed um, lerne einen Taster einzulesen und dann können wir uns um das Ausschalten kümmern.

Gruß Tommy

Hallo Tommy

Danke für die schnelle Antwort.
Auf FastLed konnte ich es schnell umbauen. Aber das mit der Memcopy Funktion ist ??? für mich.

Danke und Gruß,
Timo
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.03.2020, 23:05
Beitrag #5
RE: WS2812B Strip mit Schalter Ein und Aus schalten
Zeige mal Deinen Sketch mit Fastled, dann klären wir den Rest.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.03.2020, 23:23
Beitrag #6
RE: WS2812B Strip mit Schalter Ein und Aus schalten
(10.03.2020 23:05)Tommy56 schrieb:  Zeige mal Deinen Sketch mit Fastled, dann klären wir den Rest.

Gruß Tommy

Hi. Habe den Text Editiert. Sollte als Code sichtbar sein.

LG,

Code:
#include "FastLED.h"

#define NUM_LEDS 5
#define DATA_PIN 6

// Define the array of leds
CRGB leds[NUM_LEDS];


// Digital IO pin connected to the button. This will be driven with a
// pull-up resistor so the switch pulls the pin to ground momentarily.
// On a high -> low transition the button press logic will execute.
//
#define BUTTON_PIN   2      // Button to change the color.


boolean oldState = HIGH;
int     mode     = 0;       // Currently-active animation mode, 0-9

void setup() {
  FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);

  pinMode(BUTTON_PIN, INPUT_PULLUP);

}

void loop() {

  FastLED.setBrightness(64);

  // Get current button state.
  boolean newState = digitalRead(BUTTON_PIN);

  // Check if state changed from high to low (button press).
  if ((newState == LOW) && (oldState == HIGH)) {
    // Short delay to debounce button.
    delay(20);
    // Check if button is still low after debounce.
    newState = digitalRead(BUTTON_PIN);
    if (newState == LOW) {     // Yes, still low
      if (++mode > 3) mode = 0; // Advance to next mode, wrap around after #3
      switch (mode) {          // Start the new animation...

        case 0:  //  Red
          leds[0].setRGB( 255, 0, 0);
          leds[1].setRGB( 255, 0, 0);
          leds[2].setRGB( 255, 0, 0);
          leds[3].setRGB( 255, 0, 0);
          leds[4].setRGB( 255, 0, 0);
          FastLED.show();
          delay(1000);
          break;

        case 1:   //  Green
          leds[0].setRGB( 0, 255, 0);
          leds[1].setRGB( 0, 255, 0);
          leds[2].setRGB( 0, 255, 0);
          leds[3].setRGB( 0, 255, 0);
          leds[4].setRGB( 0, 255, 0);
          FastLED.show();
          delay(1000);
          break;

        case 2:   //  Blue
          leds[0].setRGB( 0, 0, 255);
          leds[1].setRGB( 0, 0, 255);
          leds[2].setRGB( 0, 0, 255);
          leds[3].setRGB( 0, 0, 255);
          leds[4].setRGB( 0, 0, 255);
          FastLED.show();
          delay(1000);
          break;

        case 3:  //  White
          leds[0].setRGB( 255, 255, 255);
          leds[1].setRGB( 255, 255, 255);
          leds[2].setRGB( 255, 255, 255);
          leds[3].setRGB( 255, 255, 255);
          leds[4].setRGB( 255, 255, 255);
          FastLED.show();
          delay(1000);
          break;

      }
    }
  }

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.03.2020, 12:06 (Dieser Beitrag wurde zuletzt bearbeitet: 11.03.2020 12:08 von Tommy56.)
Beitrag #7
RE: WS2812B Strip mit Schalter Ein und Aus schalten
Code:
#define NUM_LEDS 5

// Define the array of leds
// Die LEDs zur Anzeige
CRGB leds[NUM_LEDS];
// Sicherungsbereich
CRGB siko[NUM_LEDS];

void aus() {
  memcpy(siko, leds, sizeof(leds);  // sichern aktueller Inhalt
  FastLED.clear();
  FastLED.show();
}

void an() {
  memcpy(leds, siko, sizeof(leds);  // zurückschreiben
  FastLED.show();
}

Entscheidend ist das Sichern und Zurückspielen der Inhalte. Damit ist es egal, wie die Inhalte erzeugt wurden.

Gruß Tommy

Edit: Wenn Du allen LEDs die gleiche Farbe zuordnen willst, schau Dir mal showColor() an.

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.03.2020, 18:22
Beitrag #8
RE: WS2812B Strip mit Schalter Ein und Aus schalten
(11.03.2020 12:06)Tommy56 schrieb:  
Code:
#define NUM_LEDS 5

// Define the array of leds
// Die LEDs zur Anzeige
CRGB leds[NUM_LEDS];
// Sicherungsbereich
CRGB siko[NUM_LEDS];

void aus() {
  memcpy(siko, leds, sizeof(leds);  // sichern aktueller Inhalt
  FastLED.clear();
  FastLED.show();
}

void an() {
  memcpy(leds, siko, sizeof(leds);  // zurückschreiben
  FastLED.show();
}

Entscheidend ist das Sichern und Zurückspielen der Inhalte. Damit ist es egal, wie die Inhalte erzeugt wurden.

Gruß Tommy

Edit: Wenn Du allen LEDs die gleiche Farbe zuordnen willst, schau Dir mal showColor() an.


Hallo Tommy
Danke für die Hilfe. Aber irgendwie bekomme ich es nicht hin. Ich habe jetzt einen weiteren Button hinzugefügt. Mir ist aber leider nicht klar, wie und wo ich das memcpy einsetzten muss. void an und aus muss ja irgendwie mit dem Button abgefragt werden... Könntest du mir hier nochmal helfen ?.
Danke.

Code:
#include "FastLED.h"

#define NUM_LEDS 5
#define DATA_PIN 6

// Define the array of leds
CRGB leds[NUM_LEDS];
// Sicherungsbereich
CRGB siko[NUM_LEDS];


// Digital IO pin connected to the button. This will be driven with a
// pull-up resistor so the switch pulls the pin to ground momentarily.
// On a high -> low transition the button press logic will execute.
//
#define BUTTON_PIN   2      // Button to change the color.
//
//
#define BUTTON_PIN_OFF  3    //Button to turn Off/ON



boolean oldState = HIGH;
int     mode     = 0;       // Currently-active animation mode, 0-9
//
//
int buttonState = 0;         // variable for reading the pushbutton status (BUTTON_PIN_OFF)


void setup() {
  FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);

  pinMode(BUTTON_PIN, INPUT_PULLUP);
  //
  //
  pinMode(BUTTON_PIN_OFF, INPUT_PULLUP);

}

void loop() {

  FastLED.setBrightness(64);



  // read the state of the pushbutton value:
  buttonState = digitalRead(BUTTON_PIN_OFF);

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);     //   ???
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);     //   ???
  }



  // Get current button state.
  boolean newState = digitalRead(BUTTON_PIN);

  // Check if state changed from high to low (button press).
  if ((newState == LOW) && (oldState == HIGH)) {
    // Short delay to debounce button.
    delay(20);
    // Check if button is still low after debounce.
    newState = digitalRead(BUTTON_PIN);
    if (newState == LOW) {     // Yes, still low
      if (++mode > 3) mode = 0; // Advance to next mode, wrap around after #3
      switch (mode) {          // Start the new animation...

        case 0:
          leds[0].setRGB( 255, 0, 0);
          leds[1].setRGB( 255, 0, 0);
          leds[2].setRGB( 255, 0, 0);
          leds[3].setRGB( 255, 0, 0);
          leds[4].setRGB( 255, 0, 0);
          FastLED.show();
          delay(1000);
          break;

        case 1:
          leds[0].setRGB( 0, 255, 0);
          leds[1].setRGB( 0, 255, 0);
          leds[2].setRGB( 0, 255, 0);
          leds[3].setRGB( 0, 255, 0);
          leds[4].setRGB( 0, 255, 0);
          FastLED.show();
          delay(1000);
          break;

        case 2:
          leds[0].setRGB( 0, 0, 255);
          leds[1].setRGB( 0, 0, 255);
          leds[2].setRGB( 0, 0, 255);
          leds[3].setRGB( 0, 0, 255);
          leds[4].setRGB( 0, 0, 255);
          FastLED.show();
          delay(1000);
          break;

        case 3:
          leds[0].setRGB( 0, 0, 0);
          leds[1].setRGB( 0, 0, 0);
          leds[2].setRGB( 0, 0, 0);
          leds[3].setRGB( 0, 0, 0);
          leds[4].setRGB( 0, 0, 0);
          FastLED.show();
          delay(1000);
          break;

      }
    }
  }

}



/*


  void aus() {
  memcpy(siko, leds, sizeof(leds);  // sichern aktueller Inhalt
  FastLED.clear();
  FastLED.show();
  }

  void an() {
  memcpy(leds, siko, sizeof(leds);  // zurückschreiben
  FastLED.show();
  }


*/
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  WS2812B Lib - anzahl LED Martin-11 32 1.014 22.02.2021 12:44
Letzter Beitrag: Martin-11
  Fernsteierungsimpuls Taster/Schalter unterschiedliche Reaktion do1xxy 20 942 21.12.2020 08:24
Letzter Beitrag: do1xxy
  Compiler-Schalter Rainer2 8 1.212 07.06.2020 13:34
Letzter Beitrag: Tommy56
  Verschiedene Spannungen beim Schalten von Relais? Wosch 4 900 19.04.2020 16:33
Letzter Beitrag: Tommy56
  Schalter u. Slider von Nextion nach Arduino abfragen, Lösungsansatz gesucht alpenpower 2 1.228 09.03.2020 07:59
Letzter Beitrag: alpenpower
  Mehrere Taster/Schalter entprellen und verwalten MicroBahner 17 3.716 23.02.2020 17:38
Letzter Beitrag: MicroBahner
  Longruner ws2812b Matrix aufbauen benötige einen Denkanstoß marcobiblis 2 1.116 07.01.2020 23:22
Letzter Beitrag: marcobiblis
  ws2812b Led Strip Mirkan 5 1.225 20.10.2019 21:18
Letzter Beitrag: hotsystems
  Zwei Schalter welche sich beinflussen Twix 14 2.876 19.07.2019 20:00
Letzter Beitrag: Tommy56
  PZS Problem mit Ausgang schalten Flötzinger 0 1.075 28.06.2019 15:53
Letzter Beitrag: Flötzinger

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste