Ledstrip patronen via webpagina knop

Arduino specifieke Software
Berichten: 9
Geregistreerd: 21 Mrt 2016, 21:52
Woonplaats: Veenendaal

Ledstrip patronen via webpagina knop

Berichtdoor pchulpjoost » 22 Mrt 2016, 08:44

Ik heb een esp8266-e12. Echt een te gek apparaatje.

Mijn idee is om dit apparaatje in mijn auto te bouwen om zo enige WS2812B led(strips) in mijn grille aan te sturen.

Een webserver kan ik zo draaien, daar heb ik knoppen op gemaakt. Als je op die knoppen klikt dan verandert de kleur. Zie code hieronder en de foto in de bijlage.

cpp code
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <NeoPixelBus.h>
#define pixelCount 16
#define colorSaturation 255
NeoPixelBus strip = NeoPixelBus(pixelCount, 4, NEO_GRB);
RgbColor red = RgbColor(colorSaturation, 0, 0);
RgbColor green = RgbColor(0, colorSaturation, 0);
RgbColor blue = RgbColor(0, 0, colorSaturation);
RgbColor white = RgbColor(colorSaturation);
RgbColor black = RgbColor(0);

const char *ssid = "SSID";
const char *password = "Wachtwoord";

MDNSResponder mdns;
ESP8266WebServer server ( 80 );
const int led = 13;
void handleRoot() {
digitalWrite ( led, 1 );
String out = "<html><head><title>Wifi light</title></head>";
out += "<body style='background-color:gray'>";
out += "<span style='display:block; width:100%; font-size:4em; font-family:Verdana; text-align:center'>Lampen Auto</span><br/>";
out += "<span style='display:block; width:100%; font-size:2em; font-family:Verdana; text-align:center'>Klik op een kleur om deze in te schakelen</span><br/>";
out += "<a href='wit'><span style='display:block; background-color:white; width:100%; height:6em;'></span></a><br/>";
out += "<a href='rood'><span style='display:block; background-color:red; width:100%; height:6em;'></span></a><br/>";
out += "<a href='groen'><span style='display:block; background-color:green; width:100%; height:6em;'></span></a><br/>";
out += "<a href='blauw'><span style='display:block; background-color:blue; width:100%; height:6em;'></span></a><br/>";
out += "<a href='uit'><span style='display:block; background-color:black; width:100%; height:6em;'></span></a>";
out += "</body>";
out += "</html>";
server.send ( 200, "text/html", out );
digitalWrite ( led, 0 );
}
void setColor(RgbColor color) {
int i;
for (i=0; i<pixelCount; i++) {
strip.SetPixelColor(i, color);
}
strip.Show();
}
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 setup ( void ) {
pinMode ( led, OUTPUT );
digitalWrite ( led, 0 );
strip.Begin();
strip.Show();
Serial.begin ( 115200 );
WiFi.begin ( ssid, password );
Serial.println ( "" );
// Wait for connection
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 );
Serial.print ( "." );
}
Serial.println ( "" );
Serial.print ( "Verbonden met " );
Serial.println ( ssid );
Serial.print ( "IP Adres: " );
Serial.println ( WiFi.localIP() );
if ( mdns.begin ( "esp8266", WiFi.localIP() ) ) {
Serial.println ( "MDNS is gestart" );
}
server.on ( "/", []() {handleRoot();} );
server.on ( "/wit", []() {setColor(white); handleRoot();} );
server.on ( "/rood", []() {setColor(red); handleRoot();} );
server.on ( "/groen", []() {setColor(green); handleRoot();} );
server.on ( "/blauw", []() {setColor(blue); handleRoot();} );
server.on ( "/uit", []() {setColor(black); handleRoot();} );
server.onNotFound ( handleNotFound );
server.begin();
Serial.println ( "Webserver is gestart" );
}
void loop ( void ) {
server.handleClient();
}


Nu wil ik eigenlijk in plaats van een kleur een patroontje hebben, maar als ik dat patroon in een loopje zet gaat hij niet compileren omdat je dan een loop in een loop zet.

Weten jullie hoe ik dit kan tackelen?

Ik heb zelf al gedacht aan dat ik met die knop een variabele zet die hij dan vervolgens aan het bezin van het programma uitleest, maar ik heb geen idee hoe ik dit aan moet pakken.

Hopelijk weten jullie raad :idea:.
Bijlagen
wifi light.png
Web pagina die wordt getoond
wifi light.png (10.45 KiB) 5077 keer bekeken
Sommige mensen dromen van grootse dingen, terwijl anderen wakker blijven en ze realiseren.

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Ledstrip patronen via webpagina knop

Berichtdoor nicoverduin » 22 Mrt 2016, 09:18

