unoserialcomm — Arduino Uno simulation

An interactive Arduino Uno circuit simulation you can run free in your browser on Velxio, by bmw550i.

Components

Sketch code

#include <Arduino.h>
#include <SoftwareSerial.h>

SoftwareSerial altSerial(2, 3); // RX = 2, TX = 3

struct MyDataPackage {
  uint16_t messageId;
  int16_t temperature;
};

MyDataPackage rxPayload;

void setup() {
  Serial.begin(9600);
  altSerial.begin(4800);
  Serial.println("UNO Empfänger wartet mit Sync-Schutz...");
}

void loop() {
  // Wir brauchen mindestens den Start-Marker (1 Byte) + Struct-Größe (4 Bytes) = 5 Bytes
  if (altSerial.available() >= (1 + sizeof(MyDataPackage))) {
    
    // 1. Prüfen, ob das erste Byte unser Start-Marker '#' ist
    if (altSerial.read() == '#') {
      
      // 2. Wenn ja, lesen wir die folgenden Bytes direkt in die Struct ein
      uint8_t* structPointer = (uint8_t*)&rxPayload;
      for (size_t i = 0; i < sizeof(MyDataPackage); i++) {
        structPointer[i] = altSerial.read();
      }

      // 3. Saubere Ausgabe im Terminal
      Serial.println(">>> Daten erfolgreich empfangen! <<<");
      Serial.print("Paket ID: ");   Serial.println(rxPayload.messageId);
      Serial.print("Temperatur: "); Serial.print((float)rxPayload.temperature / 10.0); Serial.println(" C");
      Serial.println("------------------------------------");
      
    } else {
      // Fehlersatz: Wenn es nicht '#' war, verwerfen wir das Byte, um den Puffer aufzuräumen
      // Das verhindert, dass der Puffer dauerhaft blockiert blockiert bleibt
    }
  }
}

More projects by bmw550i