Plötzlich kein Sketch Upload mehr möglich [Arduino 1.8.16 I MacOS M1 Chip]

Hallo zusammen,

leider habe ich ein riesiges Problem mit Arduino. Aus irgendwelchen Gründen kann ich keinen Sketch mehr auf mein Board (senseBox; ARM Cortex-M0+ Prozessor aus der SAM D21 Familie von Microchip) hochladen. Zunächst hatte alles reibungslos funktioniert. Den Sketch hatte ich auch in dieser Weise schon auf meinem Board ohne Probleme laufen. Ich habe bereits etliche Male Arduino vollständig deinstalliert (auch alle Ordner/Konfigurationen mitgelöscht), meinen Mac mehrfach neu gestartet sowie verschiedene USB-Kabel ausprobiert, leider ohne Erfolg. Ich hänge mal meinen Sketch und die aktuellen Fehlermeldungen an. Wenn mir damit jemand helfen könnte, wäre ich unendlich dankbar.

Im Voraus schon einmal vielen lieben Dank!!

Fehler beim Hochladen des Sketchs:

Der Sketch verwendet 65212 Bytes (24%) des Programmspeicherplatzes. Das Maximum sind 262144 Bytes.
Globale Variablen verwenden 7640 Bytes des dynamischen Speichers.
Erzwinge Reset durch öffnen/schließen mit 1200 bps auf dem Port /dev/cu.usbmodem101
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem101, /dev/cu.wlan-debug, /dev/tty.usbmodem101, /dev/tty.wlan-debug, } => {}
Uploading using selected port: /dev/cu.usbmodem101
/Users/USERNAME/Library/Arduino15/packages/arduino/tools/bossac/1.7.0-arduino3/bossac -i -d --port=cu.usbmodem101 -U true -i -e -w -v /var/folders/dj/mfcb5zcs6hg_bp36xw87lsc80000gn/T/arduino_build_424472/Programmcode_Mexico.ino.bin -R 
No device found on cu.usbmodem101
Set binary mode
Beim Hochladen des Sketches ist ein Fehler aufgetreten
Send auto-baud
Set binary mode

Fehler beim Kompilieren des Sketchs:

/Users/USERNAME/Desktop/Sketch_International/Programmcode_Mexico/Programmcode_Mexico.ino: In function 'void submitValues()':
/Users/USERNAME/Desktop/Sketch_International/Programmcode_Mexico/Programmcode_Mexico.ino:175:14: warning: unused variable 'c' [-Wunused-variable]
         char c = client.read();
              ^
In file included from /Users/USERNAME/Library/Arduino15/packages/arduino/hardware/samd/1.8.14/cores/arduino/api/String.h:33:0,
                 from /Users/USERNAME/Library/Arduino15/packages/arduino/hardware/samd/1.8.14/cores/arduino/api/IPAddress.h:24,
                 from /Users/USERNAME/Library/Arduino15/packages/arduino/hardware/samd/1.8.14/cores/arduino/api/ArduinoAPI.h:30,
                 from /Users/USERNAME/Library/Arduino15/packages/arduino/hardware/samd/1.8.14/cores/arduino/Arduino.h:23,
                 from sketch/Programmcode_Mexico.ino.cpp:1:
/Users/USERNAME/Library/Arduino15/packages/arduino/hardware/samd/1.8.14/cores/arduino/api/deprecated-avr-comp/avr/pgmspace.h:65:35: warning: 'char* strcpy(char*, const char*)' writing 25 bytes into a region of size 24 overflows the destination [-Wstringop-overflow=]
 #define strcpy_P(dest, src) strcpy((dest), (src))
                             ~~~~~~^~~~~~~~~~~~~~~
/Users/USERNAME/Desktop/Sketch_International/Programmcode_Mexico/Programmcode_Mexico.ino:145:3: note: in expansion of macro 'strcpy_P'
   strcpy_P(_server, server);
   ^~~~~~~~

Mein Sketch:

