Hallo Zusammen,
ich habe einen Code zusammen gebastelt, der über eine App mittels NodeMCU eine Neopixel Strippe WS2812b steuert. Je nach dem welche Knopf in der App gedrückt wird, werden die Zahlen 1 bis 5 an NodeMCU gesendet. 1 = Pixel aus, 2 = Pixel rot, 3 = Pixel blau, 4 = Pixel weiss und bei 5 soll der Code-Abschnitt für das Lauflicht starten und genau mit 5. habe ich mein Problem. Wenn ich den Knopf für 5. drücke läuft der Abschnitt nur ein mal, aber super wäre wenn es im loop laufen würde. Vermutlich ist das hier falsch! else if (data == "5") {
Über Hilfe bin ich euch dankbar!
Gruß,
Merzo
/* include library */
#include <ESP8266WiFi.h>
#include <Adafruit_NeoPixel.h>
//____________________________________________lauflicht
#ifdef __AVR__
#include <avr/power.h>
#endif
int i = 0;
int a = 2;
int b = 4;
int c = 6;
int d = 8;
int e = 10;
//_______________________________________________
#define PIN 15
#define NUMPIXELS 150
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int pause = 10; // 10 Millisekunden Pause bis zur Ansteuerung der nächsten LED.
//ROUTER VERBINDUNG_____________________________________
/* define port */
WiFiClient client;
WiFiServer server(80);
/* WIFI settings */
const char* ssid = "XXXX";
const char* password = "XXXXX";
IPAddress ip(192, 168, X, XX); //set IP
IPAddress gateway(192, XX, X, X); //set gateway
IPAddress subnet(255, 255, XXX, XXX);
/* data received from application */
String data = "";
//________________________________________________________
void setup() {
pixels.begin();
//ROUTER VERBINDUNG_________________________________________
Serial.begin(115200);
delay(10);
// Connection to wireless network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.config(ip, gateway, subnet);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
/* start server communication */
server.begin();
Serial.println("Server started");
// Print the IP address in serial monitor. It must be the same we entered above
Serial.print("Type this address in URL to connect: ");
Serial.print("http://");
Serial.println(ip);
Serial.println("/");
}
void loop()
{
// If the server available, run the "checkClient" function */
client = server.available();
if (!client) return;
data = checkClient ();
/************************ Run function according to incoming data from application *************************/
// If the incoming data is "1", aus
if (data == "1") {
Serial.println("Aus");
pixels.setPixelColor(0, pixels.Color(0, 0, 0));
//usw. für alle 150 Pixel
pixels.show();
}
// If the incoming data is "2", rot
else if (data == "2") {
Serial.println("Rot");
pixels.setPixelColor(50, pixels.Color(255, 0, 0));
pixels.setPixelColor(51, pixels.Color(255, 0, 0));
pixels.setPixelColor(52, pixels.Color(255, 0, 0));
pixels.setPixelColor(53, pixels.Color(255, 0, 0));
pixels.setPixelColor(54, pixels.Color(255, 0, 0));
pixels.setPixelColor(55, pixels.Color(255, 0, 0));
pixels.setPixelColor(56, pixels.Color(255, 0, 0));
pixels.setPixelColor(57, pixels.Color(255, 0, 0));
pixels.setPixelColor(58, pixels.Color(255, 0, 0));
pixels.setPixelColor(59, pixels.Color(255, 0, 0));
pixels.setPixelColor(60, pixels.Color(255, 0, 0));
pixels.show();
}
// If the incoming data is "3", blau
else if (data == "3") {
Serial.println("Blau");
pixels.setPixelColor(50, pixels.Color(0, 0, 255));
pixels.setPixelColor(51, pixels.Color(0, 0, 255));
pixels.setPixelColor(52, pixels.Color(0, 0, 255));
pixels.setPixelColor(53, pixels.Color(0, 0, 255));
pixels.setPixelColor(54, pixels.Color(0, 0, 255));
pixels.setPixelColor(55, pixels.Color(0, 0, 255));
pixels.setPixelColor(56, pixels.Color(0, 0, 255));
pixels.setPixelColor(57, pixels.Color(0, 0, 255));
pixels.setPixelColor(58, pixels.Color(0, 0, 255));
pixels.setPixelColor(59, pixels.Color(0, 0, 255));
pixels.setPixelColor(60, pixels.Color(0, 0, 255));
pixels.show();
}
// If the incoming data is "4", weiss
else if (data == "4") {
Serial.println("Weiss");
pixels.setPixelColor(50, pixels.Color(255, 255, 255));
pixels.setPixelColor(51, pixels.Color(255, 255, 255));
pixels.setPixelColor(52, pixels.Color(255, 255, 255));
pixels.setPixelColor(53, pixels.Color(255, 255, 255));
pixels.setPixelColor(54, pixels.Color(255, 255, 255));
pixels.setPixelColor(55, pixels.Color(255, 255, 255));
pixels.setPixelColor(56, pixels.Color(255, 255, 255));
pixels.setPixelColor(57, pixels.Color(255, 255, 255));
pixels.setPixelColor(58, pixels.Color(255, 255, 255));
pixels.setPixelColor(59, pixels.Color(255, 255, 255));
pixels.setPixelColor(60, pixels.Color(255, 255, 255));
pixels.show();
}
// If the incoming data is "5", Lauflicht
else if (data == "5") {
Serial.println("Lauflicht");
pixels.setPixelColor(i, pixels.Color(0, 150, 0)); // Grün
pixels.setPixelColor(a, pixels.Color(155, 0, 0)); // Rot
pixels.setPixelColor(b, pixels.Color(0, 0, 150)); // blau
pixels.setPixelColor(c, pixels.Color(150, 150, 0)); // gelb
pixels.setPixelColor(d, pixels.Color(0, 150, 150)); // türkis
pixels.setPixelColor(e, pixels.Color(150, 150, 150)); // weiss
pixels.setPixelColor(i - 1, pixels.Color(0, 0, 0)); // Der vorherige Pixel wird abgeschaltet
pixels.setPixelColor(a - 1, pixels.Color(0, 0, 0)); // Der vorherige Pixel wird abgeschaltet
pixels.setPixelColor(b - 1, pixels.Color(0, 0, 0));
pixels.setPixelColor(c - 1, pixels.Color(0, 0, 0));
pixels.setPixelColor(d - 1, pixels.Color(0, 0, 0));
pixels.setPixelColor(e - 1, pixels.Color(0, 0, 0));
pixels.show(); // Durchführen der Pixel-Ansteuerung
if (i == 0) pixels.setPixelColor(149, pixels.Color(0, 0, 0)); // Im Fall von Pixel "0" muss die vorherige (39) ausgeschaltet werden.
if (a == 0) pixels.setPixelColor(149, pixels.Color(0, 0, 0));
if (b == 0) pixels.setPixelColor(149, pixels.Color(0, 0, 0));
if (c == 0) pixels.setPixelColor(149, pixels.Color(0, 0, 0));
if (d == 0) pixels.setPixelColor(149, pixels.Color(0, 0, 0));
if (e == 0) pixels.setPixelColor(149, pixels.Color(0, 0, 0));
pixels.show(); // Durchführen der Pixel-Ansteuerung
delay (pause);
i = i + 1; // Die Variable "i" wird um eine Zahl vergrößert. Die neue Zahl "i" ist dann die nächste LED im Led-Ring
a = a + 1;
b = b + 1;
c = c + 1;
d = d + 1;
e = e + 1;
if (i == 150) i = 0; // Wenn die Variable den Wert 40 erreicht hat, wird die Variable auf den Wert "0" zurück gesetzt, da die Nummerierung der LEDs nur von 0 bis 39 geht.
if (a == 150) a = 0;
if (b == 150) b = 0;
if (c == 150) c = 0;
if (d == 150) d = 0;
if (e == 150) e = 0;
}
}
/********************************** RECEIVE DATA FROM the APP ******************************************/
String checkClient (void)
{
while (!client.available()) delay(1);
String request = client.readStringUntil('\r');
request.remove(0, 5);
request.remove(request.length() - 9, 9);
return request;
}

