sleep - Problem

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
cooool39
User
Beiträge: 2
Registriert: Sonntag 2. Oktober 2016, 17:32

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?
Zuletzt geändert von Anonymous am Sonntag 2. Oktober 2016, 18:49, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
Benutzeravatar
noisefloor
User
Beiträge: 4253
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

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
cooool39
User
Beiträge: 2
Registriert: Sonntag 2. Oktober 2016, 17:32

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.
Zuletzt geändert von Anonymous am Sonntag 2. Oktober 2016, 19:16, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Codebox-Tags gesetzt.
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.
Antworten