ESP8266 Zwaailicht met 2 leds en wifi

goedendag
Ik ben nieuw met programeren met esp8266.

heb al wel wat ervaring met arduinos opgedaan en programeer doorgaans meer in delphi (7) en soms wat scripts in python.

Mijn vraag en probleem zijn nu:
Ik heb een 3D geprint brandweer wagentje van 8cm lang en heb daar 2 leds op gemaakt met een wemos D1-mini (van berrybase)

daar het blink programma voor aangepast zodat de leds afwisselend 3x links en dan recht knipperen. dit werkt prima.

Toen heb ik een webserver getest en werk ook prima (led aan uit etc via wifi)

maar nu is mijn vraag hoe kan ik dat knipperen van die 2 leds opnemen in de server loop, zodat na aanzetten via wifi de leds blijven knipperen tot ik ze weer uit schakel ?

Kan iemand me daar verder mee helpen ?

de code die ik geprobeerd heb (werkt voor geen meter uiteraard)

code:


// Load Wi-Fi library
#include <ESP8266WiFi.h>


// Replace with your network credentials
const char* ssid     = "XXXXXXXXXXXXXXXX";
const char* password = "XXXXXXXXX";

// Set web server port number to 80
WiFiServer server(80);

// Variable to store the HTTP request
String header;

// Auxiliar variables to store the current output state
String output5State = "off";
String output4State = "off";

// Assign output variables to GPIO pins
const int output5 = LED_BUILTIN;
const int output4 = 4;

// Current time
unsigned long currentTime = millis();
// Previous time
unsigned long previousTime = 0;
// Define timeout time in milliseconds (example: 2000ms = 2s)
const long timeoutTime = 2000;

void setup() {

    // initialize digital pin LED_BUILTIN as an output.
  pinMode(BUILTIN_LED, OUTPUT); // D5

  pinMode(15, OUTPUT); // D8


  Serial.begin(115200);
  // Initialize the output variables as outputs
  pinMode(D1, OUTPUT);
 
  // Set outputs to LOW
  digitalWrite(D1, LOW);
 
  // Connect to Wi-Fi network with SSID and password
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  // Print local IP address and start web server
  Serial.println("");
  Serial.println("WiFi connected.");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  server.begin();
}

