Mehrere Daten via Serielle Schnittstelle senden

Hallo Liebes Forum,

ich habe derzeit viele Probleme gelöst aber es tauchen dagegen immer wieder neue auf :slight_smile:

Mein aktuelles Problem ist es, dass ich gerne zwei bismehrere male Daten mit der Serielle Schnittstelle senden möchte.

Also x = Serial.read() ; y=Serial.read(); zum Beispiel

Hatte jemand schonmal das selbe Problem? Ich hoffe ihr könnt mir helfen.

LG

es gibt eine libary hierfür. ich habe vergessen wie die heisst, aber ich schau mal nach sobald ich zu haus bin.

z.B. CmdMessenger Library

combie:
z.B. CmdMessenger Library

Ist es möglich mit dieser Library mit der seriellen schnittstelle zu kommunizieren?

LG

selim94:
Ist es möglich mit dieser Library mit der seriellen schnittstelle zu kommunizieren?

Der erste Absatz:

CmdMessenger is a messaging library for the Arduino Platform (and .NET/Mono platform). It uses the serial port as transport layer.

Überlesen?

Der Google Übersetzer macht daraus:

CmdMessenger ist eine Messaging-Bibliothek für die Arduino-Plattform (und .NET / Mono-Plattform). Es verwendet die serielle Schnittstelle als Transportschicht.

? ? ? ? ?

combie:
Der erste Absatz:Überlesen?

Der Google Übersetzer macht daraus:
? ? ? ? ?

Sorry :smiley:

Vielen Dank!!!!

Mein Ziel ist es dem Arduino 2 Vektoren zu übergeben und er soll daraus das Skalarprodukt berechnen

Interessant!

Ein kleiner Arduino als mathematischer Coprozessor...

combie:
Interessant!

Ein kleiner Arduino als mathematischer Coprozessor...

Ja genau:D

Ich habe ein Simulationsprogramm in Matlab mit dem ich Energiewerte berechne. Ich möchte aber, dass die Berechnungen über das Board ablaufen. Es sind auch keine allzu großen Operationen.

Sonst nochmal danke für deine Antworten!

Ich habe ein Simulationsprogramm in Matlab mit dem ich Energiewerte berechne. Ich möchte aber, dass die Berechnungen über das Board ablaufen.

Es kommt also nicht darauf an, ob es sinnvoll ist, sondern dass man etwas lernt.
Damit fallen alle Libraries weg. Finde ich. Sonst könntest du es ja gleich ganz einfach in matlab machen.

Die Haupt-Arbeit ist eine Serielle Kommunikation zwischen Matlab und Arduino. Wobei matlab etwas sendet und eine Antwort erwartet.

Der große Vorteil der seriellen Kommunikation ist, dass man die Übertragung menschen-lesbar machen kann. Und somit beide Seiten unabhängig voneinander testen kann.

Wenn du dein matlab soweit hast, dass es z.B. "(1.0,1.0) o (1.2,2.3)\n" sendet, wartet und richtig weitermacht, wenn kurz darauf eine Antwort wie "3.500\n" kommt, hast du die erste Hürde geschafft.

Dazu musst du erstmal nur diesen Sketch laden :

void setup() {
   Serial.begin(9600);
}
 
void loop() {
  while (Serial.available() ) {
    char c = Serial.read();
    if (c == '\n') {
      Serial.println(3.5,3);
    } 
  }
}

Dummy1 :wink:

Das nächste wäre dann eine generelle Fehlerbehandlung, und hauptsächlich die richtige matlab Reaktion darauf.

const byte MAXSIZE = 40;
void setup() {
   Serial.begin(9600);
}

char buffer[MAXSIZE]; 

void loop() {
  byte size;
  while (Serial.available() ) {
    char c; // das letzte empfangene Zeichen
    if (size < MAXSIZE)
        buffer[size++] = c = Serial.read();
    else
        c = Serial.read();  // Auch überlange Zeilen weglesen!

    if (c == '\n') {
      if ( size > 23 ) Serial.println("Error 1");
      else Serial.println(3.5,3);
      size = 0;
    } 
  }
}

Dummy2 :wink:

Hier nur als Dummy:
"(1.0,1.0) o (1.2,2.3)\n" -> 3.5
"(10.0,100.0,0) x (1.23, 2.35, 3.9)\n" -> "Error"

Wenn du die matlab-Reaktion darauf gelöst hast,
kannst du dir überlegen, was der Arduino können soll:

  • 2 Vektoren erkennen und einen Operator dazwischen ?
  • Vektoren unterschiedlicher Dimensionen ?
  • Welche Ergebnistypen : Fehler, Skalar, Vektor, Matrix, ... ?
  • Beliebig viele Leerzeichen zwischen den Zahlen ?

Na dann : Fummelige Fleissarbeit ist angesagt. Aber das wolltest du doch so, oder?