Hallo, ich möchte mit Hilfe eines ESP32 und der Blynk App einen Neopixel Streifen ansteuern. Wenn ich auf den virtuellen Schalter V6 drücke, möchte ich, dass ein Neopixel so lange blinkt, bis ich erneut den Schalter betätige. Also bei Zustand 1 so lange blinken, bis sich der Zustand auf 0 ändert. Wenn ich jedoch auf den Schalter drücke, dann läuft die while Schleife endlos ab und im seriellen Monitor wird nach jedem Ablauf der Schleife "1" angezeigt, obwohl ich den Schalter nochmal drücke. Ich weiß, dass ich in der while Schleife selbst, den Zustand vom Taster abfragen muss, aber anscheinend bekomme ich es nicht hin, da es unendlich blinkt. Ich sitze schon seit mehreren Tagen an diesem Problem und habe in einem anderen Forum nur frustrierende, nicht helfende Antworten bekommen. Ich würde mich sehr freuen, wenn mir jemand bei der while Schleife helfen kann oder vielleicht ist das ein falscher Ansatz. #include <FastLED.h> #define BLYNK_PRINT Serial #define BLYNK_USE_DIRECT_CONNECT #define FASTLED_ESP32_RAW_PIN_ORDER #include <BlynkSimpleEsp32_BLE.h> #include <BLEDevice.h> #include <BLEServer.h> #define NUM_LEDS1 5 #define LED_TYPE WS2812 #define COLOR_ORDER GRB CRGB leds1[NUM_LEDS1]; char auth[] = "AIiH_ZA1WUZu89MhA6QaxdtMe-E-0eDB"; #define PIN1 14 int data=255; int r,g,b; int d = 1000; int wert; void setup() { Serial.begin(9600); Blynk.begin(auth); FastLED.addLeds<LED_TYPE, PIN1, COLOR_ORDER>(leds1, NUM_LEDS1).setCorrection( TypicalLEDStrip ); } BLYNK_WRITE(V4) { r = param[0].asInt(); g = param[1].asInt(); b = param[2].asInt(); static1(r, g, b,data); } void loop() { Blynk.run(); } BLYNK_WRITE(V5) { data = param.asInt(); static1(r, g, b,data); } void static1(int r, int g, int b,int brightness) { FastLED.setBrightness(brightness); for (int i = 0; i < NUM_LEDS1; i++ ) { leds1[i] = CRGB(r, g, b); } FastLED.show(); } BLYNK_WRITE(V6) { wert = param.asInt(); Serial.println(wert); while (wert==1) { leds1[1] = CRGB(250,0,0); FastLED.show(); delay(d); leds1[1] = CRGB(0,0,0); FastLED.show(); delay(d); Serial.print(wert); } }
Ich habe ja schon viel C-Code gesehen, aber hier steige ich nicht durch. Warum heissen alle Funktonen BLYNK_WRITE ? Und was ist V4, V5 und V6? Wo wird denn überhaupt ein Pin abgefragt? Oder ist das kein C/C++? So normal Programmieren auf einem PC kannst du? Oder ist das bislang alles nur Copy/Paste?
BLYNK_WRITE führt einen Befehl aus, wenn ein Schalter in der Blynk App betätigt wird. Beispiel: BLYNK_WRITE(V6) { Befehl }, wenn V6 betätigt wird, dann wird ein dementsprechender Befehl ausgeführt. In der App kann man einen Schalter auf eine graphische Oberfläche ziehen und einstellen welchen virtuellen Pin er schalten soll, in dem Fall V6. Wie man oben unschwer erkennen kann, besitzt Blynk eine eigene Library in der Arduino IDE. Daher kommen auch Funktionen, wie "BLYNK_WRITE()", "Blynk.run()". Und ja, ich gebe zu, dass ich den Code von V4 und V5 aus dem Internet kopiert habe, da ich keine richtige Anleitung gefunden habe wie man mit dem "ZeRGBa" umgeht und wie ich finde, muss man nicht alles neu erfinden ;)
Nabend, ist jetzt schon ne ganze Weile her, dass ich das letzte Mal mit Blynk hantiert habe (und ich meine mich zu erinnern, dass es mir nie wirklich gefallen hat..), aber das Problem liegt für mich klar in der while-Schleife. Du hast schon richtig erkannt, dass du deine Endbedingung in der Schleife abfragen musst. Deine Variable "wert" muss also in der Schleife auf != 1 gesetzt werden, wenn du den Schalter das zweite Mal betätigst.
1 | while (wert==1) |
2 | {
|
3 | leds1[1] = CRGB(250,0,0); |
4 | FastLED.show(); |
5 | delay(d); |
6 | |
7 | leds1[1] = CRGB(0,0,0); |
8 | FastLED.show(); |
9 | delay(d); |
10 | |
11 | Serial.print(wert); |
12 | //hier fehlt die Abfrage
|
13 | }
|
Insgesamt ist mir aber noch nicht ganz klar, wo der Wert von "wert" eigentlich herkommt, bzw. wie Blynk die Zustände der Schalter in der App an den ESP übergibt. Also konkret: 1) Code aufräumen ;) 2) Herausfinden, wie der Zustand von V6 in der while-Schleife abgefragt werden kann.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.