void loop() {
  WiFiClient client = server.available();   // Listen for incoming clients

 // this is the part i want to turn of and on
// to test i only used the built in led (test with 2 external leds work)
 
              // wait for a second
  digitalWrite(BUILTIN_LED, HIGH);    // D1 Mini: turns the LED *on*
  delay(50);                         // wait
  digitalWrite(BUILTIN_LED, LOW);   // D1 Mini: turns the LED *off*
  delay(50); 
 
  digitalWrite(BUILTIN_LED, HIGH);    // D1 Mini: turns the LED *on*
  delay(50);                         // wait
  digitalWrite(BUILTIN_LED, LOW);   // D1 Mini: turns the LED *off*
  delay(50);           
  digitalWrite(BUILTIN_LED, HIGH);    // D1 Mini: turns the LED *on*
  delay(50);    // wait
  digitalWrite(BUILTIN_LED, LOW);   // D1 Mini: turns the LED *off*
  delay(200);
// ----------------------------------------------------------------------------------------------------------------

  if (client) {                             // If a new client connects,
    Serial.println("New Client.");          // print a message out in the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    currentTime = millis();
    previousTime = currentTime;
    while (client.connected() && currentTime - previousTime <= timeoutTime) { // loop while the client's connected
      currentTime = millis();
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        header += c;
        if (c == '\n') {                    // if the byte is a newline character
          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();

            // turns the GPIOs on and off
            if (header.indexOf("GET /5/on") >= 0) {
              Serial.println("GPIO 5 on");// the loop function runs over and over again forever
             
            }
            } else if (header.indexOf("GET /5/off") >= 0) {
              Serial.println("GPIO 5 off");
              output5State = "off";
              digitalWrite(output5, LOW);
            } else if (header.indexOf("GET /4/on") >= 0) {
              Serial.println("GPIO 4 on");
              output4State = "on";
              digitalWrite(output4, HIGH);
            } else if (header.indexOf("GET /4/off") >= 0) {
              Serial.println("GPIO 4 off");
              output4State = "off";
              digitalWrite(output4, LOW);
           

            // Display the HTML web page
            client.println("<!DOCTYPE html><html>");
            client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">");
            client.println("<link rel=\"icon\" href=\"data:,\">");
            // CSS to style the on/off buttons
            // Feel free to change the background-color and font-size attributes to fit your preferences
            client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
            client.println(".button { background-color: #195B6A; border: none; color: white; padding: 16px 40px;");
            client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
            client.println(".button2 {background-color: #77878A;}</style></head>");

            // Web Page Heading
            client.println("<body><h1>Brandweerwagen Web Server</h1>");

            // Display current state, and ON/OFF buttons for D1
            client.println("<p>Zwaailicht " + output5State + "</p>");
            // If the output5State is off, it displays the ON button
            if (output5State == "off") {
              client.println("<p><a href=\"/5/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/5/off\"><button class=\"button button2\">OFF</button></a></p>");
            }

            // Display current state, and ON/OFF buttons for D5
            client.println("<p>GPIO 4 - State " + output4State + "</p>");
            // If the output4State is off, it displays the ON button
            if (output4State == "off") {
              client.println("<p><a href=\"/4/on\"><button class=\"button\">ON</button></a></p>");
            } else {
              client.println("<p><a href=\"/4/off\"><button class=\"button button2\">OFF</button></a></p>");
            }
            client.println("</body></html>");

            // The HTTP response ends with another blank line
            client.println();
            // Break out of the while loop
            break;
          } else { // if you got a newline, then clear currentLine
            currentLine = "";
          }
        } else if (c != '\r') {  // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
      }
    }
    // Clear the header variable
    header = "";
    // Close the connection
    client.stop();
    Serial.println("Client disconnected.");
    Serial.println("");
  }
}

het is voor een Faller Car System autotje

Zet hem even in

code:

 tags
...

[Bericht gewijzigd door K7Jz op zaterdag 12 juni 2021 13:41:57 (99%)

Ik zou zoiets proberen:

c code:


const int output5 = LED_BUILTIN;
const int output4 = 4;
int flash_enable = 0; //add this line

....
if ( flash_enable == 1) { // add this
digitalWrite(BUILTIN_LED, HIGH); // D1 Mini: turns the LED *on*
delay(50); // wait
digitalWrite(BUILTIN_LED, LOW); // D1 Mini: turns the LED *off*
delay(50);

} // add this 


...

if (header.indexOf("GET /5/on") >= 0) {
Serial.println("GPIO 5 on");// the loop function runs over and over again forever
flash_enable = 1; //add this line


}
} else if (header.indexOf("GET /5/off") >= 0) {
Serial.println("GPIO 5 off");
output5State = "off";
flash_enable = 0; //add this line

digitalWrite(output5, LOW);

Thanks K7Jz

ik zal het proberen toe te voegen. vanmiddag op verjaardags visite en ook daar komt iemand die wel met esp's werkt die zou er ook nog even naar kijken.

Heb nu een sketch geupload die enkelt na aanzetten de leds flasht om te showen :-)

de esp zit nu in een kaal brandweer wagentje dat aangepast is op de maat van de esp. De afgewrkte brandweer wagen was te krap en maak dit weekend even een nieuwe (toch handig zo'n anycubic photon resin printer)

voor en impressie kijk: https://youtu.be/YbqYn2I9ut4

Aanpassingen gemaakt. maar nog niet kunnen uploaden doordat ik mijn datakabel ben vergeten mee te nemen en alle korte kabeltjes het niet lijken te doen (zijn voor opladen alleen)

Later vandaag de kabel ophalen en testen.

Er lijkt trouwens iets mis te gaan met je accolades:

c code:

         if (header.indexOf("GET /5/on") >= 0) {
              Serial.println("GPIO 5 on");// the loop function runs over and over again forever
             
            } // deze weg
            } else if (header.indexOf("GET /5/off") >= 0) {
              Serial.println("GPIO 5 off");
              output5State = "off";
              digitalWrite(output5, LOW);

Die twee } zijn zeer verdacht

