Seite 1 von 2

While-Schleife nur 5 mal ausführen

Verfasst: Dienstag 6. Mai 2014, 21:56
von Pieper66
Hallo, ich bitte um Entschuldigung, bin aber fast völliger Neuling in Python.

Ich wollte ein Relais über den Raspberry 5 mal im 0,7 Sekunden-Takt schalten (akustische und über den Schaltkontakt auch optische Signalisierung).

Habe die while-Schleife auch soweit fertig, aber weiß nicht, wie ich diese jetzt automatisch ohne Tastendruck auch wieder beende.

Code: Alles auswählen

# Programm zum takten des Display-Relais

import time
import RPi.GPIO as GPIO

# RPi.GPIO Layout verwenden (wie Pin-Nummern)
GPIO.setmode(GPIO.BOARD)


# Pin 3 (GPIO 2) auf Output setzen
GPIO.setup(3, GPIO.OUT)

# Dauersschleife
while 1:

    # Relais aus
    GPIO.output(3, GPIO.HIGH)

    # Warte 700 ms
    time.sleep(0.7)

    # Relais an
    GPIO.output(3, GPIO.LOW)

    # Warte 700 ms
    time.sleep(0.7)

Ich hoffe, Ihr könnt mir helfen.

Re: While-Schleife nur 5 mal ausführen

Verfasst: Dienstag 6. Mai 2014, 22:04
von /me
Pieper66 hat geschrieben:Habe die while-Schleife auch soweit fertig, aber weiß nicht, wie ich diese jetzt automatisch ohne Tastendruck auch wieder beende.
Aus der Schleife kommst du mit break heraus. Da du aber ohnehin eine fixe Anzahl von 5 Schleifendurchläufen haben möchtest solltest du besser for i in range(5) statt einer while-Schleife verwenden.

Re: While-Schleife nur 5 mal ausführen

Verfasst: Dienstag 6. Mai 2014, 23:36
von Sirius3

Code: Alles auswählen

import time
import RPi.GPIO as GPIO
from itertools import chain, repeat

REPEATS = 5

# RPi.GPIO Layout verwenden (wie Pin-Nummern)
GPIO.setmode(GPIO.BOARD)
 
GPIO.setup(3, GPIO.OUT)
 
for state in chain.from_iterable(repeat([GPIO.HIGH, GPIO.LOW], REPEATS)):
    GPIO.output(3, state)
    time.sleep(0.7)

Re: While-Schleife nur 5 mal ausführen

Verfasst: Mittwoch 7. Mai 2014, 10:52
von boletus999
nur noch so am Rande.

wenn dir die 700ms sehr wichtig sind, d.h. ein bestimmter Vorgang immer in der exakten Zeitabfolge geschehen soll, dann verwende niemals nur time.sleep().

Denn, das Ausführen deines Skriptes benötigt auch Zeit, die auf deinen time.sleep(Wert) dazu addiert wird.
Das ist bei 5 mal nicht erwähnenswert, aber bei größeren Schleifen entsteht hier ein delay über das man sich später wundert.
Außerdem benötigt das Skript je nach PC, ARM etc. unterschiedlich lange.

Der beste Weg in meinen Augen ist das messen der Skriptdurchlaufzeit z.B. mit

Code: Alles auswählen

import timeit 
die Zeit in ms kann man dann bequem beim time.sleep(Wert - *.timeit() ) abziehen.

Ich persönlich benutze die Uhr des BS um Zeitlich etwas genau zu steuern, schalten, loggen ...
Die ist zwar auch nicht 100% genau, doch damit kann ich einen Schaltvorgang z.B. ganz genau am 8/5/2014 14:30:00:00 anschieben.

LG boletus

Re: While-Schleife nur 5 mal ausführen

Verfasst: Mittwoch 7. Mai 2014, 11:17
von BlackJack
@boletus999: Das mit `timeit` zu messen ist IMHO ziemlicher Unsinn. Das ist ziemlich aufwändig und die Laufzeit ist von vielen Faktoren abhängig, teilweise welche die man weder im Griff hat, noch vorhersehen kann. Zum Beispiel kann der Prozess ”beliebig” lange vom Betriebssystem angehalten werden, wenn zum Beispiel die Systemlast hoch ist, oder viel IO passiert. Das kann auch locker mal deutlich länger als 700ms sein. Wenn man solche zeitlichen Garantien braucht, ist ein Rechner mit einem normalen Betriebsystem nicht brauchbar, oder man muss die Zeitkritischen Operationen als Kernelmodul/Treiber realisieren, wo man entsprechende Garantien erzwingen kann.

Re: While-Schleife nur 5 mal ausführen

Verfasst: Mittwoch 7. Mai 2014, 12:07
von boletus999
@ BlackJack

!!Stimmt!! ich wollte aber nicht mit meinen Ausschweifungen ausufern :wink:

Re: While-Schleife nur 5 mal ausführen

Verfasst: Mittwoch 7. Mai 2014, 14:20
von Sirius3
@boletus999: trotzdem ist timeit dafür ungeeignet, da man sich ja an der Systemzeit und nicht an der Skriptzeit ausrichten will, damit ist time.time() völlig ausreichend.

Re: While-Schleife nur 5 mal ausführen

Verfasst: Mittwoch 7. Mai 2014, 16:06
von Pieper66
Hier mal ein link, wofür ich das brauche.

http://www.forum-raspberrypi.de/Thread- ... nksagungen

Also so genau sollte das nicht sein :-)
Der code soll nur das Display zum blinken bringen, als Empfangskontrolle für IR-Signale.

Re: While-Schleife nur 5 mal ausführen

Verfasst: Mittwoch 7. Mai 2014, 17:56
von Pieper66
Besten Dank an "Sirius3"

