Steht doch in der ReadMe ;)
pwm.stop()
Druckbare Version
Steht doch in der ReadMe ;)
pwm.stop()
Geht das nur darüber?
Weil die Ausführung eines "normalen" Programms kannst du ja z.B. mit Strg + C beenden :D
Das ist kein Beenden, das ist ein Unterbrechen wenn man es ganz genau nimmt ;)
Ein "ordentliches" Beenden wäre z.B. os._exit(1) das über eine Benutzereingabe ausgeführt wird.
Ich baue mir z.B. immer ein Menü:
Code:while(True):
user_input = raw_input('Bitte treffen Sie Ihre Wahl: ')
if user_input == "m":
menu()
...
elif user_input == "q":
os._exit(1)
Haarspalterei :P
Aber gut danke für die Info :)
Hallo,
Ich habe mir nun folgendes Programm erstellt:
PWM Frequenz 19048 Hz, 50%
Das Programm läuft zwar ab, der Bot zittert aber wie wild.Code:
import RPi.GPIO as GPIO
import time
import signal
from pizypwm import *
def endProcess(signalnum = None, handler = None):
first.stop()
second.stop()
third.stop()
fourth.stop()
GPIO.cleanup()
exit(0)
signal.signal(signal.SIGTERM, endProcess)
signal.signal(signal.SIGINT, endProcess)
first = PiZyPwm(19048, 19, GPIO.BOARD)
second = PiZyPwm(19048, 21, GPIO.BOARD)
third = PiZyPwm(19048, 23, GPIO.BOARD)
fourth = PiZyPwm(19048, 24, GPIO.BOARD)
first.start(50)
second.start(50)
third.start(50)
fourth.start(50)
def ControlAPairOfPins(FirstPin,FirstState,SecondPin,SecondState):
if FirstState == "1":
GPIO.output(int(FirstPin),True)
else:
GPIO.output(int(FirstPin),False)
if SecondState == "1":
GPIO.output(int(SecondPin),True)
else:
GPIO.output(int(SecondPin),False)
return
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(19,GPIO.OUT)
GPIO.setup(21,GPIO.OUT)
GPIO.setup(23,GPIO.OUT)
GPIO.setup(24,GPIO.OUT)
while True:
ControlAPairOfPins("19","1","21","0")
ControlAPairOfPins("23","1","24","0")
print "Drehung nach rechts"
time.sleep(1)
ControlAPairOfPins("19","0","21","0")
ControlAPairOfPins("23","0","24","0")
print "Stop"
time.sleep(1)
ControlAPairOfPins("19","0","21","1")
ControlAPairOfPins("23","0","24","1")
print "Drehung nach Links"
time.sleep(1)
ControlAPairOfPins("19","0","21","0")
ControlAPairOfPins("23","0","24","0")
print "Stop"
time.sleep(1)
ControlAPairOfPins("19","1","21","0")
ControlAPairOfPins("23","0","24","1")
print "Geradeaus vorwaerts"
time.sleep(1)
ControlAPairOfPins("19","0","21","0")
ControlAPairOfPins("23","0","24","0")
print "Stop"
time.sleep(1)
ControlAPairOfPins("19","0","21","1")
ControlAPairOfPins("23","1","24","0")
print "Geradeaus rueckwaerts"
time.sleep(1)
ControlAPairOfPins("19","0","21","0")
ControlAPairOfPins("23","0","24","0")
print "Stop"
time.sleep(1)
Ist das Programm so in Ordnung?
Kannst du das bitte überprüfen?
Naja, oben startest Du direkt die PWM auf allen Pins
Wenn ich das richtig interpretiere wollen Deine Motoren nun gleichzeitig nach vorne und nach hinten drehen => geht nicht => Zittern.Code:first.start(50)second.start(50)
third.start(50)
fourth.start(50)
Und unten in der while Schleife sagst Du den Motoren das sie voll aufdrehen sollen, oder? Das führt zu noch heftigerem Zittern weil es die PWM beeinträchtigt.
Vielen herzlichen Dank, tucow - nun habe ich es:
Damit drehen die Motoren nur mit 50% Leistung, dank Software - PWMCode:
import RPi.GPIO as GPIO
import time
import signal
from pizypwm import *
def endProcess(signalnum = None, handler = None):
first.stop()
second.stop()
third.stop()
fourth.stop()
GPIO.cleanup()
exit(0)
signal.signal(signal.SIGTERM, endProcess)
signal.signal(signal.SIGINT, endProcess)
first = PiZyPwm(20000, 19, GPIO.BOARD)
second = PiZyPwm(20000, 21, GPIO.BOARD)
third = PiZyPwm(20000, 23, GPIO.BOARD)
fourth = PiZyPwm(20000, 24, GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
GPIO.setup(19,GPIO.OUT)
GPIO.setup(21,GPIO.OUT)
GPIO.setup(23,GPIO.OUT)
GPIO.setup(24,GPIO.OUT)
while True:
first.start(50)
second.start(0)
third.start(50)
fourth.start(0)
print "Drehung nach rechts"
time.sleep(1)
first.start(0)
second.start(0)
third.start(0)
fourth.start(0)
print "Stop"
time.sleep(1)
first.start(0)
second.start(50)
third.start(0)
fourth.start(50)
print "Drehung nach Links"
time.sleep(1)
first.start(0)
second.start(0)
third.start(0)
fourth.start(0)
print "Stop"
time.sleep(1)
first.start(50)
second.start(0)
third.start(0)
fourth.start(50)
print "Geradeaus vorwaerts"
time.sleep(1)
first.start(0)
second.start(0)
third.start(0)
fourth.start(0)
print "Stop"
time.sleep(1)
first.start(0)
second.start(50)
third.start(50)
fourth.start(0)
print "Geradeaus rueckwaerts"
time.sleep(1)
first.start(0)
second.start(0)
third.start(0)
fourth.start(0)
print "Stop"
time.sleep(1)
:cool:
Ah, sehr schön!
Kannst Du davon mal ein Video machen? Mich würde interessieren wie gut die Software PWM in Python funktioniert :)
Video ist online: http://youtu.be/DBvoxG8FZBo
Im 1. Durchgang 50% PWM, im 2. Durchgang 100% PWM
Sieht (wiedermal) klasse aus :)
Ich warte noch immer auf meinen Motortreiber für meinen Bot.
Hoffe der kommt bald, da ich jetzt Semesterferien habe und nächste Woche die Klausur geschrieben ist, wollte ich endlich mal bisl anfangen selber einen Bot zusammen zu bauen.
Die USB Kabel für mein mobiles Ladegerät habe ich schon gefunden (totaler Krampf USB Kabel mit Mini-USB und einer normalen USB-Buchse zu finden -.-)