Seite 1 von 1
sleep - Problem
Verfasst: Sonntag 2. Oktober 2016, 18:11
von cooool39
Hallo zusammen,
ich habe da glaube ich ein ganz simples Problem mit einer "sleep" Anweisung, vielleicht kann mir ja jemand damit helfen
mein Script wäre:
Code: Alles auswählen
from time import sleep
Mode = 2
ModeL = 1
while (True):
if Mode ==2:
ModeL = 2
sleep(2)
ModeL = 4
sleep(2)
ModeL = 6
sleep(2)
jetzt ist mein Problem das "ModeL" sofort der Wert "6" zugewiesen wird aber es sollen erst die beiden anderen Werte zugewiesen werden.
Hat da jemand einen Tip für mich?
Re: sleep - Problem
Verfasst: Sonntag 2. Oktober 2016, 18:23
von noisefloor
Hallo,
wie stellst du das denn fest? Dein Skript läuft endlos und hat keine Ausgabe mittels print() etc.
Vielleicht möchtest du mal den _richtigen_ Code posten, der das Problem hat statt eine künstlich generierte Variante.
Und bitte das nächste mal den Code in die Codebox packen, damit zumindest die Einrückungen erhalten bleiben.
Gruß, noisefloor
Re: sleep - Problem
Verfasst: Sonntag 2. Oktober 2016, 18:57
von cooool39
Sorry, die Code-Box hatte ich übersehen.
Code: Alles auswählen
from Adafruit_PWM_Servo_Driver import PWM
from time import sleep
pwm = PWM(0x40)
Mode = 2
ModeL = 1
def setServoPulse(channel, pulse):
pulseLength = 1000000 # 1,000,000 us per second
pulseLength /= 60 # 60 Hz
pulseLength /= 4096 # 12 bits of resolution
pulse *= 1000
pulse /= pulseLength
pwm.setPWM(channel, 0, pulse)
pwm.setPWMFreq(60)
while (True):
print "ModeL:", ModeL
if ModeL ==2:
pwm.setPWM(15, 0, 160)
if ModeL ==4:
pwm.setPWM(15, 0, 380)
if Mode ==2:
ModeL = 2
sleep(2)
#ModeL = 4
#sleep(2)
#ModeL = 6
#sleep(2)
"Mode" wird später angesteuert werden über andere Befehle und "ModeL" wird noch um viele Funktionen erweiter.
Re: sleep - Problem
Verfasst: Sonntag 2. Oktober 2016, 19:29
von BlackJack
@cooool39: Das ist aber auch noch nicht der Code den Du laufen lässt, denn der ist nicht korrekt eingerückt. Und dort wird ModeL nie der Wert 6 zugewiesen, denn das ist auskommentiert. Wäre es das nicht, dann würde der Wert auch nicht *sofort* zugewiesen, sondern erst nach den Wartezeiten die durch die `sleep()`-Aufrufe entstehen. Es würde aber auch gar keinen Sinn machen den auskommentierten Code zu verwenden. Da werdn ModeL der Reihe nach verschiedene Werte zugewiesen, aber damit wird dann ja nichts gemacht, sondern einfach nur wieder gewartet bis der nächste Wert zugewiesen wird.
Ich glaube Du hast falsche Vorstellungen davon in welcher Reihenfolge der Code abgearbeitet wird.
Was soll der Code denn am Ende bewirken? Brauchst Du dafür diese magischen `Mode` und `ModeL`-Zahlen? Kann man das nicht direkter ausdrücken, oder zumindest mit etwas anderem als nichtssagenden Zahlen? Wenigstens Konstanten‽
Bei der Namensgebung solltest Du alles was keine Klasse oder Konstante ist klein_mit_unterstrichen schreiben. Klassen in MixedCase und Konstanten KOMPLETT_IN_GROSSBUCHSTABEN. Keine kryptischen Abkürzungen in Namen. Wenn `ModeL` `mode_left` heissen soll, dann schreib das auch. Wenn nicht, dann weisst Du jetzt warum man es nicht abkürzen sollte: Man versteht dann nicht was es bedeutet. Eingerückt wird mit vier Leerzeichen pro Ebene. Bedingungen bei ``if``/``while`` & Co brauchen keine Klammern.
Da sich die drei ``if``-Bedingungen gegenseitig ausschliessen, würde sich hier ``elif`` für die beiden letzten Bedingungen anbieten.
Auf Modulebene gehören eigentlich nur Definitionen von Konstanten, Funktionen, und Klassen. Das Hauptprogramm steht üblicherweise in einer Funktion die `main()` heisst.
Edit: Bei den ``if``/``elif`` habe ich den Unterschied zwischen `Mode` und `ModeL` übersehen. Ein weiterer Grund warum dieses L nicht so toll ist: Man verwechselt das leicht.