Hat auf Anhieb funktioniert :D

Re: While-Schleife nur 5 mal ausführen

Verfasst: Mittwoch 7. Mai 2014, 19:52
von Darii
Pieper66 hat geschrieben:Ich wollte ein Relais über den Raspberry 5 mal im 0,7 Sekunden-Takt schalten (akustische und über den Schaltkontakt auch optische Signalisierung).
Bei einer so hohen Schaltrate würde ich kein Relais nehmen, außerdem hast du hoffentlich das Relais nicht direkt am Pi hängen, damit kannst du dir u.U. den Ausgang schroten…

Re: While-Schleife nur 5 mal ausführen

Verfasst: Mittwoch 7. Mai 2014, 20:38
von Pieper66
außerdem hast du hoffentlich das Relais nicht direkt am Pi hängen
Schau mal in´s Schaltbild :wink:

Zudem macht ein Transistor kein "Klick" :!: (zumindest nicht öfters)

Das Relais wird eigendlich nur eher selten betätigt, nur bei Befehlen der IR-Fernbedinung und dann ja maximal 5 mal.

Re: While-Schleife nur 5 mal ausführen

Verfasst: Donnerstag 8. Mai 2014, 15:35
von Darii
Pieper66 hat geschrieben:
außerdem hast du hoffentlich das Relais nicht direkt am Pi hängen
Schau mal in´s Schaltbild :wink:
Welches Schaltbild?
Zudem macht ein Transistor kein "Klick" :!: (zumindest nicht öfters)
?
Das Relais wird eigendlich nur eher selten betätigt, nur bei Befehlen der IR-Fernbedinung und dann ja maximal 5 mal.
Dann ist ja gut.

Re: While-Schleife nur 5 mal ausführen

Verfasst: Donnerstag 8. Mai 2014, 15:45
von BlackJack
@Darii: Vier Beiträge über Deinem ist ein Link zu einem Raspi-Forum wo das Hardwareprojekt samt Schaltplan zu sehen ist.

Re: While-Schleife nur 5 mal ausführen

Verfasst: Donnerstag 8. Mai 2014, 16:52
von Darii
BlackJack hat geschrieben:@Darii: Vier Beiträge über Deinem ist ein Link zu einem Raspi-Forum wo das Hardwareprojekt samt Schaltplan zu sehen ist.
Aus
Du bist entweder nicht eingeloggt oder dir fehlt die Berechtigung, diese Seite zu sehen. Grund dafür könnte einer der folgenden sein:
kann ich leider nicht so viel erkennen, abgesehen davon scrolle ich nicht jeden verlinkten Thread bis zum Ende durch…

Re: While-Schleife nur 5 mal ausführen

Verfasst: Donnerstag 8. Mai 2014, 20:45
von Pieper66
Leider erlaubt dieses Forum kein direktes hochladen von Bildern.
Man muß eingeloggt sein, um die "links" zu sehen, da auch ein veröffentliches Bild nur als link erscheint.

Schade eigendlich, aber diese Plattform bedarf meiner Meinung nach mal ein Update. :x

Um Missverständnisse zu vermeiden, ich meine damit NICHT dieses Forum, das ist einfach SPITZE :D

Re: While-Schleife nur 5 mal ausführen

Verfasst: Freitag 9. Mai 2014, 21:43
von Pieper66
Aber

um das zu umgehen, kann man ja den link auch als Text darstellen :wink:

htt?://ww?.forum-raspberrypi.de/Thread-hyperion-receiver-vorstellung-und-danksagungen?pid=79600#pid79600

Die beiden ? natürlich ersetzen. :mrgreen:

Re: While-Schleife nur 5 mal ausführen

Verfasst: Sonntag 11. Mai 2014, 16:55
von Leonidas
Pieper66 hat geschrieben:htt?://ww?.forum-raspberrypi.de/Thread-hyperion-receiver-vorstellung-und-danksagungen?pid=79600#pid79600

Die beiden ? natürlich ersetzen. :mrgreen:
:?:

Was hat man gegenüber direktem Verlinken mit diesem Ersetzspiel gewonnen? Die Bilder kann man so oder so nicht in groß sehen ohne dort angemeldet zu sein, weil viele Foren dass aus seltsamen bis sinnlosen Gründen nicht erlauben.

Re: While-Schleife nur 5 mal ausführen

Verfasst: Montag 12. Mai 2014, 21:04
von Pieper66
Leonidas hat geschrieben:
Pieper66 hat geschrieben:htt?://ww?.forum-raspberrypi.de/Thread-hyperion-receiver-vorstellung-und-danksagungen?pid=79600#pid79600

Die beiden ? natürlich ersetzen. :mrgreen:
...Die Bilder kann man so oder so nicht in groß sehen ohne dort angemeldet zu sein, ...

Richtig, ABER man kann den link sehen, ohne HIER angemeldet zu sein ( sollte das hier denn auch so sein, kann ich zum Glück nicht testen, da ich IMMER überall automatisch angemeldet bin) :evil:

Re: While-Schleife nur 5 mal ausführen

Verfasst: Montag 12. Mai 2014, 21:27
von BlackJack
@Pieper66: Man kann echte Links hier auch sehen ohne angemeldet zu sein. So einen Unsinn haben wir nicht nötig um die Zahl der Mitglieder hoch zu treiben. Das verschreckt mehr Leute oder produziert ”Karteileichen”, als das es irgendwie nützlich wäre.

Re: While-Schleife nur 5 mal ausführen

Verfasst: Montag 12. Mai 2014, 21:37
von Pieper66
Wenn das so ist, entschuldige ich mich dafür :oops:

Ich hatte "Darii" aber so verstanden :K