Serielle übertragung zwischen Arduino und PC (Python3) 2

Hier ist die zweite Version des Python3 Empfangs Programms.
Der Empfang der seriellen Daten des Arduinos ist in diesem Programm in einen separaten Thread ausgelagert, wodurch die Möglichkeit besteht im Hauptprogramm weiterhin mit dem Benutzer zu Interagieren.

Python3 Code

#!/usr/bin/python3

# Module
import serial
import time, _thread
import os

# Thread für seriellen Empfang
def empfang():
    # Werte Variable durch global bekanntmachen
    global werte
    id = _thread.get_ident()
    print("Empfangs-thread läuft, id={0}.".format(id))
    while 1:
        try:
            werte = ser.readline().decode().split(';')
        except:
            print("Lesefehler in Thread", id)

# Hauptprogramm
# Seriellen Port Konfigurieren:
ser = serial.Serial()
# Hier den passenden Port angeben
ser.port = 'COM5' if os.name=='nt' else '/dev/ttyACM0'
ser.baudrate = 9600
ser.timeout = 1

# Port öffnen
try:
    ser.open()
    print("Port geöffnet")
except:
    print("Konnte Port nicht öffnen")
    exit(0)

# Globale Variable für die Werte
werte = 0
# Empfangs-Thread starten
_thread.start_new_thread(empfang,())
time.sleep(0.5)
while 1:    
    print("Was möchten sie machen ?\n[1] Aktuelle Werte Anzeigen\n[2] Beenden")
    antwort = input()
    # Bildschirm Löschen
    os.system('cls' if os.name=='nt' else 'clear')

    if antwort == '1':
        # AD Wert (0-1023) umrechnen auf 0-5V.
        zahl1 = int(werte[0])* 0.00489
        zahl2 = int(werte[1])* 0.00489
        # Ausgeben der Ergebnisse jeweils mit 3 Nachkommastellen.
        print("A0= {0:.3f} V   A1= {1:.3f} V   Mittelwert= {2:.3f} V".format(zahl1, zahl2, (zahl1+zahl2)/2))
    elif antwort == '2':
        print("Ende")
        exit(0)
    else:
        print("Ungültige eingabe.")

Bilder und Downloads

Arduino_Analog_Schaltung
Arduino Schaltung für Analogports

Download: Quellcode und Schaltplan

Links

  • Version 1 des Empfangs Programms ohne Threading.
  • Infos zu RS232 unter Linux in meinem anderen Beitrag „Linux und RS232“.
  • Dieser Beitrag aus kevin’s blog hat mich zu meinem Beitrag hier inspiriert.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.


*