#include <senseBoxIO.h> // Bibliothek für Microcontroller der senseBox (ARM Cortex-M0+ Prozessor, SAM D21 von Microchip)
#include <SPI.h> // Bibliothek für die SPI-Kommunikation
#include <Wire.h> // Bibliothek für die I2C-Kommunikation
#include <Adafruit_GFX.h> // Grafikbibliothek für Displays (http://librarymanager/All#Adafruit_GFX_Library)
#include <Adafruit_SSD1306.h> // Bibliothek für SSD1306 OLED-Displays (http://librarymanager/All#Adafruit_SSD1306)
#include <WiFi101.h> // Bibliothek für die WiFi101-Kommunikation
#include <Adafruit_HDC1000.h> // Bibliothek für den HDC1000-Temperatur- und Feuchtigkeitssensor (http://librarymanager/All#Adafruit_HDC1000_Library)
#include <SdsDustSensor.h> // Bibliothek für den Feinstaubsensor
#include <VEML6070.h> // Bibliothek für den Lux-/UV-Sensor

//Zusammenfassung der Bitmap-Array 
#include "Bibliothek_Bitmap.h"      //Bitmaps in eigene Datei ausgelagert, um Code übersichtlicher zu halten


//Variablen: WLAN
char ssid[] = "TEST"; //Netzwerkname (SSID)
char pass[] = "TEST!"; //Netzwerkpasswort
int status = WL_IDLE_STATUS; //Status der WLAN-Verbindung wird in Variable "status" gespeichert

//Variablen: Senden der Messdaten
const long intervalInterval = 12000;
long time_startInterval = 0;
long time_actualInterval = 0;

//Variablen: Display initialisierung
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
Adafruit_HDC1000 hdc = Adafruit_HDC1000();

//Variablen: Sensor IDs / senseBox ID / Serveradresse: OpenSenseMap
const char SENSOR_IDD57[] PROGMEM = "KEY";
const char SENSOR_IDD58[] PROGMEM = "KEY";
const char SENSOR_IDD5C[] PROGMEM = "KEY";
const char SENSOR_IDD5B[] PROGMEM = "KEY";
const char SENSOR_IDD5D[] PROGMEM = "KEY";
const char SENSOR_IDD5A[] PROGMEM = "KEY";
static const uint8_t NUM_SENSORS = 6;
const char SENSEBOX_ID [] PROGMEM = "KEY";
const char server [] PROGMEM ="WEB";

//Variablen: Struktur der Messdaten
typedef struct measurement {
  const char *sensorId;
  float value;
} measurement;
char buffer[750]; //Zwischenspeicherung der Messdaten
measurement measurements[NUM_SENSORS]; //Sammlung von Messungen
uint8_t num_measurements = 0; //Anzahl der Messungen
const int lengthMultiplikator = 35; //Maximale Länge

//Struktur zur Darstellung der Messdaten auf dem Display - Spezifizierung der Funktion "printOnDisplay"
void printOnDisplay(String title1, String measurement1, String unit1, String title2, String measurement2, String unit2) {
  display.setCursor(0, 0);
  display.setTextSize(1);
  display.setTextColor(WHITE, BLACK);
  display.println(title1);
  display.setCursor(0, 10);
  display.setTextSize(2);
  display.print(measurement1);
  display.print(" ");
  display.setTextSize(1);
  display.println(unit1);
  display.setCursor(0, 30);
  display.setTextSize(1);
  display.println(title2);
  display.setCursor(0, 40);
  display.setTextSize(2);
  display.print(measurement2);
  display.print(" ");
  display.setTextSize(1);
  display.println(unit2);
}

////Initialisierung von Sensoren
//Feinstaub-Sensor
SdsDustSensor sds(Serial1); //Initialisiert Sensor an Serial1 (Anschluss)

float getPmData(int type) {
  PmResult pm = sds.queryPm(); //Abrufen Feinstaubwerte aus Sensor und Abspeichern als Variable
  if (pm.isOk()) {
    if (type == 25) { //wenn Messwerten PM2.5 entsprechen
      return pm.pm25;
    } else if (type == 10) { //wenn Messwerten PM10 entsprechen
      return pm.pm10;
    }
  }
  return 0; //wenn weder PM2.5 oder PM10
}
//Lux- bzw. UV-Sensor
VEML6070 veml;
//Schallpegel
float getSoundValue() {
  float v = analogRead(1) * (3.3 / 1024.0); //misst Spannung an Pin1 und konventiert diesen Wert in eine Spannung zwischen 0 - 3,3V
  float decibel = v * 50; //skaliert Wert um Schallpegel-Schätzung zu erhalten
  return decibel; //gibt berechneten Schallpegel aus
}

