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

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • 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.