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
2 WS2812 BStripBlinker Schalter
04.01.2021, 21:00 (Dieser Beitrag wurde zuletzt bearbeitet: 06.01.2021 01:30 von Bitklopfer.)
Beitrag #1
2 WS2812 BStripBlinker Schalter
Moin moin und Allen ein gesundes Neues Jahr.

Ich versuche 2 Strips WS2812 per Wechselschalter (Pushbutton = D7 und D8 meiner NodeMCU mit einer Blinkerfunktion zu betreiben, doch meine Versuche scheitern.
Beide Strips (D2 u. D4) starten sofort beim Anlegen der Boardspannung und dazu syncron, ohne den Loopabschnitt zu durchlaufen.
Schalterfunktion will nicht. Der Code sieht so:

Code:
/*
Fahrzeug Blinker - Effekt
Schalter Pin D6 und 7 über 10kohm zu 3.3V
*/



#include <Adafruit_NeoPixel.h>

#define PIN     2   // 4 = D2 = GPIO 04
#define PIN1    4   // 2 = D4 = GPIO 02

#define NUMPIXELS 3

int rechtsblinken = D7; //Schalter-Stellung „rechtsblinken“ = GPIO 13  button
int linksblinken = D8;  //Schalter-Stellung „linksblinken“  = GPIO 15   button
int schalterstatus = 0;    // temp = 0;  "Rechtsblinken"
int schalterstatus1 = 0;    // temp1 = 0;  "Linksblinken"

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


void Blinker(int num, int wait)
{
  for (int i = 0; i < num; i++)
  {
    pixels.setPixelColor(i, 0, 0, 0);  // (i, 35, 35, 35);
    pixels1.setPixelColor(i, 0, 0, 0);  // (i, 35, 35, 35);

  }
  pixels.show();
  pixels1.show();

  delay(wait);
  for (int j = 0; j < num; j++)
  {
    pixels.setPixelColor(j, 255, 60, 0);   // Orange
    pixels1.setPixelColor(j, 255, 60, 0);   // Orange

  }
  pixels.show();
  pixels1.show();

  delay(wait);
}

void setup()
{
  Serial.begin(115200);

  pinMode(PIN, OUTPUT);                           // (Pin 4 = GPIO 04 = D2) DataPin WS2812B Strip1.
  pinMode(rechtsblinken, INPUT);                  // (Pin 12 = GPIO 13 = D7) ist jetzt ein Eingang.
  pinMode(PIN1, OUTPUT);                          // (Pin 2 = GPIO 02 = D4)  DataPin WS2812B Strip2.
  pinMode(linksblinken, INPUT);                   // (Pin 13 = D8 GPIO 15) ist jetzt ein Eingang.
  
  pixels.begin();
  pixels.setBrightness(150);
  pixels1.begin();
  pixels1.setBrightness(150);

}

void loop()
{
  schalterstatus=digitalRead(rechtsblinken);     //Hier wird der Pin13 ausgelesen
  if (schalterstatus == HIGH);          
{                      
  digitalWrite(PIN, HIGH);                       //dann soll strip1 leuchten
  Blinker(7, 500);

{
  schalterstatus=digitalRead(rechtsblinken);     //Hier wird der Pin13 ausgelesen
  if (schalterstatus == LOW);                  
{                      
  digitalWrite(PIN, LOW);                        //...strip1 aus
  pixels.show();                                 //  Blinker(7, 500);
}                        
   schalterstatus=digitalRead(linksblinken);     //Hier wird der Pin15 ausgelesen
  if (schalterstatus == HIGH);                  
  {                                            
  digitalWrite(PIN1, HIGH);                      //dann soll die strip2 leuchten
  Blinker(7, 500);
}                                          

{                  
   schalterstatus=digitalRead(linksblinken);     //Hier wird der Pin15 ausgelesen
  if (schalterstatus == LOW);                  
  {                                            
  digitalWrite(PIN1, LOW);                       //...strip2 aus
  pixels1.show();                                // Blinker(7, 500);
}
}
}
}
}

Ich hoffe, Ihr könnt mir weiterhelfen.
Ein Danke, im Voraus.
Paul
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.01.2021, 21:30
Beitrag #2
RE: 2WS2812BStripBlinkerSchalter
Bitte formatiere Deinen Code ordentlich (<Strg>+T in der IDE hilft Dir dabei):

Wie hast Du Deine Taster angeschlossen? Ich vermuute nach +Vcc. Hast Du auch Pulldown-Widerstände dran? Weil ein offener Pin (bei unbetätigtem Taster) wirkt wie eine Antenne und fängt alles Unmögliche ein.

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
04.01.2021, 22:01
Beitrag #3
RE: 2WS2812BStripBlinkerSchalter
(04.01.2021 21:30)Tommy56 schrieb:  Bitte formatiere Deinen Code ordentlich (<Strg>+T in der IDE hilft Dir dabei):

Wie hast Du Deine Taster angeschlossen? Ich vermuute nach +Vcc. Hast Du auch Pulldown-Widerstände dran? Weil ein offener Pin (bei unbetätigtem Taster) wirkt wie eine Antenne und fängt alles Unmögliche ein.

Gruß Tommy

DANKE für den Tip zwecks Formatierung!
Ja, die Taster sind mit 10 kOhm an +Vcc.

Grüße
Paul
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
04.01.2021, 22:19 (Dieser Beitrag wurde zuletzt bearbeitet: 04.01.2021 22:19 von Tommy56.)
Beitrag #4
RE: 2WS2812BStripBlinkerSchalter
(04.01.2021 22:01)Adru2019 schrieb:  Ja, die Taster sind mit 10 kOhm an +Vcc.

Dann sind sie im unbetätigten Zustand HIGH, Du musst also auf LOW oder !digitalRead(pin) abfragen.

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
05.01.2021, 20:13
Beitrag #5
RE: 2WS2812BStripBlinkerSchalter
Moin in die Runde.

Hatte auf Tommys Rat rumgedacht, mir den Code nochmal zur Brust genommen, aber wieder will er nicht so, .... ;-(

Nun habe ich den Code Stück für Stück neu, auf Basis der W2812FX Bibliothek erstellt und er wollte erst auch nicht. War aber mein "Schalter- Fehler".
SchalterPIN D7 und D8 habe ich mal auf Grund gelegt und dann den Code jeweils mit LOW und HIGH durch laufen lassen.und es funst.
Code:
#include <WS2812FX.h>

#ifdef __AVR__
#include <avr/power.h> // Required for 16 MHz Adafruit Trinket
#endif

#define LED_PIN 2                                                             // D2 = GPIO 04 Strip1 Rechts
#define LED_PIN1 4                                                            // D4 = GPIO 02 Strip2 Links

#define LED_COUNT 5                                                           // Anzahl Pixel                                                  

WS2812FX ws2812fx = WS2812FX(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);       // Strip1 = Rechts
WS2812FX ws2812fx1 = WS2812FX(LED_COUNT, LED_PIN1, NEO_GRB + NEO_KHZ800);     // Strip2 = Links

int rechtsblinken = D7;                                                       // Schalter-Stellung „rechtsblinken“ = GPIO 13
int linksblinken = D8;                                                        // Schalter-Stellung „linksblinken“  = GPIO 15
int schalterstatus = 0;                                                       // "Rechtsblinken"
int schalterstatus1 = 0;                                                      // "Linksblinken"


void setup() {
  Serial.begin(115200);

  ws2812fx.init();
  ws2812fx1.init();
  ws2812fx.setColor(0xFF3000);                                                 // Orange Rechtsbkinken
  ws2812fx1.setColor(0xFF3000);                                                // Orange Linksblinken
  ws2812fx.setBrightness(100);
  ws2812fx1.setBrightness(100);
  ws2812fx.setSpeed(1000);
  ws2812fx1.setSpeed(1000);
  ws2812fx.setMode(FX_MODE_BLINK);
  ws2812fx1.setMode(FX_MODE_BLINK);
  ws2812fx.start();
  ws2812fx1.start();

  pinMode(LED_PIN, OUTPUT);                                                    // (Pin 4 = GPIO 04 = D2) DataPin WS2812B Strip1.
  pinMode(rechtsblinken, INPUT);                                               // (Pin 12 = GPIO 13 = D7) ist jetzt ein Eingang.
  pinMode(LED_PIN1, OUTPUT);                                                   // (Pin 2 = GPIO 02 = D4)  DataPin WS2812B Strip2.
  pinMode(linksblinken, INPUT);                                                // (Pin 13 = D8 GPIO 15) ist jetzt ein Eingang.

}

void loop() {

  schalterstatus = digitalRead(rechtsblinken);

  if (schalterstatus == HIGH) {                    // Hier wird der Pin13 ausgelesen
    ws2812fx.service();                            // Blinkereffekt Rechts
    Serial.println("Blinker Rechts an");
  }
  else {
    digitalWrite(LED_PIN, LOW);                    // Strip1 aus
    Serial.println("Blinker Rechts aus");
  }

  schalterstatus1 = digitalRead(linksblinken);

  if (schalterstatus1 == HIGH) {                   // Hier wird der Pin15 ausgelesen
    ws2812fx1.service();                           // Blinkereffekt Links
    Serial.println("Blinker Links an");
  }
  else {
    digitalWrite(LED_PIN1, LOW);                   // Strip2 aus
    Serial.println("Blinker Links aus");
  }
}

Zukünftig werde ich die zu verbauende Hardware prinzipiell auf Funktion prüfen, zumal der Schalter aus meiner Bastelkiste "schon mal verbaut" kam.

Grüße Paul
___________________________________________________________
"Da ich langsam älter werde, muss ich auch mal schneller zum Holzhacken kommen dürfen" (ich)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.01.2021, 20:42
Beitrag #6
RE: 2WS2812BStripBlinkerSchalter
Ist doch gut, wenn er jetzt läuft und danke für die Rückmeldung.
Bei Tastern gegen GND und nicht extrem langen Zuleitungen kannst Du in Zukunft auch die internen PullUp-Widerstände zuschalten und sparst Dir extra Widerstände.
Code:
pinMode(pin,INPUT_PULLUP);

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
06.01.2021, 13:34
Beitrag #7
RE: 2WS2812BStripBlinkerSchalter
(05.01.2021 20:42)Tommy56 schrieb:  Ist doch gut, wenn er jetzt läuft und danke für die Rückmeldung.
Bei Tastern gegen GND und nicht extrem langen Zuleitungen kannst Du in Zukunft auch die internen PullUp-Widerstände zuschalten und sparst Dir extra Widerstände.
Code:
pinMode(pin,INPUT_PULLUP);

Gruß Tommy

Moin moin Tommy und Allen in der Runde.

Die Zuleitungen werden ca. 1,5 bis 2 m lang sein.
Meine Frage: Kann ich die Schalter- PINs D7 u. D8 auch mit einem kleineren Widerstand auf 3.3V legen, da ich die NodeMCU's über den USB- Eingang versorge?

Grüße Paul
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.01.2021, 13:40
Beitrag #8
RE: 2WS2812BStripBlinkerSchalter
(06.01.2021 13:34)Adru2019 schrieb:  [quote='Tommy56' pid='80445' dateline='1609875754']
Moin moin Tommy und Allen in der Runde.

Die Zuleitungen werden ca. 1,5 bis 2 m lang sein.
Meine Frage: Kann ich die Schalter- PINs D7 u. D8 auch mit einem kleineren Widerstand auf 3.3V legen, da ich die NodeMCU's über den USB- Eingang versorge?

Grüße Paul
Ja, unbedingt. 3,3V ist hier zwingend, um die Pins nicht durch höhere Spannung zu gefährden. Und bei deiner Kabellänge ist es mit kleineren Widerständen auch sinnvoll, da hiermit evtl. Störungen unterdrückt werden.

Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Schalter über Distanz an Mikrocontroller anbinden stw 7 1.844 13.05.2020 12:02
Letzter Beitrag: Tommy56
  NodeMCU Schalter an D0 steffus 6 1.495 30.11.2019 19:56
Letzter Beitrag: Bernd666
  Schalter per WLAN bedienen (Garagentor) bastl 4 2.687 10.05.2019 12:58
Letzter Beitrag: Tommy56
  WS2812 mit UNO WiFi R3 ATmega328P ESP8266 Modul exGeebot 17 4.465 13.04.2019 17:08
Letzter Beitrag: amithlon
  Schalter an ESP-01 Sub7evenHH 8 4.099 23.03.2019 14:37
Letzter Beitrag: Sub7evenHH

Gehe zu:


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