//Initialisierung des WLAN-Client
WiFiClient client;

////Übertragen der Daten an KARTE
//Defintion der Funktion "addMeasurements"
void addMeasurement(const char *sensorId, float value) { //fügt eine neue Messung zum Array measurements hinzu
  measurements[num_measurements].sensorId = sensorId; //sensorId miteinbeziehen
  measurements[num_measurements].value = value; //Messwert miteinbeziehen
  num_measurements++; //wenn eine Messung hinzugefügt wird, wird Wert "num_measurements" um +1 erhöht!
}

///Vorbereiten des Client
void writeMeasurementsToClient() { //Überträgt die gespeicherten Messungen an den Client
  // Iteration durch das measurements-Array
  for (uint8_t i = 0; i < num_measurements; i++) {
    sprintf_P(buffer, PSTR("%s,%9.2f\n"), measurements[i].sensorId,
              measurements[i].value);
    // Sende den Buffer (zwischengespeicherte Messwerte) an den Client
    client.print(buffer);
  }
  //Setze num_measurements bzw. zwischengespeicherte Messwerte zurück 
  num_measurements = 0; //Notiz: Variable vom Typ "uint8_t"
}


// Wenn die Verbindung erfolgreich ist, werden die Messungen gesendet und auf eine Antwort des Servers gewartet.
// Bei Verbindungsfehlern wird das System zurückgesetzt.
void submitValues() {
  //Notiz: "!=" bedeutet: wenn WiFi.status (WLAN Status) nicht gleich WL_Connected (WLAN verbunden) ist, dann in 1 und 5 Sekunden erneuten Verbindungsaufbau starten
  if (WiFi.status() != WL_CONNECTED) { 
    WiFi.disconnect();
    delay(1000); // Warte 1 Sekunde
    WiFi.begin(ssid, pass);
    delay(5000); // Warte 5 Sekunden
  }
  

  // Schließe bestehende Verbindung zum Client
  if (client.connected()) {
    client.stop();
    delay(1000);
  }

  bool connected = false;
  char _server[strlen_P(server)];
  strcpy_P(_server, server);

  // Versuche, eine Verbindung zum Server herzustellen (mehrmals)
  for (uint8_t timeout = 2; timeout != 0; timeout--) {
    Serial.println(F("connecting..."));
    connected = client.connect(_server, 80); //HTTP-Port 80
    if (connected == true) {
      //Darstellung der HTTP POST-Anfrage
      sprintf_P(buffer,
                PSTR("POST /boxes/%s/data HTTP/1.1\nAuthorization: f3b4a009ca86857126b55af500d5612d3218c9c0be2f313e4de00d6c8620086f\nHost: %s\nContent-Type: "
                     "text/csv\nConnection: close\nContent-Length: %i\n\n"),
                SENSEBOX_ID, server, num_measurements * lengthMultiplikator);
      // Sende die HTTP POST-Anfrage
      client.print(buffer);
      // Sende die Messungen
      writeMeasurementsToClient();
      // Sende eine leere Zeile, um die Anfrage zu beenden
      client.println();
      uint16_t timeout = 0;
      // Warte auf eine Antwort vom Server
      while (timeout <= 5000) {
        delay(10);
        timeout = timeout + 10;
        if (client.available()) {
          break;
        }
      }

      // Verarbeite die empfangenen Daten (falls vorhanden)
      while (client.available()) {
        char c = client.read();
        // Wenn die Verbindung unterbrochen wird, stoppe den Client
        if (!client.connected()) {
          client.stop();
          break;
        }
      }

      // Setze num_measurements zurück
      num_measurements = 0;
      break;
    }
    delay(1000);
  }

  // Bei erfolgloser Verbindung, warte und starte das System neu
  if (connected == false) {
    delay(5000);
    noInterrupts();
    NVIC_SystemReset();
    while (1)
      ;
  }
}

