Bonjour,
Je bosse avec :
ESP32 vroom
neopixel
Ide Arduino
Je débute un peu mais à force A force de lecture de tuto j'arrive à un server web à partir duquel je veux commander les effets lumineux d'un ruban de led adressables (ws2812)
Mes scénarios lumineux sont codés dans des fonctions et durent plusieurs minutes. Je souhaite les lancer en cliquant à partir de bouton sur une page web.
Mon pb : lorque je clique sur un bouton, l'effet se déroule bien, mais tant que la fonction n'est pas terminée je ne peux pas reprendre la main...
Je voudrais qu'à chaque clic sur un bouton, la fonction se déclenche aussitôt.
#include "SPIFFS.h"
#include "WiFi.h"
#include "ESPAsyncWebServer.h"
#include <Adafruit_NeoPixel.h>
#include <ESPmDNS.h>
const char* ssid= "toto";
// Set password
const char* password = "tata";
// Set Access Point IP
IPAddress apIP(10, 10, 10, 1);
int max_connection =1;
int compteur = 0;
int pos1; int pos2; int pos3; int pos4; int pos5; // position led sur une même bande
#define PIN3 27 // pin connecté
#define NUMPIXELS 37 // Nb de Led
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
int delayval = 10; // delay for half a second
int prog =3; // numero du scenario lumière activé par défaut
AsyncWebServer server(80);
void setup(){
Serial.begin(115200);
pixels.begin(); // This initializes the NeoPixel library.
if(!SPIFFS.begin()){
Serial.println("Erreur de récupération des fichiers sur SPIFFS");
return;
}
// WiFi.begin(ssid, password);
// Set Access Point configuration
WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0)); // ss réseau FF FF FF 00
WiFi.softAP(ssid, password, 1, 0, max_connection);
// while (WiFi.status() != WL_CONNECTED) {
// delay(1000);
// Serial.println("Connecting to WiFi..");
// }
Serial.println("Connecting to WiFi..");
Serial.println(WiFi.localIP());
server.on("/html", HTTP_GET, [](AsyncWebServerRequest *request){ // Page de menu par défaut
request->send(SPIFFS, "/vib.html", "text/html");
});
server.on("/UN", HTTP_GET, [](AsyncWebServerRequest *request){ // page UN
request->send(SPIFFS, "/vib1.html", "text/html");
prog=1;
});
server.on("/DE", HTTP_GET, [](AsyncWebServerRequest *request){ // page DE
request->send(SPIFFS, "/vib2.html", "text/html");
prog=2;
});
server.on("/TR", HTTP_GET, [](AsyncWebServerRequest *request){ // page DE
request->send(SPIFFS, "/vib.html", "text/html");
prog=3;
});
server.begin();
}
void loop(){
scenario(prog);
}// end loop
//---------------------------------------- Fonctions ----------------------------------------------
//-------------------------------------------------------------------------------------------------
// choix du scénario lumière
void scenario(int progLocal) {
Serial.println("programme dans boucle");
Serial.println(progLocal);
switch (progLocal) {
case 1:
turquoise (0,255,255,0,delayval ); ...
break;
case 2:
turquoise (0,255,255,255,delayval );
retour(NUMPIXELS,0,0,0, 10); ...
break;
default:
turquoise (0,255,0,0,100); ...
break;
}// end switch
} // end scenario
void turquoise (int i, int r, int g, int b, int delayLocal){
for(i ;i<NUMPIXELS;i++){
// pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
pixels.setPixelColor(i, pixels.Color(r,g,b)); // Moderately bright green color.
pixels.show(); // This sends the updated pixel color to the hardware.
delay(delayLocal); // Delay for a period of time (in milliseconds).
}
}
void retour (int i, int r, int g, int b, int delayLocal ){
for(i;i>=0;i--){
// pixels.Color takes RGB values, from 0,0,0 up to 255,255,255
pixels.setPixelColor(i, pixels.Color(r,g,b)); // Moderately bright green color.
pixels.show(); // This sends the updated pixel color to the hardware.
delay(delayLocal); // Delay for a period of time (in milliseconds).
}
}
Je vous mets mon code. Mon pb est que une fois que la fct scenario est lancée elle ne prend plus en compte le changement d'argument envoyé par le client web... et là j'ai atteind mes limites de débutant
Merci d'avance