Also bis jetzt funktioniert das sehr gut. Warum sollte ich also daran etwas ändern?Ist immer noch nicht richtig.
Variable splitten
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
@noisefloor
@AngryJones: niemand hier glaubt Dir, dass es sehr gut funktioniert, weil alles was Du bisher gezeigt hast, nicht funktionierender Code war. Also entweder vera*** Du uns hier, zeigst absichtlich Quatsch, lebst in einem Paralleluniversum, wo es eine andere Art Python gibt oder hast eine sehr seltsame Ansicht von "funktioniert", weil Du das Programm noch nie ausgeführt hast.
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Folgendes Programm funktioniert perfekt:
Hier ein Bild:
Code: Alles auswählen
# -*- coding: utf-8 -*-
import serial
import time
import atexit
serial = serial.Serial('COM3', 9600)
serial.open
time.sleep(1)
try:
def Split_Variablen():
uv = 0
ur1 = 0
ur2 = 0
while True:
try:
response = serial.readline()
#print (response)
if response == b'US1\r\n':
response = serial.readline()
uv =int(response.split(b"=")[-1])
elif response == b'US2\r\n':
response = serial.readline()
ur1 =int(response.split(b"=")[-1])
elif response == b'US3\r\n':
response = serial.readline()
ur2 =int(response.split(b"=")[-1])
print("UV=" ,uv)
print("UR1=" ,ur1)
print("UR2=" ,ur2)
except ValueError:
print("Error")
Split_Variablen()
except KeyboardInterrupt:
s.close()
turnOffMotors
- __blackjack__
- User
- Beiträge: 13110
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@AngryJones: Und es enthält trotzdem Fehler die bereits angesprochen wurden.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Achso, ihr meint das mit s.close.
Ja gut, finde ich zwar nicht so schlimm diesen Error als letzte Aktion von dem Programm zu
erhalten, aber habe ich jetzt geändert. Ist mir sonst auch nicht so aufgefallen, weil ich das Programm immer
direkt "kille".
Ja gut, finde ich zwar nicht so schlimm diesen Error als letzte Aktion von dem Programm zu
erhalten, aber habe ich jetzt geändert. Ist mir sonst auch nicht so aufgefallen, weil ich das Programm immer
direkt "kille".
- noisefloor
- User
- Beiträge: 3856
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
`turnOffMotors` lässt dein gezeigtes Programm auch crashen. `serial.open` ist auch falsch, lässt dein Programm aber immerhin nicht crashen.
Gruß, noisefloor
`turnOffMotors` lässt dein gezeigtes Programm auch crashen. `serial.open` ist auch falsch, lässt dein Programm aber immerhin nicht crashen.
Gruß, noisefloor
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
@noisefloor Danke für deine Antwort. Hab ich bereits behoben. Ich bekomme auch keinen Error mehr. Auch nicht bei Ctrl + C.
Das Ganze hab ich nun auch in das eigentliche Programm eingebaut.
Mir ist klar das dort noch ein paar Elemente fehlen können.
Hier ein kleiner Zwischenstand (Das Programm nutzt einen Arduino, einen Rapberry PI und ein Motor Hat.) :
Code: Alles auswählen
import serial
import time
import atexit
serial = serial.Serial('COM3', 9600)
serial.open
time.sleep(1)
try:
def Split_Variablen():
uv = 0
ur1 = 0
ur2 = 0
while True:
try:
response = serial.readline()
#print (response)
if response == b'US1\r\n':
response = serial.readline()
uv =int(response.split(b"=")[-1])
elif response == b'US2\r\n':
response = serial.readline()
ur1 =int(response.split(b"=")[-1])
elif response == b'US3\r\n':
response = serial.readline()
ur2 =int(response.split(b"=")[-1])
print("UV=" ,uv)
print("UR1=" ,ur1)
print("UR2=" ,ur2)
except ValueError:
print("Error")
Split_Variablen()
except KeyboardInterrupt:
serial.close()
Mir ist klar das dort noch ein paar Elemente fehlen können.
Hier ein kleiner Zwischenstand (Das Programm nutzt einen Arduino, einen Rapberry PI und ein Motor Hat.) :
Code: Alles auswählen
# -*- coding: utf-8 -*-
import serial #OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//
import time
import RPi.GPIO as GPIO
import atexit
from Adafruit_MotorHAT import Adafruit_MotorHAT, Adafruit_DCMotor
# create a default object, no changes to I2C address or frequency
mh = Adafruit_MotorHAT(addr=0x60)
# recommended for auto-disabling motors on shutdown!
def turnOffMotors():
mh.getMotor(1).run(Adafruit_MotorHAT.RELEASE)
mh.getMotor(2).run(Adafruit_MotorHAT.RELEASE)
atexit.register(turnOffMotors)
#DC motor test
#Links
Motor_Rechts = mh.getMotor(1)
#Rechts
Motor_Links = mh.getMotor(2)
Abbiegezeit = 1
Motor_Rechts.setSpeed(100)
Motor_Links.setSpeed(100)
serial = serial.Serial('/dev/ttyACM0', 9600) #Für Arduino
#serial = serial.Serial('COM3', 9600) #Für PC
serial.open
time.sleep(1)
def Vorwarts(motor): #Definiere Funktionen der Motoren
motor.run(Adafruit_MotorHAT.FORWARD)
def Ruckwarts(motor):
motor.run(Adafruit_MotorHAT.BACKWARD)
def Stop(motor):
motor.run(Adafruit_MotorHAT.RELEASE)
uv = 0
ur1 = 0
ur2 = 0
while True:
try:
#Split Variablen
try:
response = serial.readline()
#print (response)
if response == b'US1\r\n':
response = serial.readline()
uv =int(response.split(b"=")[-1])
elif response == b'US2\r\n':
response = serial.readline()
ur1 =int(response.split(b"=")[-1])
elif response == b'US3\r\n':
response = serial.readline()
ur2 =int(response.split(b"=")[-1])
print("UV=" ,uv)
print("UR1=" ,ur1)
print("UR2=" ,ur2)
Sensor_Vorne = uv
Sensor_Rechts = ur1
Sensor_Rechts_2 = ur2
except ValueError:
print("ValueError")
#Rechte Hand
if Sensor_Rechts_2 < 20 and Sensor_Vorne < 20:
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(2)
Stop(Motor_Rechts)
Stop(Motor_Links)
Ruckwarts(Motor_Rechts)
Ruckwarts(Motor_Links)
time.sleep(1)
Vorwarts(Motor_Rechts)
time.sleep(Abbiegezeit)
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(1.5)
elif Sensor_Rechts_2 > 20 and Sensor_Vorne > 20:
Ruckwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(Abbiegezeit)
Vorwarts(Motor_Rechts)
Motor_Links .Vorwaerts
time.sleep(1.5)
elif Sensor_Rechts_2 > 20 and Sensor_Vorne < 20:
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(2)
Stop(Motor_Rechts)
Stop(Motor_Links)
Ruckwarts(Motor_Rechts)
Ruckwarts(Motor_Links)
time.sleep(1)
Ruckwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(Abbiegezeit)
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(1.5)
elif Sensor_Rechts_2 < 20 and Sensor_Vorne > 20:
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
#Motor Geschwindigkeit
if Sensor_Rechts_1 > Sensor_Rechts_2:
Motor_Links. setSpeed(150)
Motor_Rechts. setSpeed(100)
elif Sensor_Rechts_1 < Sensor_Rechts_2:
Motor_Links. setSpeed(100)
Motor_Rechts. setSpeed(150)
elif Sensor_Rechts_1 == Sensor_Rechts_2:
Motor_Rechts. setSpeed(100)
Motor_Links. setSpeed(100)
except KeyboardInterrupt:
turnOffMotors()
serial.close()
print("Programm wurde gestoppt!!")
- __blackjack__
- User
- Beiträge: 13110
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Und wieder ein Programm das nicht funktioniert weil es mit einem `NameError` abbricht, was Du also wieder nicht ausprobiert hast…
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
@blackjack Also das erste funktioniert auf jeden Fall. Das zweite habe ich heute ausprobiert und die Fehler behoben.
Das 2. Programm funktioniert jetzt zwar, jedoch nicht so wie es sollte. Der Arduino scheint im voraus Werte in die Serial.readline zu schreiben, wodurch eine Verzögerung entsteht.
Z.B realisiert das Programm es erst 5 sek. später, wenn ich meine Hand vor den US- Sensor halte.
Hab jetzt nicht korrekte Version hier rein kopiert, weil diese auf dem Raspberry Pi liegt.
Allerdings habe ich glaube ich alle Fehler die aufgetreten sind auch hier ausgebessert.
Falls trotzdem noch ein Error auftreten sollte kopiere mir bitte mal den ganzen Fehlercode.
Wie gesagt war im oberen Beitrag die obere Version die getestete und die untere die ungetestete.
Das 2. Programm funktioniert jetzt zwar, jedoch nicht so wie es sollte. Der Arduino scheint im voraus Werte in die Serial.readline zu schreiben, wodurch eine Verzögerung entsteht.
Z.B realisiert das Programm es erst 5 sek. später, wenn ich meine Hand vor den US- Sensor halte.
Hab jetzt nicht korrekte Version hier rein kopiert, weil diese auf dem Raspberry Pi liegt.
Allerdings habe ich glaube ich alle Fehler die aufgetreten sind auch hier ausgebessert.
Falls trotzdem noch ein Error auftreten sollte kopiere mir bitte mal den ganzen Fehlercode.
Wie gesagt war im oberen Beitrag die obere Version die getestete und die untere die ungetestete.
Code: Alles auswählen
# -*- coding: utf-8 -*-
import serial #OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//
import time
import RPi.GPIO as GPIO
import atexit
from Adafruit_MotorHAT import Adafruit_MotorHAT, Adafruit_DCMotor
# create a default object, no changes to I2C address or frequency
mh = Adafruit_MotorHAT(addr=0x60)
# recommended for auto-disabling motors on shutdown!
def turnOffMotors():
mh.getMotor(1).run(Adafruit_MotorHAT.RELEASE)
mh.getMotor(2).run(Adafruit_MotorHAT.RELEASE)
atexit.register(turnOffMotors)
#DC motor test
#Links
Motor_Rechts = mh.getMotor(1)
#Rechts
Motor_Links = mh.getMotor(2)
Abbiegezeit = 1
Motor_Rechts.setSpeed(100)
Motor_Links.setSpeed(100)
serial = serial.Serial('/dev/ttyACM0', 9600) #Für Arduino
#serial = serial.Serial('COM3', 9600) #Für PC
serial.open
time.sleep(1)
def Vorwarts(motor): #Definiere Funktionen der Motoren
motor.run(Adafruit_MotorHAT.FORWARD)
def Ruckwarts(motor):
motor.run(Adafruit_MotorHAT.BACKWARD)
def Stop(motor):
motor.run(Adafruit_MotorHAT.RELEASE)
uv = 0
ur1 = 0
ur2 = 0
while True:
try:
#Split Variablen
try:
response = serial.readline()
#print (response)
if response == b'US1\r\n':
response = serial.readline()
uv =int(response.split(b"=")[-1])
elif response == b'US2\r\n':
response = serial.readline()
ur1 =int(response.split(b"=")[-1])
elif response == b'US3\r\n':
response = serial.readline()
ur2 =int(response.split(b"=")[-1])
print("UV=" ,uv)
print("UR1=" ,ur1)
print("UR2=" ,ur2)
Sensor_Vorne = uv
Sensor_Rechts_1 = ur1
Sensor_Rechts_2 = ur2
except ValueError:
print("ValueError")
#Rechte Hand
if Sensor_Rechts_2 < 20 and Sensor_Vorne < 20:
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(2)
Stop(Motor_Rechts)
Stop(Motor_Links)
Ruckwarts(Motor_Rechts)
Ruckwarts(Motor_Links)
time.sleep(1)
Vorwarts(Motor_Rechts)
time.sleep(Abbiegezeit)
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(1.5)
elif Sensor_Rechts_2 > 20 and Sensor_Vorne > 20:
Ruckwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(Abbiegezeit)
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(1.5)
elif Sensor_Rechts_2 > 20 and Sensor_Vorne < 20:
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(2)
Stop(Motor_Rechts)
Stop(Motor_Links)
Ruckwarts(Motor_Rechts)
Ruckwarts(Motor_Links)
time.sleep(1)
Ruckwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(Abbiegezeit)
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(1.5)
elif Sensor_Rechts_2 < 20 and Sensor_Vorne > 20:
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
#Motor Geschwindigkeit
if Sensor_Rechts_1 > Sensor_Rechts_2:
Motor_Links. setSpeed(150)
Motor_Rechts. setSpeed(100)
elif Sensor_Rechts_1 < Sensor_Rechts_2:
Motor_Links. setSpeed(100)
Motor_Rechts. setSpeed(150)
elif Sensor_Rechts_1 == Sensor_Rechts_2:
Motor_Rechts. setSpeed(100)
Motor_Links. setSpeed(100)
except KeyboardInterrupt:
turnOffMotors()
serial.close()
print("Programm wurde gestoppt!!")
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Hier nochmal das Programm vom Raspberry PI. Das funktioniert zu 100% (hab ich auch getestet).
Ich habe jetzt das nötige Equipment zuhause.
Ich habe jetzt das nötige Equipment zuhause.
Code: Alles auswählen
# -*- coding: utf-8 -*-
import serial #OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//OLAF OS//
import time
import RPi.GPIO as GPIO
import atexit
from Adafruit_MotorHAT import Adafruit_MotorHAT, Adafruit_DCMotor
# create a default object, no changes to I2C address or frequency
mh = Adafruit_MotorHAT(addr=0x60)
# recommended for auto-disabling motors on shutdown!
def turnOffMotors():
mh.getMotor(1).run(Adafruit_MotorHAT.RELEASE)
mh.getMotor(2).run(Adafruit_MotorHAT.RELEASE)
atexit.register(turnOffMotors)
#DC motor test
#Links
Motor_Rechts = mh.getMotor(1)
#Rechts
Motor_Links = mh.getMotor(2)
Abbiegezeit = 1
Motor_Rechts.setSpeed(100)
Motor_Links.setSpeed(100)
serial = serial.Serial('/dev/ttyACM0', 9600) #Für Arduino
#serial = serial.Serial('COM3', 9600) #Für PC
serial.open
time.sleep(1)
def Vorwarts(motor): #Definiere Funktionen der Motoren
motor.run(Adafruit_MotorHAT.FORWARD)
def Ruckwarts(motor):
motor.run(Adafruit_MotorHAT.BACKWARD)
def Stop(motor):
motor.run(Adafruit_MotorHAT.RELEASE)
uv = 25
ur1 = 0
ur2 = 15
while True:
try:
#Split Variablen
try:
response = serial.readline()
#print (response)
if response == b'US1\r\n':
response = serial.readline()
uv =int(response.split(b"=")[-1])
elif response == b'US2\r\n':
response = serial.readline()
ur1 =int(response.split(b"=")[-1])
elif response == b'US3\r\n':
response = serial.readline()
ur2 =int(response.split(b"=")[-1])
print("UV=" ,uv)
print("UR1=" ,ur1)
print("UR2=" ,ur2)
Sensor_Vorne = uv
Sensor_Rechts_1 = ur1
Sensor_Rechts_2 = ur2
except ValueError:
print("ValueError")
#Rechte Hand
if Sensor_Rechts_2 < 20 and Sensor_Vorne < 20:
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(2)
Stop(Motor_Rechts)
Stop(Motor_Links)
Ruckwarts(Motor_Rechts)
Ruckwarts(Motor_Links)
time.sleep(1)
Vorwarts(Motor_Rechts)
time.sleep(Abbiegezeit)
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(1.5)
elif Sensor_Rechts_2 > 20 and Sensor_Vorne > 20:
Ruckwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(Abbiegezeit)
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(1.5)
elif Sensor_Rechts_2 > 20 and Sensor_Vorne < 20:
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(2)
Stop(Motor_Rechts)
Stop(Motor_Links)
Ruckwarts(Motor_Rechts)
Ruckwarts(Motor_Links)
time.sleep(1)
Ruckwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(Abbiegezeit)
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
time.sleep(1.5)
elif Sensor_Rechts_2 < 20 and Sensor_Vorne > 20:
Vorwarts(Motor_Rechts)
Vorwarts(Motor_Links)
#Motor Geschwindigkeit
if Sensor_Rechts_1 > Sensor_Rechts_2:
Motor_Links. setSpeed(150)
Motor_Rechts. setSpeed(100)
elif Sensor_Rechts_1 < Sensor_Rechts_2:
Motor_Links. setSpeed(100)
Motor_Rechts. setSpeed(150)
elif Sensor_Rechts_1 == Sensor_Rechts_2:
Motor_Rechts. setSpeed(100)
Motor_Links. setSpeed(100)
except KeyboardInterrupt:
turnOffMotors()
serial.close()
print("Programm wurde gestoppt!!")
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Die Werte die ich angezeigt bekomme sind nicht mehr synchronisiert, sobald ich eine time.sleep hinzufüge.
Die sind für mein Programm allerdings notwendig. Hat jemand Ideen wie ich die Werte in Python zeitnah angezeigt bekomme?
(Threading ist ja anscheinend nicht so gut.)
Die sind für mein Programm allerdings notwendig. Hat jemand Ideen wie ich die Werte in Python zeitnah angezeigt bekomme?
(Threading ist ja anscheinend nicht so gut.)
Man muß nur den Code lesen, um zu sehen, dass Du nicht gründlich genug getestet hast. Außerdem hat es immer noch sinnlose Zeilen drin, die schon seit dem ersten Post hier bemängelt wurden. Du machst nicht den Eindruck, dass Du hier etwas lernen willst.AngryJones hat geschrieben: ↑Freitag 30. November 2018, 14:59Das funktioniert zu 100% (hab ich auch getestet).
Wen mehrere Ereignisse gleichzeitig abgearbeitet werden sollen, braucht man eine Ereignisschleife, die nicht irgendwo durch sleep oder read blockiert werden darf.
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Ich wüsste jetzt nicht was an dem Code grundsätzlich falsch sein sollte. Das einzige Problem ist immer noch, dassMan muß nur den Code lesen, um zu sehen, dass Du nicht gründlich genug getestet hast.
der Arduino die Werte puffert. Ich hab es schon mit flushInput() versucht, allerdings werden dann keine neuen Werte mehr angezeigt.
Auch nicht mit einer time.sleep hinter flushInput(). Gibt es irgendwie eine Möglichkeit die letzte readline aufzurufen?
Na das IST das grundsätzlich falsche an deinem Code. Der kann eben nicht damit umgehen, daten zu verarbeiten während er eine zeitabhängige Steuerung hinbekommen muss. Um das zu ändern ist grundsätzliches Umdenken notwendig.
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Wäre es dann nicht am einfachsten einen Thread für die Werte zu erstellen und einen für den Rest? Der Thread für die Werte sollte dann ja kann Problem für das Motor Hat sein, oder?
Er sendet ja gar keine Befehle an die Motoren.
Er sendet ja gar keine Befehle an die Motoren.
Die Worte “einfach” und “Thread” in einem Satz zu gebrauchen ist immer ein Fehler. Threads sind nicht einfach.
Und in diesem Fall ist der Beleg dafür ja einfach zu erbringen: egal ob du die Werte der seriellen Schnittstelle nun in einem Thread einliest oder erst wenn die Hauptschleife wieder erreicht wird - ein keinem der beiden Fälle erfolgt die BEARBEITUNG währen der verschlafenen Zeit.
Da du ja keine guten Namen für deine Variablen wählst, und keine Funktionen mit guten Namen hast, kann man ja nur raten, was da passieren soll. Aber ich vermute mal, die Sensoren sollen zb einen Stopp auslösen, wenn sie eine kollision wahrnehmen. Das passiert aber niemals rechtzeitig, wenn du zwischendurch schläfst.
Was du brauchst ist eine Schleife die schnell und nur mit geringer Verzögerung die Sensordaten einliest. Und zb einen Zustandsautomaten, der bestimmt, was gerade für ein Befehl abgearbeitet werden soll, aber jederzeit den Eingriff erlaubt das zu ändern.
Und in diesem Fall ist der Beleg dafür ja einfach zu erbringen: egal ob du die Werte der seriellen Schnittstelle nun in einem Thread einliest oder erst wenn die Hauptschleife wieder erreicht wird - ein keinem der beiden Fälle erfolgt die BEARBEITUNG währen der verschlafenen Zeit.
Da du ja keine guten Namen für deine Variablen wählst, und keine Funktionen mit guten Namen hast, kann man ja nur raten, was da passieren soll. Aber ich vermute mal, die Sensoren sollen zb einen Stopp auslösen, wenn sie eine kollision wahrnehmen. Das passiert aber niemals rechtzeitig, wenn du zwischendurch schläfst.
Was du brauchst ist eine Schleife die schnell und nur mit geringer Verzögerung die Sensordaten einliest. Und zb einen Zustandsautomaten, der bestimmt, was gerade für ein Befehl abgearbeitet werden soll, aber jederzeit den Eingriff erlaubt das zu ändern.
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Könnte man nicht theoretisch vom Raspberry einen Wert an den Arduino senden (z.b serial.write("Bereit")). Wenn dieser vom Arduino erkannt wird sendet er einmal den aktuellen US-Wert an den Raspberry und wartet dann bis der Rasberry wieder bereit ist und z.b die Aktion Rechts abbiegen, welche 2 sek. dauert, beendet hat. Nachdem der Raspberry die Aktion beendet hat sendet er dann wieder "Bereit" an den Arduino, wodurch dieser wieder den aktuellen Wert einmal sendet.
Hier mal ein Modul, mit dem du “zeitgleiches” arbeiten erreichen kannst: https://docs.python.org/3/library/sched.html