void setup() {
  // Starte den seriellen Monitor mit 9600 Baud (Baudrate = Übertragungsrate; 9600 Signalwechsel pro Sekunde)
  Serial.begin(9600);
  delay(500);

  //Anzeige: Humboldt Explorers Logo
  display.drawBitmap(0, 0, bitmaphe, 128, 64, WHITE); //Anzeigen eines Bitmap-Array, Position 0, 0 also linke obere Ecke; "bitmaphe" Varibale zu Bitmap-Array; Displaygröße: 128x64 Pixel, Pixelfarbe: weiß)
  display.display(); //Anzeigen des Bitmap-Bilds auf dem OLED-Display
  delay(5000); // Pause bzw. Anzeigedauer für 5 Sekunden
  display.clearDisplay(); //Löscht den Inhalt des Displays nach der Pause

  //Anzeige: HE - Warte auf Netzwerkverbindung [...]
  display.drawBitmap(0, 0, Warte_Auf_Netzwerk, 128, 64, WHITE);
  display.display();
  delay(3000); // Pause bzw. Anzeigedauer für 3 Sekunden
  display.clearDisplay();

////Aufbau einer Netzwerkverbindung
//Überprüfen ob Wifi-Shield (Hardware) vorhanden ist
  if (WiFi.status() == WL_NO_SHIELD) { //wenn kein WiFi-Shield (Hardware) vorhanden ist, stopt das Programm an dieser Stelle und geht in eine Endlosschleife über
    while (true); //Endlosschleife
  }
//Versuche, WLAN Verbindung herzustellen
  while (status != WL_CONNECTED) { //Endlosschleife: Verbindungsbesuche bis WLAN-Verbindung hergestellt wurrde
    status = WiFi.begin(ssid, pass); //nutzt die Variablen "ssid" und "pass" (wurden zu Beginn des Programmcodes definiert)
    delay(5000);
  }

// WLAN erfolgreich verbunden oder nicht
  if (WiFi.status() == WL_CONNECTED) { //wenn WLAN-Verbindung hergestellt wurde, folgendes Bitmap-Array auf dem Display anzeigen
    display.drawBitmap(0, 0, Verbindung_Hergestellt, 128, 64, WHITE);
    display.display();
    delay(3000);
    display.clearDisplay();
  } else { //wenn keine WLAN-Verbindung möglich ist, folgendes Bitmap-Array auf dem Dispaly anzeigen
    display.drawBitmap(0, 0, Verbindung_Nicht_Hergestellt, 128, 64, WHITE);
    display.display();
    delay(3000);
    display.clearDisplay();
  }

////Initialisierung der Sensoren
//Anzeige: Initialisierung der Sensoren
   display.drawBitmap(0, 0, Starte_Messungen, 128, 64, WHITE);
   display.display();
   delay(3000);
   display.clearDisplay();
   
//Starten der Sensoren - Startzeitpunkt der Messungen
  hdc.begin(); //Temperatur-/Luftfeuchtigkeit (HDC1080 Sensor-Modul)
  sds.begin(); //Feinstaubsensor (SDS011 Sensor-Modul)
  sds.setQueryReportingMode(); //Festlegen des Abfragemodus
  veml.begin(); //Lux- bzw. UV-Sensor (VEML6070)

//Zurücksetzen des Displays (sodass "Anzeige: Initalisierung der Sensoren" nicht mehr angezeigt wird
  display.clearDisplay();

}