Verderop moet er één staan en niet hierboven.

c code:

} else if (header.indexOf("GET /4/off") >= 0) {
              Serial.println("GPIO 4 off");
              output4State = "off";
              digitalWrite(output4, LOW);
            } // hier zetten


          

Verder is die webserver code spuuglelijk, als het kan even een netter voorbeeld zoeken. If statements met 90 regels in een blok zijn zeer onoverzichtelijk.

bedankt voor je reaktie.
ik heb na raad van een kennis een asynchrone webserver gevonden en na wat prutsen een knipperende 2 tal leds gemaakt in de main loop en hij blijft toch nog verder de get's afwerken.

zit alleen nog met de conversie van pin nummers

ik gebruik deze webserver code en libraries

code:


/*********
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp8266-nodemcu-async-web-server-espasyncwebserver-library/
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*********/

// Import required libraries
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>

// Replace with your network credentials
const char* ssid     = "xxxxxxxxxxxxx";
const char* password = "xxxxxxxxxxxxx";


const char* PARAM_INPUT_1 = "output";
const char* PARAM_INPUT_2 = "state";

int flash_enable = 0; //added this lines


// Create AsyncWebServer object on port 80
AsyncWebServer server(80);

const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html>
<head>
  <title>ESP Async Web Server</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" href="data:,">
  <style>
    html {font-family: Arial; display: inline-block; text-align: center;}
    h2 {font-size: 3.0rem;}
    p {font-size: 3.0rem;}
    body {max-width: 600px; margin:0px auto; padding-bottom: 25px;}
    .switch {position: relative; display: inline-block; width: 120px; height: 68px} 
    .switch input {display: none}
    .slider {position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; border-radius: 6px}
    .slider:before {position: absolute; content: ""; height: 52px; width: 52px; left: 8px; bottom: 8px; background-color: #fff; -webkit-transition: .4s; transition: .4s; border-radius: 3px}
    input:checked+.slider {background-color: #b30000}
    input:checked+.slider:before {-webkit-transform: translateX(52px); -ms-transform: translateX(52px); transform: translateX(52px)}
  </style>
</head>
<body>
  <h2>ESP Web Server</h2>
  %BUTTONPLACEHOLDER%
<script>function toggleCheckbox(element) {
  var xhr = new XMLHttpRequest();
  if(element.checked){ xhr.open("GET", "/update?output="+element.id+"&state=1", true); }
  else { xhr.open("GET", "/update?output="+element.id+"&state=0", true); }
  xhr.send();
}
</script>
</body>
</html>
)rawliteral";

// Replaces placeholder with button section in your web page
String processor(const String& var){
  //Serial.println(var);
  if(var == "BUTTONPLACEHOLDER"){
    String buttons = "";
    buttons += "<h4>Verlichting</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"5\" " + outputState(5) + "><span class=\"slider\"></span></label>";
    buttons += "<h4>Zwaailicht</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"4\" " + outputState(4) + "><span class=\"slider\"></span></label>";
    buttons += "<h4>Motor</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"2\" " + outputState(2) + "><span class=\"slider\"></span></label>";
    return buttons;
  }
  return String();
}

String outputState(int output){
  if(digitalRead(output)){
    return "checked";
  }
  else {
    return "";
  }
}

void setup(){
  // Serial port for debugging purposes
  Serial.begin(115200);
  pinMode(D4, OUTPUT);
  digitalWrite(D4, LOW);
  pinMode(D5, OUTPUT);
  digitalWrite(D5, LOW);
  pinMode(D6, OUTPUT);
  digitalWrite(D6, LOW);


  flash_enable = 0;
  
  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  // Print ESP Local IP Address
  Serial.println(WiFi.localIP());

  // Route for root / web page
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html, processor);
  });

  // Send a GET request to <ESP_IP>/update?output=<inputMessage1>&state=<inputMessage2>
  server.on("/update", HTTP_GET, [] (AsyncWebServerRequest *request) {
    String inputMessage1;
    String inputMessage2;
    // GET input1 value on <ESP_IP>/update?output=<inputMessage1>&state=<inputMessage2>
    if (request->hasParam(PARAM_INPUT_1) && request->hasParam(PARAM_INPUT_2)) {
      inputMessage1 = request->getParam(PARAM_INPUT_1)->value();
      inputMessage2 = request->getParam(PARAM_INPUT_2)->value();
      digitalWrite(inputMessage1.toInt(), inputMessage2.toInt());
    }
    else {
      inputMessage1 = "No message sent";
      inputMessage2 = "No message sent";
    }

      // extra code om flitser te starten
      if (inputMessage1 == "4" && inputMessage2 == "1"){
        flash_enable = 1;
      }
      if (inputMessage1 == "4" && inputMessage2 == "0"){
        flash_enable = 0;
      }
      //to zo ver de extra code
       
    Serial.print("Flash enable: ");
    Serial.print(flash_enable);
    Serial.print("GPIO: ");
    Serial.print(inputMessage1);
    Serial.print(" - Set to: ");
    Serial.println(inputMessage2);
    request->send(200, "text/plain", "OK");
  });

  // Start server
  server.begin();
}