Nou een loop binnen een loop kan nog wel een heel tijdje doorgaan..... Tot de stack vol is en met 40kb ongeveer aan RAM ben je nog wel een tijdje bezig.
Je zult iets met een timer moeten doen. Nu roep je setColor() aan die de feitelijke update doet van de strip. Als je een patroon wilt maken zul je dus een routine moeten aanroepen die getimed een nieuw patroon in de strip zet en show() uitvoert. Op die manier blijft de server gewoon in tact.
Ook moet je dan iets doen op het moment dat je weer een kleur selecteert dat het patroon wordt uitgeschakeld.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 9
Geregistreerd: 21 Mrt 2016, 21:52
Woonplaats: Veenendaal

Re: Ledstrip patronen via webpagina knop

Berichtdoor pchulpjoost » 22 Mrt 2016, 09:46

Dag Nico,

Bedankt voor je snelle antwoord. Ik wil bijvoorbeeld een loopje als onderstaand inbouwen.

Code: Alles selecteren
void loop() {
  // Slower:
  // Strobe(0xff, 0x77, 0x00, 10, 100, 1000);
  // Fast:
  Strobe(0xff, 0xff, 0xff, 10, 50, 1000);
}

void Strobe(byte red, byte green, byte blue, int StrobeCount, int FlashDelay, int EndPause){
  for(int j = 0; j < StrobeCount; j++) {
    setAll(red,green,blue);
    showStrip();
    delay(FlashDelay);
    setAll(0,0,0);
    showStrip();
    delay(FlashDelay);
  }
 
 delay(EndPause);
}


Hoe pak ik dat aan? Ik heb nog niet zoveel ervaring en op internet kan ik ook niets vinden over patronen i.c.m. mijn idee. Linkjes zijn ook goed, in Engels ben ik aardig onderlegd.
Sommige mensen dromen van grootse dingen, terwijl anderen wakker blijven en ze realiseren.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Ledstrip patronen via webpagina knop

Berichtdoor nicoverduin » 22 Mrt 2016, 09:53

Dat zal niet zo gaan werken. Die ESP zit continu te luisteren en moet dus onderbroken worden als je strobe wilt aanroepen.
Je moet dus vanuit de webserver alleen een globale variabele zetten dat hij moet gaan stroben.
Daarnaast moet je ff uitzoeken hoe je een timer interrupt moet maken met de ESP. Als de timer interrupt wordt aangeroepen kijk je of de variabele is gezet. Zo ja dan doe je strobe. Het kan nog veel geavanceerder, maar probeer eerst dit voor elkaar te krijgen.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 9
Geregistreerd: 21 Mrt 2016, 21:52
Woonplaats: Veenendaal

Re: Ledstrip patronen via webpagina knop

Berichtdoor pchulpjoost » 22 Mrt 2016, 10:07

Ja, precies, maar hoe zet je een variabele en hoe lees je die dan uit?
Sommige mensen dromen van grootse dingen, terwijl anderen wakker blijven en ze realiseren.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Ledstrip patronen via webpagina knop

Berichtdoor nicoverduin » 22 Mrt 2016, 10:17

als je nu bijv. deze regel neemt:
cpp code
server.on ( "/wit", []() {
setColor(white);
handleRoot();
} );

Die doet 2 dingen:
a) hij roept setColor() aan
b) en gaat weer het hoofdscherm tonen.

Je kan dus een functie maken bijv. zetStrobeAan()
als volgt:
cpp code
void zetStrobeAan(){
stroben = true;
}

Onder je const char * passWord zet je :
cpp code
bool stroben = false;


En dan maak je ook een functie bijv. zetStrobeUit(). Dat spreekt voor zich.

Verder maak je een button (net zoals je kleuren) maar nu om die functies aan te roepen.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 9
Geregistreerd: 21 Mrt 2016, 21:52
Woonplaats: Veenendaal

Re: Ledstrip patronen via webpagina knop

Berichtdoor pchulpjoost » 22 Mrt 2016, 11:24

Bedoel je dan dat ik onderstaande code moet invullen i.p.v. setColor(white)?

Code: Alles selecteren
void zetStrobeAan(){
   stroben = true;
   }


Dan wordt het zo:

Code: Alles selecteren
server.on ( "/wit", []() {
    void zetStrobeAan(){
   stroben = true;
   }
    handleRoot();
  } );


Dat pikt hij niet namelijk.

a function-definition is not allowed here before '{' token
Sommige mensen dromen van grootse dingen, terwijl anderen wakker blijven en ze realiseren.

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Ledstrip patronen via webpagina knop

Berichtdoor nicoverduin » 22 Mrt 2016, 11:28

Nee, je moet dit is een voorbeeld.
En als jij dit invult zoals je doet, is dit misschien te hoog gegrepen..... Dan zou ik eerst een energie besteden aan de bestaande code en de basis voor het schrijven van code in de Arduino.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar Arduino software

Wie is er online?

Gebruikers in dit forum: imuwacamecuz en 93 gasten