Skocz do zawartości

Kurs Raspberry Pi - #14 - podstawy Pythona, GPIO


Komentator

Pomocna odpowiedź

Witam!

Jestem zupełnie zielony z programowania i Raspberry, a do tego humanista, ale...

Czy nasz kod programu do świateł drogowych nie mógłby się skończyć na:

    GPIO.output(20, GPIO.HIGH)
    GPIO.output(21, GPIO.LOW)
    sleep(1)

czyli wyłączeniu diody zielonej na pinie 21, włączeniu żółtej na pinie 20 i odczekaniu sekundy?

Bo w obecnej wersji po wyłączeniu żółtej włączamy czerwoną na pinie 16, czekamy sekundę i... rozpoczynamy pętlę od wyłączenia zielonej i żółtej i ponownym włączeniu czerwonej na sekundę. Mam rację?

Link do komentarza
Share on other sites

@xtk rozumiem że masz na myśli powtórzenie w tym miejscu:

image.thumb.png.973d0c4bf8f12e3d17f2fead74ae19e6.png

Sekwencja wyglada tak: 

cz/-/-

cz/ż/-

-/-/ź

-/ż/-

cz/-/-

Więc tak jak być powinno 🙂 Wyłączenie na początku pętli powoduje że nie ma wątpliwości czy coś jest wyłączone zwłaszcza przy starcie programu.

Edytowano przez Gieneq
Link do komentarza
Share on other sites

Wyłączenie wszystkiego na początku rzeczywiście ma sens, zwłaszcza, że Ctrl+Z przy poprzednim uruchomieniu pozostawia którąś diodę włączoną.

Ale przy cytowanym powtórzeniu czerwona świeci 3 sekundy: 1 s na końcu (po co?), + 1 s na początku (OK) + 1 s z żółtą (OK).

Chodzi mi o usunięcie:

cz/-/- z końca.

  • Lubię! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Witam,

Problem już rozwiązałem lecz mam pytanie na przyszłość ponieważ nie znam źródła tego problemu...

Pisząc kod w nano każdą linię w pętli while zaczynam od TABulatora. Efekt jest dla mnie zaskakujący ponieważ jak widać w kodzie poniżej oraz w nano wszystko jest ładnie w jednej linii. Pojawiał się jednak błąd spacji/tabulatora więc otworzyłem kod w Notepad++ gdzie zauważyłem (screenshot poniżej), że niektóre linie są poprzesuwane - i faktycznie w niektórych liniach było tam przesunięcie tabulatorem a w niektórych zostało to jakoś przekonwertowane na spacje.

Wie ktoś dlaczego się tak zadziało? Z góry dziękuję za odpowiedź 🙂 

image.thumb.png.248bb479b31103f26e135ac6e6b69fb0.png

import RPi.GPIO as GPIO
from time import *

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(16, GPIO.OUT)
GPIO.setup(20, GPIO.OUT)
GPIO.setup(21, GPIO.OUT)

while True:
	#czerwone
	GPIO.output(16, GPIO.HIGH)
        GPIO.output(20, GPIO.LOW)
        GPIO.output(21, GPIO.LOW)
	sleep(1)
	#czerwone i zolte
	GPIO.output(20, GPIO.HIGH)
	sleep(1)
	#zielone
        GPIO.output(16, GPIO.LOW)
        GPIO.output(20, GPIO.LOW)
        GPIO.output(21, GPIO.HIGH)
	sleep(1)
	#zolte
        GPIO.output(20, GPIO.HIGH)
        GPIO.output(21, GPIO.LOW)
        sleep(1)

 

Link do komentarza
Share on other sites

10 minut temu, grucha532 napisał:

Wie ktoś dlaczego się tak zadziało?

Tak - inna szerokość tabulatora w dwóch różnych programach.

Nigdy, przenigdy nie mieszaj tabulatorów ze spacjami! Najlepiej w ogóle nie używać tabulatorów - porządne edytory potrafią posługiwać się spacjami. Nie wiem jak ten cały Notepad++, ale mój Geany ma przełącznik "używaj zawsze spacji". W nano masz do tego opcję -E, czyli coś w stylu:

nano -E mojprogram.py

Możesz sobie na końcu pliku ~/.bashrc dodać linijkę:

alias nano='nano -E'

wtedy bash sam doda -E do wywołania nano (musisz się przelogować aby to zadziałało).

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Aaaaaa, a tutaj natrafiłem na bardzo dziwny problem. Staram się w Pythonie odczytać stan switcha.

Ustawiam stan danego pinu na wejście 
GPIO.setup(26, GPIO.IN)

I w pętli odczytuję stan

print(GPIO.input(26))

No i mam jakąś dziwną... jazdę. Generalnie mam wrażenie, że od razu po wciśnięciu/puszczeniu switcha przez "chwilę" stan jest odczytywany poprawnie, ale potem się... sam zmienia. 

Powiedzmy drukuje to tak:

1
1
1
tutaj naciskam na switch i zmienia się na:
0
0
0
tutaj puszczam switch i poprawnie zmienia się na:
1
1
1
i nagle, pomimo tego, że nic nie naciskam zaczyna drukować zera!
0
0
0

itd....

Pomocy, ratunku 🙂 o co to może chodzić?

Link do komentarza
Share on other sites

Treker
Ta treść została wynagrodzona przez moderatora!

Attero otrzymał odznakę: "Odkrywca (podanie odp. na własne pytanie)"

Dzięki za kurs fajna sprawa. Mam nadzieję, że pojawi się więcej materiału z pythonem w roli głównej. Dla osób które przerabiają ten kurs te kilka lat po publikacji mam szybkie info: Sterowanie pinami zmieniło się w najnowszych OS, a WiringPi juz nie ma wsparcia. W internecie pełno jest nieaktualnych informacji nawet  na oficjalnej stronie RPi. U mnie zadziałało dopiero użycie libgpiod

Raspberry Pi 4B 

1. Sprawdzenie GPIO

Lista dostępnych układów GPIO:

gpiodetect

Lista dostępnych pinów:

gpioinfo

2. Sterowanie GPIO z terminala (libgpiod)

Włączenie diody LED na GPIO17:

gpioset gpiochip0 17=1

Wyłączenie diody:

gpioset gpiochip0 17=0

 

 

  • Lubię! 2
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.