Warum funktioniert der sketch nur bei jedem 2. mal?

Hallo zusammen,

Ich experimentiere grade mit dem Nano 33 iot rum und ich habe ein Phänomen, welches ich schon bei einem alten Riesenprojekt mit einem Arduino Due habe(Da ist es die Tastaturemulation).

Es funktionieren manche sachen nur jedes 2. mal nach einem Reset. ich dachte bei dem Due (weil der code echt riesig ist), dass ich einen Fehler gemacht habe, den ich aber nicht finde...

jetzt passiert es bei dem Nano 33 iot genau so!

Schaltung:
Nano 33 iot an USB angeschlossen.

Code:
Template aus der ArtnetnodeWifi Bibliothek: ArtnetnodeWifiTransmit

#include <ArtnetnodeWifi.h>


//Wifi settings
const char* ssid = "ssid"; // CHANGE FOR YOUR SETUP
const char* password = "pAsSwOrD"; // CHANGE FOR YOUR SETUP

// Artnet settings
const int startUniverse = 0; // CHANGE FOR YOUR SETUP for most software this is 1, some software send out artnet first universe as 0.
const char host[] = "2.1.1.1"; // CHANGE FOR YOUR SETUP your destination


ArtnetnodeWifi artnet;


// connect to wifi – returns true if successful or false if not
boolean ConnectWifi(void)
{
  boolean state = true;
  int i = 0;

  WiFi.begin(ssid, password);
  Serial.println("");
  Serial.println("Connecting to WiFi");

  // Wait for connection
  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
    if (i > 20){
      state = false;
      break;
    }
    i++;
  }
  if (state) {
    Serial.println("");
    Serial.print("Connected to ");
    Serial.println(ssid);
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
  } else {
    Serial.println("");
    Serial.println("Connection failed.");
  }

  return state;
}

void setup()
{
  Serial.begin(115200);
  ConnectWifi();
  artnet.begin(host);
  artnet.setLength(3);
  artnet.setUniverse(startUniverse);
  artnet.setShortName("Transmit Example"); // max. 17 characters
  artnet.setLongName("ArtnetnodeWifiTransmit Example"); // max. 63 characters
  artnet.setPortType(0, 0x40);
}

void loop()
{
  uint8_t i;
  uint8_t j;

  // set the first 3 byte to all the same value. A RGB lamp will show a ramp-up white.
  for (j = 0; j < 255; j++) {
    for (i = 0; i < 3; i++) {
      artnet.setByte(i, j);
    }
    // send out the Art-Net DMX data
    artnet.write();

    artnet.read();
    delay(100);
  }
}

Ich habe nur folgendes auf meine Situation geändert:

const char* ssid = "ssid"; // CHANGE FOR YOUR SETUP
const char* password = "pAsSwOrD"; // CHANGE FOR YOUR SETUP
const char host[] = "2.1.1.1"; // CHANGE FOR YOUR SETUP your destination

Sketch kompiliert und hochgeladen - > Wifi nicht verbunden
fehler gesucht am ende aber nichts geändert
Sketch kompiliert und hochgeladen - > Wifi verbunden - ESP32 mit WLED ändert die Farbe

Wannanders weiter gemacht...

Spannung auf µC gegeben -> keine Funktion
reset gedrückt - > Wifi verbunden - ESP32 mit WLED ändert die Farbe
reset gedrückt - > keine Funktion
reset gedrückt - > Wifi verbunden - ESP32 mit WLED ändert die Farbe
reset gedrückt - > keine Funktion
reset gedrückt - > Wifi verbunden - ESP32 mit WLED ändert die Farbe
reset gedrückt - > keine Funktion

Woran liegt das? was muss man tun, damit das nicht passiert?

Ich habe bei meinem alten Projekt übrigens einen hardware reset mit Zeitverzögerung eingebaut um das zu beheben, aber jetzt das zweite mal? ich will dem auf den Grund gehen!

Erste Frage lässt sich nicht beantworten.
Der zweite Teil könnte

evtl. durch noch längere Zeit für die Wiederholung des Connect, entweder die Wartezeit oder die Anzahl der Durchläufe erhöhen.

oder im setup den Rückgabewert von

abfragen und dort mehrfach eine Schleife durchlaufen.

Wenn es funktioniert, dann verbindet er sofort, es kommt nichtmal ein Punkt, also geht jedes 2. mal die verbindung sofort und bei den anderen malen nicht innerhalb der 10 Sekunden.

Ich hätte das nur mal zum Test umgeschrieben.... kannst ja mal sehen, was passiert:

boolean ConnectWifi(void)
{
  boolean state = true;
  int i = 0;
  // Wait for connection
  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    WiFi.begin(ssid, password);
    Serial.println("");
    Serial.println("Connecting to WiFi");
    Serial.print(".");
    if (i > 20)
    {
      state = false;
      break;
    }
    i++;
  }
  if (state)
  {
    Serial.println("");
    Serial.print("Connected to ");
    Serial.println(ssid);
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());
  }
  else
  {
    Serial.println("");
    Serial.println("Connection failed.");
  }
  return state;
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.