void loop() {

if ( flash_enable == 1) { // added this

  digitalWrite(D5, HIGH);
  //Serial.println("Blink On");
  delay(40);
  digitalWrite(D5, LOW);
  //Serial.println("Blink Off");
  delay(40);
  digitalWrite(D5, HIGH);
  //Serial.println("Blink On");
  delay(40);
  digitalWrite(D5, LOW);
  //Serial.println("Blink Off");
  delay(40);
  digitalWrite(D5, HIGH);
  //Serial.println("Blink On");
  delay(40);
  digitalWrite(D5, LOW);
  //Serial.println("Blink Off");
  delay(200);
  digitalWrite(D6, HIGH);
  //Serial.println("Blink On");
  delay(40);
  digitalWrite(D6, LOW);
  //Serial.println("Blink Off");
  delay(40);
    digitalWrite(D6, HIGH);
  //Serial.println("Blink On");
  delay(40);
  digitalWrite(D6, LOW);
  //Serial.println("Blink Off");
  delay(40);
    digitalWrite(D6, HIGH);
  //Serial.println("Blink On");
  delay(40);
  digitalWrite(D6, LOW);
  //Serial.println("Blink Off");
  delay(40);
  } // added this 

}

ik heb het werkend! nu nog verder uitbreiden met pwm motor control en richting aanwijzers etc....

nu op zoek naar mogelijkheid er een sirene in te bouwen.

