Hallo,
ich habe ein kleines Script mit dem man 3 GPIO`s ein und aus schalten kann.
Nun hätte ich gerne eine if Funktion mit an Bord:
wenn GPIO 15 an dann 19 auch einschalten
sonst ausgeschaltet lassen
Wie macht man das?
Oder kann man das gleich mit in den raw_input mit einbinden?
Würde mich über Hilfe freuen
Vielen Dank
Raspberry GPIO if Funktion
-
- User
- Beiträge: 4
- Registriert: Sonntag 20. März 2016, 09:52
Code wäre vielleicht hilfreich
Code: Alles auswählen
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.OUT)
GPIO.output(11,1)
GPIO.setup(13,GPIO.OUT)
GPIO.output(13,1)
GPIO.setup(15,GPIO.OUT)
GPIO.output(15,1)
try:
while(True):
request = raw_input("RGB-->")
if (len(request) == 3):
GPIO.output(11,int(request[0]))
GPIO.output(13,int(request[1]))
GPIO.output(15,int(request[2]))
except KeyboardInterrupt:
GPIO.cleanup()
Zuletzt geändert von Anonymous am Sonntag 20. März 2016, 13:40, insgesamt 1-mal geändert.
Grund: Quelltext in Code-Tags gesetzt.
Grund: Quelltext in Code-Tags gesetzt.
- framp
- User
- Beiträge: 52
- Registriert: Samstag 9. Oktober 2010, 22:16
- Wohnort: bei Stuttgart
- Kontaktdaten:
Code: Alles auswählen
If GPIO.input(15):
GPIO.output(19,1)
-
- User
- Beiträge: 4
- Registriert: Sonntag 20. März 2016, 09:52
Danke, aber das schaltet mir GPIO 19 immer an :K
@turbo_forever: Das sollte den Pin 19 nur anschalten wenn auch Pin 15 an ist. Allerdings schaltet dieser Code Pin 19 nie aus, wenn der also einmal angeschaltet ist, bleibt er an. Wenn Pin 19 immer den gleichen Wert wie Pin 15 haben soll, dann schalte den halt genau so wie Pin 15.
Anmerkungen zum Quelltext: Einrückung ist per Konvention vier Leerzeichen pro Ebene und nach Kommas ebenfalls ein Leerzeichen, damit das nicht alles so schwer lesbar zusammengequetscht steht. Wirf mal einen Blick in den Style Guide for Python Code.
Die überflüssigen Klammern um die Bedingungen sollte man weglassen, und insbesondere sollte man Schlüsselworte wie ``while`` plus Bedingung nicht so schreiben das es wie ein Funktionsaufruf aussieht. Das ist keine Funktion, genau wie ``if`` auch keine Funktion ist.
Magische Zahlen sollte man als Konstanten definieren, damit der Leser weiss was die bedeuten. Also letztendlich auch der Autor des Quelltextes selber, denn irgendwann wird der auch fast zu einem normalen Leser des eigenen Quelltextes wenn er da nach einem Monat oder so mal wieder rein schaut. Wofür die Pins stehen kann man hier nur an dem Prompt vom `raw_input()` erraten, wofür Pin 19 steht gar nicht.
Wenn man die Pin-Nummmern für die Farben in eine Liste steckt, braucht man nicht so viel Code wiederholen sondern kann das in einer Schleife abhandeln.
Den `cleanup()`-Aufruf will man eigentlich *immer* am Ende machen, nicht nur wenn der Benutzer die Tastenkombination für einen Abbruch gedrückt hat. Zum Beispiel auch dann wenn der Benutzer etwas eingegeben hat was `int()` nicht in eine ganze Zahl umwandeln kann und deshalb eine Ausnahme auslöst, oder wegen irgendwelcher anderer Ausnahmen die folge von Programmier- oder Benutzerfehlern sein können.
Davon abgesehen das man das Hauptprogramm üblicherweise schon in eine Funktion schreibt, ist das schon komplex genug um es sinnvoll auf mehrere Funktionen aufzuteilen, damit es nicht noch komplexer wird wenn man beispielsweise eine Eingabeprüfung macht, damit der Benutzer das Programm mit Fehleingaben nicht mehr zum beenden zwingen kann.
Bisher könnte das dann ungefähr so aussehen (ungetestet):
Anmerkungen zum Quelltext: Einrückung ist per Konvention vier Leerzeichen pro Ebene und nach Kommas ebenfalls ein Leerzeichen, damit das nicht alles so schwer lesbar zusammengequetscht steht. Wirf mal einen Blick in den Style Guide for Python Code.
Die überflüssigen Klammern um die Bedingungen sollte man weglassen, und insbesondere sollte man Schlüsselworte wie ``while`` plus Bedingung nicht so schreiben das es wie ein Funktionsaufruf aussieht. Das ist keine Funktion, genau wie ``if`` auch keine Funktion ist.
Magische Zahlen sollte man als Konstanten definieren, damit der Leser weiss was die bedeuten. Also letztendlich auch der Autor des Quelltextes selber, denn irgendwann wird der auch fast zu einem normalen Leser des eigenen Quelltextes wenn er da nach einem Monat oder so mal wieder rein schaut. Wofür die Pins stehen kann man hier nur an dem Prompt vom `raw_input()` erraten, wofür Pin 19 steht gar nicht.
Wenn man die Pin-Nummmern für die Farben in eine Liste steckt, braucht man nicht so viel Code wiederholen sondern kann das in einer Schleife abhandeln.
Den `cleanup()`-Aufruf will man eigentlich *immer* am Ende machen, nicht nur wenn der Benutzer die Tastenkombination für einen Abbruch gedrückt hat. Zum Beispiel auch dann wenn der Benutzer etwas eingegeben hat was `int()` nicht in eine ganze Zahl umwandeln kann und deshalb eine Ausnahme auslöst, oder wegen irgendwelcher anderer Ausnahmen die folge von Programmier- oder Benutzerfehlern sein können.
Davon abgesehen das man das Hauptprogramm üblicherweise schon in eine Funktion schreibt, ist das schon komplex genug um es sinnvoll auf mehrere Funktionen aufzuteilen, damit es nicht noch komplexer wird wenn man beispielsweise eine Eingabeprüfung macht, damit der Benutzer das Programm mit Fehleingaben nicht mehr zum beenden zwingen kann.
Bisher könnte das dann ungefähr so aussehen (ungetestet):
Code: Alles auswählen
#!/usr/bin/env python
# coding: utf8
from __future__ import absolute_import, division, print_function
from RPi import GPIO
RGB_PINS = RED_PIN, GREEN_PIN, BLUE_PIN = [11, 13, 15]
SOME_OTHER_PIN = 19
def main():
GPIO.setmode(GPIO.BOARD)
GPIO.setup(RGB_PINS, GPIO.OUT, initial=GPIO.HIGH)
try:
while True:
request = raw_input('RGB-->')
if len(request) == 3:
for pin, value in zip(RGB_PINS, map(int, request)):
GPIO.output(pin, value)
GPIO.output(SOME_OTHER_PIN, GPIO.input(BLUE_PIN))
except KeyboardInterrupt:
pass # Intentionally ignored so the user can stop with CTRL+C.
finally:
GPIO.cleanup()
if __name__ == '__main__':
main()
-
- User
- Beiträge: 4
- Registriert: Sonntag 20. März 2016, 09:52
Hey, cool, danke muß mich echt mal bissl mehr mit der kleinen Himbeere befassen.
Gerade probiert, funktioniert nicht
Traceback (most recent call ast)
Fehler in Zeile 27 <module> main()
Fehler in Zeile 19
GPIO.output(SOME_OTHER_PIN, GPIO.input(BLUE_PIN))
RuntimeError: The GPIO channel has not been set up as an OUTPUT
Sinn der Sache soll sein nur RGB einzugeben, nicht RGBB ... wollte ja eigentlich eine andere LED, ist aber leider erst Montag verfügbar
Wenn ich einfach nur ein + Kabel von B zu B auf dem breadbord stecke reicht die Spannung nicht.
Gerade probiert, funktioniert nicht
Traceback (most recent call ast)
Fehler in Zeile 27 <module> main()
Fehler in Zeile 19
GPIO.output(SOME_OTHER_PIN, GPIO.input(BLUE_PIN))
RuntimeError: The GPIO channel has not been set up as an OUTPUT
Sinn der Sache soll sein nur RGB einzugeben, nicht RGBB ... wollte ja eigentlich eine andere LED, ist aber leider erst Montag verfügbar
Wenn ich einfach nur ein + Kabel von B zu B auf dem breadbord stecke reicht die Spannung nicht.