Hallo Zusammen!
Ich möchte eine Variable splitten (im Bild).
Dies klappt aber nur einmal und beim 2. Versuch erhalte ich den Error: 'list' object has no attribute 'split'.
Ich möchte die Variable so splitten, dass ich die reine Zahl habe, der nach Distance= angezeigt wird.
Variable splitten
Bitte keine Screenshots, sondern Code und Fehlermeldungen hier mit dem Code-Tag Posten.
Und dein Split ist so sinnlos, du splittest ja ohne Argument. Womit Python Whitespace nimmt, und an deinem Zeilenende splittet.
Nimm stattdessen
int(s.split(“=“)[-1])
und du solltest die Distanz haben.
turnOffMotors
ist ohne Klammern dahinter übrigens wirkungslos.
Und dein Split ist so sinnlos, du splittest ja ohne Argument. Womit Python Whitespace nimmt, und an deinem Zeilenende splittet.
Nimm stattdessen
int(s.split(“=“)[-1])
und du solltest die Distanz haben.
turnOffMotors
ist ohne Klammern dahinter übrigens wirkungslos.
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Danke für deine Antwort
Werde ich morgen mal ausprobieren.
Die anderen Funktionen braucht ihr nicht beachten. Das richtige Programm ist ein anderes. Dieses ist nur ein kleiner Test. Es geht mir gerade nur um das Splitten.
Werde ich morgen mal ausprobieren.
Die anderen Funktionen braucht ihr nicht beachten. Das richtige Programm ist ein anderes. Dieses ist nur ein kleiner Test. Es geht mir gerade nur um das Splitten.
- __blackjack__
- User
- Beiträge: 13004
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@AngryJones: Ist trotzdem schwer das zu ignorieren: ``int(1)`` ist sinnlos. Das ist das gleiche wie ``1``. Eine ganze Zahl wird durch `int()` nicht irgendwie noch ganzzahliger.
Wenn man ein `Serial`-Objekt erstellt und dabei die Schnittstelle angibt, dann ist das bereits offen. Da noch mal (zu versuchen) `open()` aufzurufen macht keinen Sinn. Wobei auch dort das gleiche Problem besteht das __deets__ schon angesprochen hat: Man muss so etwas auf *aufrufen*.
Das ``try``/``except KeyboardInterrupt:`` sollte die Funktionsdefinition nicht enthalten. Zudem ist der Inhalt vom ``except`` eher etwas für ein ``finally``, denn Du willst ja nicht nur bei Strg+C die serielle Verbindung schliessen und die Motoren abschalten, sondern wohl eher generell wenn der ``try``-Block verlassen wird, also zum Beispiel auch wenn da irgend eine andere Ausnahme ausgelöst wird.
`s` ist kein guter Name. `serial` oder `connection` wäre wesentlich besser, damit der Leser weiss was das ist.
`Serial`-Objekte sind sowohl Kontextmanager als auch iterierbar. Also sollte man die ``with``-Anweisung beim Erstellen verwenden und kann in einer ``for``-Schleife über die Zeilen iterieren.
Namenskonvention in Python ist kleinbuchstaben_mit_unterstrichen für alles ausser Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Und Funktionen werden üblicherweise nach der Tätigkeit benannt die sie durchführen. So etwas wie `Motor_Geschwindigkeit()` geht also gar nicht. Die alten Methoden auf `Serial`-Objekten, die gegen die Konventionen verstossen, sollte man nicht mehr verwenden. Die Getter/Setter für die Leitungen wurden mittlerweile durch Properties ersetzt. Also statt ``ser.setRTS(0)`` schreibt man ``ser.rts = 0`` und statt ``print(ser.getCTS())`` nur noch ``print(ser.cts)``.
Wenn man ein `Serial`-Objekt erstellt und dabei die Schnittstelle angibt, dann ist das bereits offen. Da noch mal (zu versuchen) `open()` aufzurufen macht keinen Sinn. Wobei auch dort das gleiche Problem besteht das __deets__ schon angesprochen hat: Man muss so etwas auf *aufrufen*.
Das ``try``/``except KeyboardInterrupt:`` sollte die Funktionsdefinition nicht enthalten. Zudem ist der Inhalt vom ``except`` eher etwas für ein ``finally``, denn Du willst ja nicht nur bei Strg+C die serielle Verbindung schliessen und die Motoren abschalten, sondern wohl eher generell wenn der ``try``-Block verlassen wird, also zum Beispiel auch wenn da irgend eine andere Ausnahme ausgelöst wird.
`s` ist kein guter Name. `serial` oder `connection` wäre wesentlich besser, damit der Leser weiss was das ist.
`Serial`-Objekte sind sowohl Kontextmanager als auch iterierbar. Also sollte man die ``with``-Anweisung beim Erstellen verwenden und kann in einer ``for``-Schleife über die Zeilen iterieren.
Namenskonvention in Python ist kleinbuchstaben_mit_unterstrichen für alles ausser Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase). Und Funktionen werden üblicherweise nach der Tätigkeit benannt die sie durchführen. So etwas wie `Motor_Geschwindigkeit()` geht also gar nicht. Die alten Methoden auf `Serial`-Objekten, die gegen die Konventionen verstossen, sollte man nicht mehr verwenden. Die Getter/Setter für die Leitungen wurden mittlerweile durch Properties ersetzt. Also statt ``ser.setRTS(0)`` schreibt man ``ser.rts = 0`` und statt ``print(ser.getCTS())`` nur noch ``print(ser.cts)``.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Hier noch einmal das ganze Programm (mit die Zeilen die ich in der oberen Version löschen musste, damit es auch auf dem PC funktioniert, statt auf dem Raspberry PI)
Das einzige, was nicht funktioniert ist weiterhin das splitten. Int(s.split(“=“)[-1]) funktioniert nicht. Der Arduino sendet ja über die Seriele Schnittstelle die Werte z.B: b'Distance=15\r\n'
Davon muss ich in diesem Fall die 15 in eine Variable splitten, um im nachfolgenden Programm damit arbeiten zu können.
Das einzige, was nicht funktioniert ist weiterhin das splitten. Int(s.split(“=“)[-1]) funktioniert nicht. Der Arduino sendet ja über die Seriele Schnittstelle die Werte z.B: b'Distance=15\r\n'
Davon muss ich in diesem Fall die 15 in eine Variable splitten, um im nachfolgenden Programm damit arbeiten zu können.
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)
Vorwaerts = run(Adafruit_MotorHAT.FORWARD) #Variablen werden definiert
Rueckwaerts = run(Adafruit_MotorHAT.BACKWARD)
Stop = run(Adafruit_MotorHAT.RELEASE)
Abbiegezeit = 1
Motor_Rechts.setSpeed(100)
Motor_Links.setSpeed(100)
#import serial
#ser = serial.Serial(0)
#ser.is_open
#True
#ser.setRTS(1)
#ser.setRTS(0)
#print(ser.getCTS())
#False
#ser.close()
serial = serial.Serial('/dev/ttyACM0', 9600)
serial.open
time.sleep(5)
try:
def Split_Variablen():
while True:
try:
response = serial.readline()
print (response)
f,uv,ur1,ur2 = response.split()
Sensor_Vorne = uv
Sensor_Rechts_1 = ur1
Sensor_Rechts_2 = ur2
Farbe = f
except ValueError:
print("Error")
def Rechte_Hand():
while True:
try:
if Sensor_Rechts_2 < 20 and Sensor_Vorne < 20:
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(2)
Motor_Rechts .Stop
Motor_Links .Stop
Motor_Rechts .Rueckwaerts
Motor_Links .Rueckwaerts
time.sleep(1)
Motor_Rechts. Vorwaerts
time.sleep(Abbiegezeit)
Motor_Rechts. Vorwaerts
Motor_Links. Vorwaerts
time.sleep(1.5)
elif Sensor_Rechts_2 > 20 and Sensor_Vorne > 20:
Motor_Rechts .Rueckwaerts
Motor_Links .Vorwaerts
time.sleep(Abbiegezeit)
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(1.5)
elif Sensor_Rechts_2 > 20 and Sensor_Vorne < 20:
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(2)
Motor_Rechts .Stop
Motor_Links .Stop
Motor_Rechts .Rueckwaerts
Motor_Links .Rueckwaerts
time.sleep(1)
Motor_Rechts .Rueckwaerts
Motor_Links .Vorwaerts
time.sleep(Abbiegezeit)
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(1.5)
elif Sensor_Rechts_2 < 20 and Sensor_Vorne > 20:
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
except ValueError:
print("Error")
def Motor_Geschwindigkeit():
while True:
try:
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 ValueError:
print("Error")
Split_Variablen() #Funktionen werden gestartet
Rechte_Hand()
Motor_Geschwindigkeit()
except KeyboardInterrupt:
s.close()
turnOffMotors
Was heisst denn "funktioniert nicht"? Ist das hier der Fehler den du bekommst:
? Wenn ja, dann ist die Loesung ein simples b vor dem "="
Und wenn nicht, und ganz generell in der Zukunft: konkrete Fehlermeldungen und Beschreibungen, was erwartet wurde, und was nicht passiert. "Geht nicht" kann man nur sagen "schade".
Code: Alles auswählen
>>> s = b'Distance=15\r\n'
>>> int(s.split('=')[-1])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: a bytes-like object is required, not 'str'
Code: Alles auswählen
>>> int(s.split(b'=')[-1])
15
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Vielen Dank für deine Antwort.
Der neue Code hat super funktioniert.
Der neue Code hat super funktioniert.
@AngryJones: Funktionen sind nicht so etwas wie Sprungmarken. Funktionen sind in sich abgeschlossene Bereiche, die sich mit ihrer Umgebung per Argumente und Rückgabewerte austauschen. Sie sollten am Anfang einer Datei stehen und nicht innerhalb eines try-Blocks.
Es wäre also sehr überraschend, wenn der neue Code überhaupt funktioniert.
Es wäre also sehr überraschend, wenn der neue Code überhaupt funktioniert.
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Also bis jetzt funktioniert er sehr gut... XDSirius3 hat geschrieben: ↑Samstag 24. November 2018, 11:54 @AngryJones: Funktionen sind nicht so etwas wie Sprungmarken. Funktionen sind in sich abgeschlossene Bereiche, die sich mit ihrer Umgebung per Argumente und Rückgabewerte austauschen. Sie sollten am Anfang einer Datei stehen und nicht innerhalb eines try-Blocks.
Es wäre also sehr überraschend, wenn der neue Code überhaupt funktioniert.
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Habe jetzt alle 3 Funktionen in Threads verpackt (ganz unten). Sollte so doch parallel nebeneinander ablaufen, oder?
Code: Alles auswählen
# -*- coding: utf-8 -*-
import threading
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)
Vorwaerts = run(Adafruit_MotorHAT.FORWARD) #Variablen werden definiert
Rueckwaerts = run(Adafruit_MotorHAT.BACKWARD)
Stop = run(Adafruit_MotorHAT.RELEASE)
Abbiegezeit = 1
Motor_Rechts.setSpeed(100)
Motor_Links.setSpeed(100)
#import serial
#ser = serial.Serial(0)
#ser.is_open
#True
#ser.setRTS(1)
#ser.setRTS(0)
#print(ser.getCTS())
#False
#ser.close()
serial = serial.Serial('/dev/ttyACM0', 9600)
serial.open
time.sleep(5)
try:
def Split_Variablen():
while True:
try:
response = serial.readline()
#print (response)
uv = int(response.split(b'=')[-1])
Sensor_Vorne = uv
Sensor_Rechts_1 = ur1
Sensor_Rechts_2 = ur2
Farbe = f
except ValueError:
print("Error")
def Rechte_Hand():
while True:
try:
if Sensor_Rechts_2 < 20 and Sensor_Vorne < 20:
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(2)
Motor_Rechts .Stop
Motor_Links .Stop
Motor_Rechts .Rueckwaerts
Motor_Links .Rueckwaerts
time.sleep(1)
Motor_Rechts. Vorwaerts
time.sleep(Abbiegezeit)
Motor_Rechts. Vorwaerts
Motor_Links. Vorwaerts
time.sleep(1.5)
elif Sensor_Rechts_2 > 20 and Sensor_Vorne > 20:
Motor_Rechts .Rueckwaerts
Motor_Links .Vorwaerts
time.sleep(Abbiegezeit)
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(1.5)
elif Sensor_Rechts_2 > 20 and Sensor_Vorne < 20:
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(2)
Motor_Rechts .Stop
Motor_Links .Stop
Motor_Rechts .Rueckwaerts
Motor_Links .Rueckwaerts
time.sleep(1)
Motor_Rechts .Rueckwaerts
Motor_Links .Vorwaerts
time.sleep(Abbiegezeit)
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(1.5)
elif Sensor_Rechts_2 < 20 and Sensor_Vorne > 20:
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
except ValueError:
print("Error")
def Motor_Geschwindigkeit():
while True:
try:
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 ValueError:
print("Error")
Split_Variablen() #Funktionen werden gestartet
Rechte_Hand()
Motor_Geschwindigkeit()
Split_Variablen = threading.Thread(target = Split_Variablen) #Funktionen werden in Threads verpackt
Split_Variablen.start()
Rechte_Hand = threading.Thread(target = Rechte_Hand)
Rechte_Hand.start()
Motor_Geschwindigkeit = threading.Thread(target = Motor_Geschwindigkeit)
Motor_Geschwindigkeit.start()
except KeyboardInterrupt:
s.close()
turnOffMotors
Wuerde mich ueberraschen. Das einlesen der seriellen Schnittstelle kannst du theoretisch so machen. Einen Effekt hat das uebrigens auch nicht, denn deine Variablen sind lokal zu deiner Funktion.
Spaetestens aber bei den Motoren wird dir das aller Vorraussicht nach auf die Fuesse fallen - mit mehreren Threads auf dem Motor-Hat rumzuhaemmern wird mindestens mal komisches Verhalten erzeugen weil du widerspruechliche Befehle sendest, und im schlimmsten Fall einfach irgendwann abstuerzen, weil der Code des IO-Boards halt nicht thread-safe ist.
Spaetestens aber bei den Motoren wird dir das aller Vorraussicht nach auf die Fuesse fallen - mit mehreren Threads auf dem Motor-Hat rumzuhaemmern wird mindestens mal komisches Verhalten erzeugen weil du widerspruechliche Befehle sendest, und im schlimmsten Fall einfach irgendwann abstuerzen, weil der Code des IO-Boards halt nicht thread-safe ist.
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Schade. Hat denn jemand eine Idee wie ich 3 parallel ablaufende Threads bekomme, die sich nicht gegenseitig widersprechen?
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Ja, nur ich bevorzuge eigentlich immer Threads, da sich diese immer bei den Robotern die ich früher programmiert bewährt haben.
Alle Tasks liefen unabhängig und konnten die anderen starten/ bzw. stoppen. (Hab früher mit NXC programmiert.)
Dies hatte den Vorteil, dass es innerhalb des Programms zu keinen Verzögerungen gekommen ist und man z.B Linienfolgen, während ein anderer Fall eingetreten ist (z.B Rechts Abbiegen),
bequem deaktivieren konnte.
Alle Tasks liefen unabhängig und konnten die anderen starten/ bzw. stoppen. (Hab früher mit NXC programmiert.)
Dies hatte den Vorteil, dass es innerhalb des Programms zu keinen Verzögerungen gekommen ist und man z.B Linienfolgen, während ein anderer Fall eingetreten ist (z.B Rechts Abbiegen),
bequem deaktivieren konnte.
Dann benutz Threads. Die Tage war hier wer mit einem ähnlichen Board, dem ist das auseinander geflogen. Vielleicht hast du Glück, und dir passiert das nicht.
Was ich allerdings bei NXC an “Threads” sehe sind Tasks. Und das ist etwas fundamental anderes. Die laufen immer garantiert exklusiv. Und mit klaren Übergabepunkten. Nicht gleichzeitig wie (in Grenzen) parallel, und an beliebigen stellen unterbrochen, wie bei Python.
Was ich allerdings bei NXC an “Threads” sehe sind Tasks. Und das ist etwas fundamental anderes. Die laufen immer garantiert exklusiv. Und mit klaren Übergabepunkten. Nicht gleichzeitig wie (in Grenzen) parallel, und an beliebigen stellen unterbrochen, wie bei Python.
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Ok wenn einem dabei so leicht alles auseinander fliegen kann lass ich es lieber.
Habe jetzt noch einmal alles in eine while True Schleife geschrieben.
Habe jetzt noch einmal alles in eine while True Schleife geschrieben.
Code: Alles auswählen
# -*- coding: utf-8 -*-
import threading
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)
Vorwaerts = run(Adafruit_MotorHAT.FORWARD) #Variablen werden definiert
Rueckwaerts = run(Adafruit_MotorHAT.BACKWARD)
Stop = run(Adafruit_MotorHAT.RELEASE)
Abbiegezeit = 1
Motor_Rechts.setSpeed(100)
Motor_Links.setSpeed(100)
#import serial
#ser = serial.Serial(0)
#ser.is_open
#True
#ser.setRTS(1)
#ser.setRTS(0)
#print(ser.getCTS())
#False
#ser.close()
serial = serial.Serial('/dev/ttyACM0', 9600)
serial.open
time.sleep(1)
try:
while True:
def Split_Variablen():
response = serial.readline()
#print (response)
uv = int(response.split(b'=')[-1])
Sensor_Vorne = uv
Sensor_Rechts_1 = ur1
Sensor_Rechts_2 = ur2
Farbe = f
print(Sensor_Vorne)
def Rechte_Hand():
if Sensor_Rechts_2 < 20 and Sensor_Vorne < 20:
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(2)
Motor_Rechts .Stop
Motor_Links .Stop
Motor_Rechts .Rueckwaerts
Motor_Links .Rueckwaerts
time.sleep(1)
Motor_Rechts. Vorwaerts
time.sleep(Abbiegezeit)
Motor_Rechts. Vorwaerts
Motor_Links. Vorwaerts
time.sleep(1.5)
elif Sensor_Rechts_2 > 20 and Sensor_Vorne > 20:
Motor_Rechts .Rueckwaerts
Motor_Links .Vorwaerts
time.sleep(Abbiegezeit)
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(1.5)
elif Sensor_Rechts_2 > 20 and Sensor_Vorne < 20:
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(2)
Motor_Rechts .Stop
Motor_Links .Stop
Motor_Rechts .Rueckwaerts
Motor_Links .Rueckwaerts
time.sleep(1)
Motor_Rechts .Rueckwaerts
Motor_Links .Vorwaerts
time.sleep(Abbiegezeit)
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(1.5)
elif Sensor_Rechts_2 < 20 and Sensor_Vorne > 20:
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
def 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:
print("Error")
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
Ok Danke.
Hab bis jetzt noch nie mit den Funktionen gearbeitet XD.
Hab bis jetzt noch nie mit den Funktionen gearbeitet XD.
-
- User
- Beiträge: 25
- Registriert: Freitag 23. November 2018, 19:56
So jetzt aber:
Code: Alles auswählen
# -*- coding: utf-8 -*-
import threading
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)
Vorwaerts = run(Adafruit_MotorHAT.FORWARD) #Variablen werden definiert
Rueckwaerts = run(Adafruit_MotorHAT.BACKWARD)
Stop = run(Adafruit_MotorHAT.RELEASE)
Abbiegezeit = 1
Motor_Rechts.setSpeed(100)
Motor_Links.setSpeed(100)
#import serial
#ser = serial.Serial(0)
#ser.is_open
#True
#ser.setRTS(1)
#ser.setRTS(0)
#print(ser.getCTS())
#False
#ser.close()
serial = serial.Serial('/dev/ttyACM0', 9600) #Für Arduino
#serial = serial.Serial('COM3', 9600) #Für PC
serial.open
time.sleep(1)
def Split_Variablen(): #Definiere alle Funktionen
try:
response = serial.readline()
#print (response)
uv = int(response.split(b'=')[-1])
Sensor_Vorne = uv
Sensor_Rechts_1 = ur1
Sensor_Rechts_2 = ur2
Farbe = f
print(Sensor_Vorne)
except ValueError:
print("ValueError")
def Rechte_Hand():
if Sensor_Rechts_2 < 20 and Sensor_Vorne < 20:
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(2)
Motor_Rechts .Stop
Motor_Links .Stop
Motor_Rechts .Rueckwaerts
Motor_Links .Rueckwaerts
time.sleep(1)
Motor_Rechts. Vorwaerts
time.sleep(Abbiegezeit)
Motor_Rechts. Vorwaerts
Motor_Links. Vorwaerts
time.sleep(1.5)
elif Sensor_Rechts_2 > 20 and Sensor_Vorne > 20:
Motor_Rechts .Rueckwaerts
Motor_Links .Vorwaerts
time.sleep(Abbiegezeit)
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(1.5)
elif Sensor_Rechts_2 > 20 and Sensor_Vorne < 20:
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(2)
Motor_Rechts .Stop
Motor_Links .Stop
Motor_Rechts .Rueckwaerts
Motor_Links .Rueckwaerts
time.sleep(1)
Motor_Rechts .Rueckwaerts
Motor_Links .Vorwaerts
time.sleep(Abbiegezeit)
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
time.sleep(1.5)
elif Sensor_Rechts_2 < 20 and Sensor_Vorne > 20:
Motor_Rechts .Vorwaerts
Motor_Links .Vorwaerts
def 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)
try: #Starte alle Funktionen
while True:
Split_Variablen()
Rechte_Hand()
Motor_Geschwindigkeit()
except KeyboardInterrupt:
print("Error")