nog te doen:
ir transmitter met aankondiging van voertuig nummer Zodat er bij bv een kruising de besturende PC de des betreffende auto links of rechts of rechtdoor kan laten rijden (met een servo in de weg die een metaal draad ombuigt (soort wissel dus)

en nog veel meer wat nu allemaal nog niet zo belangrijk is.

bedankt voor de hulp zo ver!

Mooi!

1 haal het wifi wachtwoord weg.

2 voor allerlei besturing wil je niet telkens op die knipperroutine van een halve seconde wachten. Bijvoorbeeld voor claxoneren.

Je kan zoiets maken:

c code:

for (int i = 1; i <= 20; i++) { 

  if ( flash_enabled ) {
     if ( i <= 5 ) {
       digitalWrite(D5, i % 2);
     } else if ( i <= 10 ) {
       digitalWrite(D5, LOW);
     } else if  ( i <= 15 ) {
       digitalWrite(D6, i % 2);
     } else {
       digitalWrite(D6, LOW);
     }
  }

  if (siren_enabled) { run_Siren(i);} // we pass I to siren so we can play 20 notes of 40ms
  if (wipers_enabled) { run_Wipers(i);}

  delay(40);

}

Hoi.bedankt voor je reaktie.

Ik heb je stukje code toegepast, maar begrijpen doe ik het niet helemaal.
bij een reset of start van de server zijn de leds uit, na drukken op button 2 gaan beide leds aan
na nog een keer drukken gaat er 1 uit en na nog keer gaat die weer aan etc...
van knipperen is dus geen sprake zo

ik heb de variable flash_enable overal veranderd in flash_enabled en in de loop() jouw code over gezet.

zie ik iets over het hoofd ?

zie hier het resultaat van een paar dagen geleden (voor ik jouw stukje code toevoegde. https://youtu.be/YbqYn2I9ut4

ik snap de bedoeling van deze code niet, kun je die wat uitleggen wat bv i %2 doet ?

code:


/*********
  Rui Santos
  Complete project details at https://RandomNerdTutorials.com/esp8266-nodemcu-async-web-server-espasyncwebserver-library/
  The above copyright notice and this permission notice shall be included in all
  copies or substantial portions of the Software.
*********/

// Import required libraries
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>

// Replace with your network credentials
const char* ssid     = "xxxxxxxxxxxx";
const char* password = "xxxxxxxxxxxx";


const char* PARAM_INPUT_1 = "output";
const char* PARAM_INPUT_2 = "state";

int flash_enabled = 0; //begin met alles uit
int siren_enabled = 0;
int buzzerPin = D8;    // pin voor de speaker


// Create AsyncWebServer object on port 80
AsyncWebServer server(80);

const char index_html[] PROGMEM = R"rawliteral(
<!DOCTYPE HTML><html>
<head>
  <title>ESP Async Web Server</title>
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="icon" href="data:,">
  <style>
    html {font-family: Arial; display: inline-block; text-align: center;}
    h2 {font-size: 3.0rem;}
    p {font-size: 3.0rem;}
    body {max-width: 600px; margin:0px auto; padding-bottom: 25px;}
    .switch {position: relative; display: inline-block; width: 120px; height: 68px} 
    .switch input {display: none}
    .slider {position: absolute; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; border-radius: 6px}
    .slider:before {position: absolute; content: ""; height: 52px; width: 52px; left: 8px; bottom: 8px; background-color: #fff; -webkit-transition: .4s; transition: .4s; border-radius: 3px}
    input:checked+.slider {background-color: #b30000}
    input:checked+.slider:before {-webkit-transform: translateX(52px); -ms-transform: translateX(52px); transform: translateX(52px)}
  </style>
</head>
<body>
  <h2>Firetruck 01</h2>
  %BUTTONPLACEHOLDER%
<script>function toggleCheckbox(element) {
  var xhr = new XMLHttpRequest();
  if(element.checked){ xhr.open("GET", "/update?output="+element.id+"&state=1", true); }
  else { xhr.open("GET", "/update?output="+element.id+"&state=0", true); }
  xhr.send();
}
</script>
</body>
</html>
)rawliteral";

// Replaces placeholder with button section in your web page
String processor(const String& var){
  //Serial.println(var);
  if(var == "BUTTONPLACEHOLDER"){
    String buttons = "";
    buttons += "<h4>Sirene</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"5\" " + outputState(5) + "><span class=\"slider\"></span></label>";
    buttons += "<h4>Zwaailicht fx1</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"4\" " + outputState(4) + "><span class=\"slider\"></span></label>";
    buttons += "<h4>Zwaailicht fx2</h4><label class=\"switch\"><input type=\"checkbox\" onchange=\"toggleCheckbox(this)\" id=\"2\" " + outputState(2) + "><span class=\"slider\"></span></label>";
    return buttons;
  }
  return String();
}

String outputState(int output){
  if(digitalRead(output)){
    return "checked";
  }
  else {
    return "";
  }
}

void setup(){
  // Serial port for debugging purposes
  Serial.begin(115200);
  pinMode(D4, OUTPUT);
  digitalWrite(D4, LOW);
  pinMode(D5, OUTPUT);
  digitalWrite(D5, LOW);
  pinMode(D6, OUTPUT);
  digitalWrite(D6, LOW);


  flash_enabled = 0;
  
  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("Connecting to WiFi..");
  }

  // Print ESP Local IP Address
  Serial.println(WiFi.localIP());

  // Route for root / web page
  server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send_P(200, "text/html", index_html, processor);
  });

  // Send a GET request to <ESP_IP>/update?output=<inputMessage1>&state=<inputMessage2>
  server.on("/update", HTTP_GET, [] (AsyncWebServerRequest *request) {
    String inputMessage1;
    String inputMessage2;
    // GET input1 value on <ESP_IP>/update?output=<inputMessage1>&state=<inputMessage2>
    if (request->hasParam(PARAM_INPUT_1) && request->hasParam(PARAM_INPUT_2)) {
      inputMessage1 = request->getParam(PARAM_INPUT_1)->value();
      inputMessage2 = request->getParam(PARAM_INPUT_2)->value();
     
    }
    else {
      inputMessage1 = "No message sent";
      inputMessage2 = "No message sent";
    }

      // flits effekt 1
      if (inputMessage1 == "4" && inputMessage2 == "1"){
        flash_enabled = 1;
      }
      if (inputMessage1 == "4" && inputMessage2 == "0"){
        flash_enabled = 0;
      }

//to zo ver de extra code
       
    Serial.print("Flash enabled: ");
    Serial.print(flash_enabled);
    Serial.print("GPIO: ");
    Serial.print(inputMessage1);
    Serial.print(" - Set to: ");
    Serial.println(inputMessage2);
    request->send(200, "text/plain", "OK");
  });

  // Start server
  server.begin();
}

