Seriell Integer übertragen

Moin,

ich habe jetzt etwas recherchiert und noch nichts passendes gefunden. Also ich habe gerade noch einen esp 32 (soll ersetzt werden durch einen At Mega) darauf sollen via serieller USB-Übertragung kontinuirlich 2 zahlen zwischen 0 und -180 übertragen werden können.

Es ist aber wichtig, dass es Integer sind, da ich diese Zahlen hinterher für 2 Servo Motoren verwendet werden sollen.

Gesendet werden die Daten von einem Python Skript.

Wäre super wenn mir jemand helfen könnte

Hallo yarma

Herzlich Willkommen im weltbesten Arduino Forum der Welt.

Werfe mal einen Blick in das IDE. Dort findest du das Beispiel mit dem Namen "SerialEvent" für dein Projekt.

Ich hoffe das Beispiel hilft dir weiter.

Um sicher zu stellen, dass Du immer einen vollen Satz bekommst, solltest Du die beiden Zahlen mit ; trennen und die Zeile mit einem Zeilenvorschub abschließen.
Einlesen in einen Puffer mit readBytesUntil oder einer eigenen Leseroutine, trennen mit strtok und umwandeln mit atoi.

Hier habe ich mal sowas für die Steuerung einer RGB-LED gemacht.

Gruß Tommy

Vielen dank

Nein, nicht wichtig .
In Wirklichkeit überträgst du einen Text, also sowas wie z.B.

30;135
31;95
40;88

Wichtig ist, dass du jeweils das Zeilenende und das Trennzeichen zwischen den zwei Zahlen erkennst, und also die zwei Zahlen unterscheiden kannst.

Aus dem Text musst du dann im Arduino zwei Zahlen machen. Da hat dir @Tommy56 schon atoi als Tip gegeben.

Eine Zahl von 0 bis 180 passt in einen Byte rein. Sende zwei Bytes hintereinander ohne Trennzeichen und Zeilenendezeichen mit kleinen Pausen danach.

import serial
import time
ser = serial.Serial('/dev/ttyACM0', 9600, serial.EIGHTBITS, serial.PARITY_NONE, serial.STOPBITS_ONE)
while(true):
    ser.write(180)
    ser.write(90)
    time.sleep(0.05)
...
if(Serial.available()>1){
  servo1.write(Serial.read());
  servo2.write(Serial.read());
  while(Serial.available()>0)Serial.read();
}

ein eindeutiges Satzende (in Form eines CR/LF) finde ich verlässlichlicher als eine Übertragungspause.

Ich würde es nach dem hier aufbauen:
Serial Input Basics - updated
(Lesetipp!)

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