Hallo Leute,
das hier ist mein erster Post und ich bin noch blutiger Anfänger. Also bitte hatet mich nicht für die Frage.
Ich habe folgendes Problem ich habe einen Webserver für meinen Ws2812b "programmiert". Hat soweit geklappt, es gibt zwei Farbmodie einmal/rainbow und /warmwhite. Das hier ist mein Code:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
const char* ssid = "FRITZ!Box 7490 ";
const char* password = "";
ESP8266WebServer server(80);
#include <Adafruit_NeoPixel.h>
#define PIN D4
Adafruit_NeoPixel strip = Adafruit_NeoPixel(97, D4, NEO_GRB + NEO_KHZ800);
const int led = 13;
void handleRoot() {
server.send(200, "text/plain", "usage:\n/rainbow");
}
void handleNotFound() {
digitalWrite(led, 1);
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
digitalWrite(led, 0);
}
void warmwhite(uint8_t wait){
uint16_t i;
for(i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, 255,255,120);}
strip.show();
delay(wait);
}
void rainbow(uint8_t wait) {
uint16_t i, j;
for(j=0; j<256; j++) {
for(i=0; i<strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel((i+j) & 255));
}
strip.show();
delay(wait);
}
}
// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if(WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if(WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
void setup(void) {
pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (MDNS.begin("instead")) {
Serial.println("MDNS responder started");
}
server.on("/", handleRoot);
server.on("/rainbow", []() {
server.send(500, "text/plain", "rainbow");
uint16_t y;
for (y=0; y<5000; y++){
rainbow(100000);}
}
);server.on("/warmwhite",[](){
server.send(700,"text/plain","warmwhite");
warmwhite(1000000);
}
);
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
strip.begin();
strip.show(); // Initialize all pixels to 'off'
}
void loop(void) {
server.handleClient();
}
Meine Frage ist jetzt wie ich einen Neustart implementieren kann z.B hatte ich schon die Idee das ganze über Threads zu lösen aber nachdem ich es Programmiert hatte sagte mir ein Freund dass das nicht ginge. Dann probierte ich es mit einer if- Abfrage auf Handle Client hier wieder mein Code
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
const char* ssid = "FRITZ!Box 7490 RS15";
const char* password = "";
ESP8266WebServer server(80);
#include <Adafruit_NeoPixel.h>
#define PIN D4
Adafruit_NeoPixel strip = Adafruit_NeoPixel(97, D4, NEO_GRB + NEO_KHZ800);
const int led = 13;
void handleRoot() {
server.send(200, "text/plain", "usage:\n/rainbow");
}
void handleNotFound() {
digitalWrite(led, 1);
String message = "File Not Found\n\n";
message += "URI: ";
message += server.uri();
message += "\nMethod: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "\nArguments: ";
message += server.args();
message += "\n";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
}
server.send(404, "text/plain", message);
digitalWrite(led, 0);
}
void warmwhite(uint8_t wait) {
uint16_t i;
for (i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, 255, 255, 120);
}
strip.show();
delay(wait);
}
void rainbow(uint8_t wait) {
uint16_t i, j;
for (j = 0; j < 256; j++) {
for (i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, Wheel((i + j) & 255));
}
strip.show();
delay(wait);
}
}
// Input a value 0 to 255 to get a color value.
// The colours are a transition r - g - b - back to r.
uint32_t Wheel(byte WheelPos) {
WheelPos = 255 - WheelPos;
if (WheelPos < 85) {
return strip.Color(255 - WheelPos * 3, 0, WheelPos * 3);
}
if (WheelPos < 170) {
WheelPos -= 85;
return strip.Color(0, WheelPos * 3, 255 - WheelPos * 3);
}
WheelPos -= 170;
return strip.Color(WheelPos * 3, 255 - WheelPos * 3, 0);
}
void setup(void) {
pinMode(led, OUTPUT);
digitalWrite(led, 0);
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (MDNS.begin("instead")) {
Serial.println("MDNS responder started");
}
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
strip.begin();
strip.show(); // Initialize all pixels to 'off'
}
void loop(void) {
int y;
y == 0;
if (server.handleClient()) {
y++;
}
else {
break;
}
server.on("/", handleRoot);
int x;
x == 0;
do {
if (y = 0) {
server.on("/rainbow", []() {
server.send(500, "text/plain", "rainbow");
rainbow(100000);
}
}
else {
server.on("/warmwhite", []() {
server.send(700, "text/plain", "warmwhite");
warmwhite(1000000);
}
}
} while (x = 0)
;
}
Und jetzt meine Frage hat jemand eine Idee wie ich das lösen kann?