void loop() {
for (int i = 1; i <= 20; i++) {
  
  if ( flash_enabled ) { 
    if ( i <= 5 ) {
      digitalWrite(D5, i % 2);
    } else if ( i <= 10 ) {
      digitalWrite(D5, LOW);
    } else if ( i <= 15 ) {
      digitalWrite(D6, i % 2);// hier staat dus eigenlijk '0' ipv High ?
    } else if ( i <= 15 ) {
      digitalWrite(D6, LOW);
    }
  }
 
}
}

[Bericht gewijzigd door Richard63 op donderdag 17 juni 2021 20:07:53 (71%)

De delay is weg.

i % 2 (modulo 2) is het getal wat overblijft na een zo hoog mogelijk veelvoud van 2 aftrekken:

1 wordt 1
2 wordt 0
3 wirdt 1
4 wordt 0
5 wordt 1

3 knippers dus

Bij 6 tm 10 gaat hij altijd uit dat is 200 ms

Bij 11 tm 15 krijg he weer 3 knippers etcetera

heb de helo code geupload, snap nog niet waarom het niet werkt nu.

Op 17 juni 2021 23:27:41 schreef Richard63:
heb de helo code geupload, snap nog niet waarom het niet werkt nu.

Vergeet het, misschien zit er een denkfout in van mijn kant. Het is slechts een voorbeeld.

c code:




void loop() {
for (int i = 1; i <= 20; i++) {
  
  if ( flash_enabled ) { 
    if ( i <= 5 ) {
      digitalWrite(D5, i % 2);
    } else if ( i <= 10 ) {
      digitalWrite(D5, LOW);
    } else if ( i <= 15 ) {
      digitalWrite(D6, i % 2);// hier staat afwisselend 0 en 1


    } else { //hier moet geen else if 
      digitalWrite(D6, LOW);
    }
  
    //hier moet nog een
    delay (40);
 
}
}

[Bericht gewijzigd door K7Jz op donderdag 17 juni 2021 23:36:16 (47%)

Bedankt, ik heb het met een kleine aanpassing werkend (bij flash_enabled = 0 tevens beide digitale pins op LOW zetten omdat het af en toe voor kon komen dat hij halverwege de routine stopte en een led aan liet staan.

Ik ga er nu mee verder werken en kijken of ik het verder kan uitbouwen.