void loop() {
//Speichert den aktuellen Zeitpunkt in der Variable time_startInterval
  time_startInterval = millis();

////Anzeigen der Messwerte auf dem OLED-Display
//Temperatur und Luftfeuchtigkeit anzeigen
  for (int i = 1; i <= 10; i += 1) { //Messwerte werden 10-mal aktualisiert
    //Die Funktion "printOnDisplay" wurde zu Beginn des Programmcodes genauer spezifiziert
    printOnDisplay("Temperatur", String(hdc.readTemperature()), "Celsius", "Luftfeuchtigkeit", String(hdc.readHumidity()), "Prozent");
    display.display();
  }
  
  display.clearDisplay();
  delay(2000);

  //Feinstaubwerte anzeigen
  for (int i = 1; i <= 10; i += 1) { //Messwerte werden 10-mal aktualisiert
    printOnDisplay("Feinstaub PM2.5", String(getPmData(25)), "ug/cm3", "Feinstaub PM10", String(getPmData(10)), "ug/cm3");
    display.display();
  }
  
  display.clearDisplay();
  delay(2000);

  //Schallpegel und UV-Licht anzeigen
  for (int i = 1; i <= 10; i += 1) { //Messwerte werden 10-mal aktualisiert
    printOnDisplay("Lautstärke", String(getSoundValue()), "Dezibel", "UV-Licht", String(veml.getUV()), "uW/cm2");
    display.display();
  }

  display.clearDisplay();
  delay(2000);

////Überprüft, ob die WLAN-Verbindung weiterhin besteht, bevor die Übertragung der Messwerte erfolgt
  //Abfrage des aktuellen WLAN-Status
  if (WiFi.status() != WL_CONNECTED) {
    // Anzeige auf dem Display, dass die Netzwerkverbindung unterbrochen ist
    display.setCursor(0, 0); //Textposition auf OLED-Display
    display.setTextSize(1); //Textgröße (möglich: 1 bis 4)
    display.setTextColor(WHITE, BLACK); //Textfarbe: weiße Schrift auf schwarzem Hintergrund
    display.println("Netzwerkverbindung verloren, versuche erneut zu verbinden..."); //Anzeige auf dem OLED-Display
    delay(2000);
    display.display();
    //"Serial.println": Anzeige im seriellen Monitor (nicht auf dem OLED-Display)
    Serial.println("Netzwerkverbindung verloren, versuche erneut zu verbinden...");
    WiFi.disconnect();
    delay(1000); // Warten, bevor ein neuer Verbindungsversuch gestartet wird
    WiFi.begin(ssid, pass); // WLAN-Verbindung erneut aufbauen
    int attempts = 0; 
    while (WiFi.status() != WL_CONNECTED && attempts < 10) { //maximal 10 Verbindungsversuche
      delay(500); // Warten, bevor der WLAN-Status erneut überprüft wird
      attempts++; //erhöht den Wert "attempts" um 1 (wenn 10 Versuche gestartet wurden, stoppt die Schleife)
    }
    
    if (WiFi.status() == WL_CONNECTED) {
      Serial.println("WLAN-Verbindung erfolgreich wiederhergestellt!");
      // Anzeige auf dem OLED-Display, dass die Verbindung erfolgreich wiederhergestellt wurde
      display.setCursor(0, 0);
      display.setTextSize(1);
      display.setTextColor(WHITE, BLACK);
      display.println("WLAN-Verbindung erfolgreich wiederhergestellt!");
      display.display();
      delay(2000);
      display.clearDisplay();
    } else {
      Serial.println("Fehler: WLAN-Verbindung konnte nicht wiederhergestellt werden.");
      // Anzeige auf dem OLED-Display, dass die Verbindung nicht wiederhergestellt werden konnte
      display.setCursor(0, 0);
      display.setTextSize(1);
      display.setTextColor(WHITE, BLACK);
      display.println("Fehler: WLAN-Verbindung konnte nicht wiederhergestellt werden.");
      display.display();
      delay(2000);
      display.clearDisplay();
      return; // Beenden der loop(), da Programm ohne WLAN-Verbindung nichts fortfahren kann
    }
  }

////Überprüfen und Senden der Messdaten an KARTE
  //Wenn die aktuelle Zeit größer ist als der Startzeitpunkt plus das Intervall (12000ms), aktualisiere die Zeit des letzten Ereignisses
   if (time_startInterval > time_actualInterval + intervalInterval) {
    time_actualInterval = millis();
    display.setCursor(0, 0);
    display.setTextSize(1);
    display.setTextColor(WHITE, BLACK);
    display.println("Sende Messdaten an KARTE ...");
    display.display();

   //Festlegen der Messwerte, welche an die KARTE übertragen werden sollen
    //"addMeasurement" wurde zu Beginn des Programmcodes definiert
    addMeasurement(SENSOR_IDD57, hdc.readTemperature());
    addMeasurement(SENSOR_IDD58, hdc.readHumidity());
    addMeasurement(SENSOR_IDD5C, getPmData(25));
    addMeasurement(SENSOR_IDD5B, getPmData(10));
    addMeasurement(SENSOR_IDD5D, getSoundValue());
    addMeasurement(SENSOR_IDD5A, veml.getUV());

   //Senden der Messdaten an die KARTE - Es erfolgen maximal drei Verbindungsversuche
    //legt fest, man bei 0 Versuchen startet (wird durch "attempts++" um +1 nach jedem erfolglosen Verbindungsversuch erhöht; wenn Variable "3" erreicht, wird der Vorang gestoppt und es erfolgen keine Verbindungsversuche mehr)
    int attempts = 0;
    bool success = false; //boolesche Variable kann hier nur "true" oder "false" annehmen - wird zunächst auf "false" gesetzt
    while (attempts < 3 && !success) { //Endlossschleife bis drei Versuche erreicht wurden (bis "int attempts = 3" erreicht wurde)
      submitValues();
      delay(1000);
      
      if (num_measurements > 0) {
        success = true; //wenn die Messdaten erfolgreich übermittelt wurden (submitValues()), dann wird Variable success auf "true" gesetzt
        Serial.println("Die Messdaten wurden erfolgreich übermittelt!");
        display.setTextColor(WHITE, BLACK);
        display.println("Die Messdaten wurden erfolgreich übermittelt!");
        display.display();
      } else {
        attempts++; //erhöht "int attempts = 0" um +1 nach jedem erfolglosen Verbindungsversuch
        Serial.println("Fehler: Messdaten konnten nicht gesendet werden. Versuche erneut...");
        delay(1000); // Warten, bevor erneut versucht wird
      }
    }

    if (!success) {
      Serial.println("Fehler: Messdaten konnten nicht gesendet werden nach mehreren Versuchen.");
      // Verbindung erneut überprüfen und ggf. wiederherstellen
      if (WiFi.status() != WL_CONNECTED) {
        Serial.println("Verbindung verloren, versuche erneut zu verbinden...");
        WiFi.disconnect();
        delay(1000); //1 Sekunde warten, bevor ein neuer Verbindungsversuch gestartet wird
        WiFi.begin(ssid, pass); //WLAN-Verbindung erneut aufbauen
        int attempts = 0;
        while (WiFi.status() != WL_CONNECTED && attempts < 10) {
          delay(500); //0,5 Sekunde warten, bis der WLAN-Status erneut überprüft wird
          attempts++;
        }
        
        if (WiFi.status() == WL_CONNECTED) {
          Serial.println("WLAN-Verbindung erfolgreich wiederhergestellt!");
          // Anzeige auf dem Display, dass die Verbindung erfolgreich wiederhergestellt wurde
          display.setCursor(0, 0);
          display.setTextSize(1);
          display.setTextColor(WHITE, BLACK);
          display.println("WLAN-Verbindung wiederhergestellt!");
          display.display();
          delay(2000);
          display.clearDisplay();
        } else {
          Serial.println("Fehler: WLAN-Verbindung konnte nicht wiederhergestellt werden.");
          // Anzeige auf dem Display, dass die Verbindung nicht wiederhergestellt werden konnte
          display.setCursor(0, 0);
          display.setTextSize(1);
          display.setTextColor(WHITE, BLACK);
          display.println("Fehler: WLAN-Verbindung konnte nicht wiederhergestellt werden.");
          display.display();
          delay(2000);
          display.clearDisplay();
        }
      }
    }

    // Display leeren und 2 Sekunden Pause vor dem nächsten Durchlauf
    display.clearDisplay();
    delay(2000);
  }
}
void setup() {
  // Starte den seriellen Monitor mit 9600 Baud (Baudrate = Übertragungsrate; 9600 Signalwechsel pro Sekunde)
  delay(500);

  //Anzeige: Humboldt Explorers Logo
  display.drawBitmap(0, 0, bitmaphe, 128, 64, WHITE); //Anzeigen eines Bitmap-Array, Position 0, 0 also linke obere Ecke; "bitmaphe" Varibale zu Bitmap-Array; Displaygröße: 128x64 Pixel, Pixelfarbe: weiß)
  display.display(); //Anzeigen des Bitmap-Bilds auf dem OLED-Display
  delay(5000); // Pause bzw. Anzeigedauer für 5 Sekunden
  display.clearDisplay(); //Löscht den Inhalt des Displays nach der Pause
  Serial.begin(9600);

und schliesse Seriellen Monitor

es sind lediglich Warnungen, keine Fehler.

Vielen lieben Dank für deine Rückmeldung! Ich hab den Code ausgebessert, allerdings kann ich immernoch keinen Sketch hochladen. Folgende Fehlermeldung erscheint weiterhin:

Wenn ich das Board durch zweimaliges Drücken auf den Reset-Knopf in den Bootloadermodus versetze, scheint ein Upload zu erfolgen. Allerdings passiert im Anschluss daran wieder nicht.

Der Sketch verwendet 65212 Bytes (24%) des Programmspeicherplatzes. Das Maximum sind 262144 Bytes.
Globale Variablen verwenden 7640 Bytes des dynamischen Speichers.
Erzwinge Reset durch öffnen/schließen mit 1200 bps auf dem Port /dev/cu.usbmodem1101
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
PORTS {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } / {/dev/cu.usbmodem1101, /dev/cu.wlan-debug, /dev/tty.usbmodem1101, /dev/tty.wlan-debug, } => {}
Uploading using selected port: /dev/cu.usbmodem1101
/Users/USERNAME/Library/Arduino15/packages/arduino/tools/bossac/1.7.0-arduino3/bossac -i -d --port=cu.usbmodem1101 -U true -i -e -w -v /var/folders/dj/mfcb5zcs6hg_bp36xw87lsc80000gn/T/arduino_build_424472/Programmcode_Mexico.ino.bin -R 
Beim Hochladen des Sketches ist ein Fehler aufgetreten
Set binary mode
No device found on cu.usbmodem1101
Send auto-baud
Set binary mode

--> An dieser Stelle stoppt der Upload; kein Sketch wurde hochgeladen. 

interessant.

1 Like

Hättest du vllt. eine Idee was ich noch ausprobieren könnte?

Ich hatte überlegt, ob ich ggf. mal den Bootloader brennen sollte, allerdings kann ich diesen Schritt nicht durchführen, da folgende Fehlermeldung erscheint:

Außerdem weiß ich auch nicht so recht, welchen Bootloader ich dafür nutzen sollte.

Open On-Chip Debugger 0.10.0+dev-gf0767a31 (2018-06-11-13:48)
Licensed under GNU GPL v2
For bug reports, read
	http://openocd.org/doc/doxygen/bugs.html
debug_level: 2
Info : auto-selecting first available session transport "swd". To override use 'transport select <transport>'.
none separate
adapter speed: 400 kHz
cortex_m reset_config sysresetreq
Error: unable to find CMSIS-DAP device

Fehler beim Brennen des Bootloaders.

es gibt Programmen vom Hersteller um HEX hoch zu laden, bestimmt M0 hat auch

Ich habe vergessen das OLED-Display zu initialisieren. Hat mich nur 7 Stunden gekostet das herauszufinden. Der Code lief die ganz Zeit ohne Probleme, haha.

Dennoch vielen lieben Dank für die Hilfe!!!

es ist nicht erlaubt zwei identische Themen starten, trotz Sprachuntershied.

Bitte beachten Sie, dass dieses Problem hier gelöst wurde:

Die meisten User nehmen es Dir auch übel wenn Du die gleiche Frage in verschiedenen Forums stellst und Du es nicht explizit im ersten Post sagst. Der Grund ist weil in einem Tread Informationen oder Antworten gegeben werden, die im anderen fehlen. Wer helfen will möchte nicht Zeit investieren für Infos / Antworten, die im anderen Tread bereits gestellt bzw gegeben wurden.

Grüße Uwe

Führt nicht zum fehlerhaften Upload, das Display tuts nur nicht.

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