2016-03-29 2 views
0

Ich habe Python-Skript mail.py erstellt, die Code des Sendens von Mail enthalten, wenn Gpio 4 gedrückt wird .. Mein Gpio 4 ist PULLED UP-Schalter, aber das Problem ist, wenn ich direkt Führen Sie das Skript, das es läuft bedeutet, dass es Mail senden, aber wenn ich diesen Schalter drücken, es nicht vor dem Drücken ausgeführt wird, geht es außerhalb der Schleife und Skript läuft nicht, auch E-Mail sendet nicht..ich habe auch Verzögerung dafür gesetzt ..i denke Problem ist, wenn ich den Schalter einmal drücken muss es den Zustand des Schalters speichern, so dass nach 10 Sekunden lesen Sie den Zustand, aber ich kann nicht speichern den Zustand des Schalters .. wenn irgendein Vorschlag PLZ sagen mir..danke im voraus ..Raspberry Pi: E-Mail senden, wenn PULLED UP-Schalter gedrückt wird

Antwort

1

Ich bin mir nicht sicher, ob ich verstehe, was Sie zu tun versuchen, aber es scheint mir, Sie wollen dieses Skript ausführen, bis die Taste gedrückt wird und dann ein ma senden einmal?

Etwas entlang der Linie von GPIO.wait_for_edge(4, GPIO.FALLING) ist, was wäre am einfachsten in den Code passen, wie zum Beispiel:

try: 
    GPIO.wait_for_edge(4, GPIO.FALLING) 
    # Create email 
    ... 
except KeyboardInterrupt: 
    GPIO.cleanup() 
GPIO.cleanup() 

Sie können jedoch gedrückt jedes Mal eine E-Mail senden möchten, wird der Button? Wenn ja, ist es noch besser, eine Callback-Funktion mit GPIO.add_event_detect zu verwenden. In diesem Fall ist dies besser geeignet:

# Create and send mail 
def send_mail(): 
    ... 

# add rising edge detection on a channel, ignoring further edges 
# for 200ms for switch bounce handling 
GPIO.add_event_detect(channel, GPIO.FALLING, callback = send_mail, bouncetime = 200) 

Weitere Einzelheiten zu RPi.GPIO Eingang finden Sie unter: https://sourceforge.net/p/raspberry-gpio-python/wiki/Inputs/

+0

u danken, aber dies ist für mich nicht ... plz geben Sie mir eine andere Lösung ... mein Schalter ist bydefult 1, wenn ich es in 0 drücken geht State ... Also, was ist die Lösung, um den Staat zu retten ... können Sie mir ein vollständiges Beispiel geben, was ich genau in den Code schreiben muss. –

+0

Anhand meines Beispiels und des darin enthaltenen Links sollten Sie in der Lage sein, eine passende Lösung für Ihren speziellen Bedarf zu finden. Wenn Sie den Status speichern möchten, können Sie die Eingabe verfolgen, indem Sie auf RISING- und FALLING-Ereignisse hören. – Elijan9

+0

danke..ich bezog mich auf diesen Link..und ich verstehe, was Sie gesagt haben ..aber das ist nicht mein Problem..in meinem Fall, sobald Schalter gedrückt wird, wird es freizugeben. Ich drücke nicht kontinuierlich so nach einiger Zeit, wenn es wird es verstehen verstanden, dass Schalter nicht sogar einzelnes Mal gedrückt wird. So muss ich Zustand des Schalters rechts speichern, nachdem ich den Schalter so von diesem gespeicherten Staat gedrückt habe, ich sollte in der Lage sein, Post so einfach zu senden ist das, der freigegebene Schalter doesn ' t muss auf den Zustand des gedrückten Schalters einwirken. –

0

Sie den Hörer in einer Schleife schreiben können und auch die E-Mail-Funktionalität als Funktion

wie

GPIO.setup (23, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)

GPIO.setup (24, GPIO.IN, pull_up_down = GPIO. PUD_UP)

während True:

if (GPIO.input (23) == 1):

Taste # gedrückt dann cal die mail() Funktion

#after excutting die Funktion, wenn wenn die Pinpoint zurück auf 0

(GPIO.input (24) == 0) müssen Sie wieder einstellen:

print („Taste 2 gedrückt“)

GPIO.cleanup()

versuchen, das Beispiel

+0

danke sehr viel ... das ist Arbeit für mich –

+0

Hey lassen Sie mich wissen, warum Sie die Antwort abstimmen? es funktioniert nicht für dich? –