Skocz do zawartości

Jan3k

Użytkownicy
  • Zawartość

    11
  • Rejestracja

  • Ostatnio

Reputacja

5 Neutralna

O Jan3k

  • Ranga
    2/10
  1. W powyższym akapicie jest chyba błąd? A nie powinno być "...że PWM programowy faktycznie działa..."? Co do PWM to czym się różni w realizacji sprzętowy od programowego? W jaki sposób inne biblioteki wykorzystują PWM sprzętowy do wspomagania programowego i co to oznacza, że jest w ten sposób stabilniejszy? EDIT: ok, kolega wyżej już napisał spostrzeżenie
  2. Zrobiłem coś podobnego do twojego: import RPi.GPIO as GPIO from time import * tryb = 1 #tryb pracy swiatel GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(21, GPIO.OUT) #czerwona dioda GPIO.setup(18, GPIO.OUT) #zolta dioda GPIO.setup(12, GPIO.OUT) #zielona dioda GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP) #przycisk def button_callback(channel): print("Tryb Awaryjny") tryb = -tryb GPIO.add_event_detect(17,GPIO.FALLING,callback=button_callback) while True: if tryb == 1: GPIO.output(18, 0) GPIO.output(21, 1) sleep(1) GPIO.output(18, 1) sleep(1) GPIO.output(21, 0) GPIO.output(18, 0) GPIO.output(12, 1) sleep(1) GPIO.output(12,0) GPIO.output(18,1) sleep(1) else: GPIO.output(18,0) sleep(1) GPIO.output(18,1) sleep(1) Niestety wyrzuca mi taki błąd. Po mimo, że program "chodzi". To tylko żółta dioda świeci światłem ciągłym bez migania. EDIT: Rozumiem, ze nie podoba mu się zmienna "tryb". Czemu traktuje ją jako lokalną skoro zdefiniowałem ją jako globalną? EDIT2: Dobra, nie zdefiniowałem w funkcji "tryb" jako "global tryb. Co do żółtej diody to zapomniałem, że mam ją podłączoną do IO 19 a nie IO 18 Dzięki za pomoc. Temat można zamknąć.
  3. Można jakos wyłączyć ten alternatywny tryb pracy PWM? Czy trzeba jedną z diod podłaczyć do IO 19? EDIT: #!/bin/sh gpio -g mode 20 out #buzzer gpio -g mode 19 pwm #zolte gpio -g mode 21 out #czerwone gpio -g mode 12 pwm #zielone while true do gpio -g pwm 12 1024 gpio -g write 21 0 gpio -g write 20 1 gpio -g pwm 19 0 sleep 1 gpio -g pwm 12 0 gpio -g pwm 19 1024 gpio -g write 20 1 sleep 1 gpio -g pwm 19 0 gpio -g write 21 1 gpio -g write 20 0 sleep 1 done I już działa dobrze, dzięki za pomoc
  4. Przed i po. Diody zapalił się obie z równą mocą. Podłączone do IO 12 i IO 18.
  5. import RPi.GPIO as GPIO from time import * GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(21, GPIO.OUT) #czerwona dioda GPIO.setup(18, GPIO.OUT) #zolta dioda GPIO.setup(12, GPIO.OUT) #zielona dioda GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP) #przycisk def button_callback(channel): print("Tryb Awaryjny") while True: GPIO.output(18,1) sleep(1) GPIO.output(18,0) sleep(1) GPIO.add_event_detect(17,GPIO.FALLING,callback=button_callback) while True: GPIO.output(18, 0) GPIO.output(21, 1) sleep(1) GPIO.output(18, 1) sleep(1) GPIO.output(21, 0) GPIO.output(18, 0) GPIO.output(12, 1) sleep(1) GPIO.output(12,0) GPIO.output(18,1) sleep(1) Zmodyfikowałem kod dodając tą funkcjonalność. Przeniosłem także przycisk z wejścia IO 4 na IO 17. Pytanie, czemu używasz trybu "GPIO.BOARD" zamiast "GPIO.BCM"? Nie łatwiej się trzymać tylko i wyłącznie jednego, żeby się nie mieszały? Co do mojego programu. To teraz dzieje się coś dziwnego. Puki nie kliknę przycisku to główna pętla działa tak jak wcześniej, czyli dobrze. Po wciśnięciu przycisku uruchamia się kolejny "while" i działają dwa równolegle? Dioda Zielona i czerwona migają tak jak w głównej sekwencji. Natomiast Żółta miga z częstotliwością 1Hz tak jak w funkcji button_callback. Powinienem dodać do funkcji "button_callback" instrukcję warunkową która na ponowne wciśnięcie przycisku wywołuje "breake" i wraca do głównej pętli? albo jak można zablokować główną pętle tak by po wywołaniu przerwania się nie wykonywała?
  6. #!/bin/sh gpio -g mode 17 up #przycisk gpio -g mode 18 pwm #dioda zielone gpio -g mode 12 pwm #dioda zolta gpio -g mode 20 out #buzzer gpio -g mode 21 out #dioda czerwona while true do gpio -g write 21 0 gpio -g pwm 18 0 gpio -g pwm 12 1024 gpio -g write 20 1 gpio -g wfi 17 falling gpio -g pwm 18 1024 gpio -g pwm 12 0 gpio -g write 21 1 gpio -g write 20 0 sleep 1 raspistill -t 200 -n -o 'zdjecie-%d.jpg' -dt done Zmodyfikowałem kod. Tak jak mówiłeś, usuwając instrukcję warunkową. Odwróciłem też zapalanie diod z PWM. Nic to nie zmieniło, dalej są sprzężone Nawet gdy wysterowuję je bezpośrednio konsoli to też obie naraz wysterowuje tak samo.
  7. Szanowni Państwo, Zrealizowałem działanie świateł zgodnie z Państwa instrukcją i światła działają jak należy. Chciałbym dodać funkcjonalność działania świateł awaryjnych (żółta miga z częstotliwością 1 Hz) załączaną za pomocą przycisku. Zrealizowałem to poniższa metodą i działa. Mimo, że nie do końca tak jak bym chciał (trzeba czekać do końca pętli). Niestety nie jest to metoda przerwań ( a jak to nazwać? "polling"?). Da się jakoś inaczej prosto to zrealizować? Czy trzeba by dodać osobną zewnętrzną funkcję która będzie wywoływana i przerywana na zbocze opadające przycisku? import RPi.GPIO as GPIO from time import * GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(21, GPIO.OUT) #czerwona dioda GPIO.setup(18, GPIO.OUT) #zolta dioda GPIO.setup(12, GPIO.OUT) #zielona dioda GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP) #przycisk while True: while not GPIO.input(4): GPIO.output(18, 0) sleep(1) GPIO.output(18, 1) sleep(1) GPIO.output(18, 0) GPIO.output(21, 1) sleep(1) GPIO.output(18, 1) sleep(1) GPIO.output(21, 0) GPIO.output(18, 0) GPIO.output(12, 1) sleep(1) GPIO.output(12,0) GPIO.output(18,1) sleep(1) EDIT: Nie chcę od razu tutaj jakiejś burzy wywoływać. Pytam z ciekawości.
  8. Niestety oba sposoby nie pomogły ale zauważyłem że taśma z przewodami od kamery była poluzowana i bez problemu wyszła z gniazda. Może mocowanie było poluzowane albo zatrzask? Czy jest możliwe że doszło do uszkodzenia kamery? EDIT: poprawiłem mocowanie taśmy i po tym zauważyłem, że nie domknąłem zatrzasku od zewnętrznej strony. Poprawiłem i już działa dobrze. Dzięki za pomoc. Specjalnie założyłeś konto, żeby pomóc innym w takiej sprawie? Szanuję
  9. Wrzucę skrypt który używam teraz do wyzwolenia kamery za pomocą przycisku. W czasie oczekiwania obie diody są zgaszone. Gdy klikam przycisk to na sekundę obie się zapalają. #!/bin/sh gpio -g mode 4 up #przycisk gpio -g mode 18 pwm #dioda zielone gpio -g mode 12 pwm #dioda zolta gpio -g mode 20 out #buzzer gpio -g mode 21 out #dioda czerwona while true do gpio -g write 21 0 gpio -g pwm 18 1024 gpio -g pwm 12 0 gpio -g write 20 1 if gpio -g wfi 4 falling then gpio -g pwm 18 0 gpio -g pwm 12 1024 gpio -g write 21 1 gpio -g write 20 0 sleep 1 raspistill -t 200 -n -o 'zdjecie-%d.jpg' -dt fi done Restart RPI nic nie dał. EDIT: Czy możliwym powodem błędu jest wspólny GND?
  10. Taki błąd mi wyrzuca. Dodam, że wcześniej kamera działa zgodnie z kursem. A teraz próbowałem uruchomić i taki błąd. Ktoś coś?
  11. Pytanie. Mam podłączone diody jak do symulatora światłem. Mam wspólną szynę GND na pinie34 dla wszystkich diod (plus buzzer). Dioda zielona i żółta są podłączone do pinów PWM (IO 18 i IO 12). Gdy wysteruję dowolną z nich wyjściem PWM to obie diody (zielona i żółta) zapalają się z taką samą mocą ( czerwona nie reaguje). Gdy wysteruję IO 18 na wartość 1024 to obie się zapalną a następnie IO 12 na 0 to obie zgasną. Ktoś wie czemu tak się dzieje i jak to naprawić ? jest sprzężenie sprzętowe dla obu PWM'ów?
×
×
  • Utwórz nowe...