Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Attiny2313 - Program sygnalizacji świetlnej skrzyżowania dwóch ulic.

Orion045 07 Jan 2017 17:44 1800 9
Optex
  • #1
    Orion045
    Level 12  
    Nie wiem czy piszę w dobrym miejscu. Chcę napisać program sygnalizacji świetlnej skrzyżowania dwóch ulic z przejściami dla pieszych z przyciskami na Attiny2313 lub 4313. Jedna droga to 4 sygnalizatory dla ulicy i 4 sygnalizatory dla pieszych. Dobrze ustawiam wyjścia z Attiny2313? Jak napisać instrukcje w pętli działania sygnalizacji?
    Code: c
    Log in, to see the code
  • Optex
  • #3
    Orion045
    Level 12  
    Mam Arduino Uno rev. 3 + programator USB ASP + płytka stykowa 840 + 5 Attiny2313. Program sygnalizacji skrzyżowania z przejściami dla pieszych działa mi. Nie wiem jak zrobić by przyciskiem załączać przejście dla pieszych.


    Code: c
    Log in, to see the code



    Jak to napisać w pętli żeby powtórzyć pięć razy to:
    Code: c
    Log in, to see the code
  • Optex
  • #4
    Orion045
    Level 12  
    Jak to napisać w pętli powtarzanej pięć razy?

    Code: c
    Log in, to see the code


    Jak napisac sterowanie przyciskami przejść dla pieszych?
    Code: c
    Log in, to see the code
  • #5
    emarcus
    Level 38  
    Orion045 wrote:

    Jak napisac sterowanie przyciskami przejść dla pieszych?

    Wg informacji, które podałeś dotychczas takiej możliwości nie ma!
    1. Pierwsza zasadnicza sprawa to:
    - czy program uznany w poscie #3 że ‘działa mi’ , jest/był testowany na płytce Arduino uno3, czy po wpisaniu do Attiny 2313?
    2. Nawet jeżeli jest pisany i kompilowany dla Attiny2313 (wymagany jest support w arduino dla tego processora), to i tak nie włączysz się do programu w dowolnym jego miejscu.
    Program jest pisany ‘metodą łańcuszkową’, zamiast przyjąc metodę blokową/ strukturalną.

    Jeżeli potrzebujesz aby processor ‘zauważył’ naciśnięcie przycisku na przejsciu, to z pewnoscia nie mozesz stosowac ‘delay’ jako miernika upływu czasu, który blokuje sekwencję petli i krótkie naciśnięcie przycisku może byc , a raczej z pewnością będzie ‘przeoczone’ – chyba że jest to interrupt.
    Stosuj raczej metodę nieblokująca; -na przykład millis.

    Pętla główna programu winna byc możliwie krótka, ograniczona do sprawdzania upływu czasu (nie jego odliczania! – niech timer odlicza czas) i wywołania kolejnych sekwencji zmiany świateł wg wcześniej przygotowanej tabeli, co umożliwi wykrycie naciśnięcia przycisku.
    Posługuj się dodatkowymi zmiennymi pomocniczymi (flagami) od których uzależnisz przeskok do kolejnej sekwencji. Podobnie wykorzystasz tą metodę w zmianie zwykłej sekwencji na specjalną dla przejścia dla pieszych (czyli ‘na rządanie’).

    e marcus
  • #6
    Orion045
    Level 12  
    Na razie piszę i próbuję na Arduino Uno Rev.3. Na płytce 830 stykowej jest 15 Led i dwa przyciski. Rezystory 220 om do katod diod Led są podłączone. Na razie pisałem proste programy. Zrobiłem w ten sposób.

    Code: c
    Log in, to see the code
  • #8
    Orion045
    Level 12  
    ditomek wrote:
    a pętle "for" już przerabiałeś?


    Nie. Na razie bawiłem się wyświetlaczem LED 7 segmentowym i wyświetlaczem LCD. Kupiłem gołe Arduino Uno i teraz powoli dokupuje części. Myślę teraz o czujniku ruchu i taśmie led aby zrobić oświetlenie w kuchni. Bo zrobienie makiety skrzyżowania trochę potrwa.
  • #10
    Orion045
    Level 12  
    Najszybciej uczę się na przykładach. Teraz wiem jak zastosować instrukcję for.Przepraszam już poprawiam.
    Code: c
    Log in, to see the code


    Pętla jest wykonywana(int i=0;i<5; ) od 0 do 4 czyli 5 razy, i++ zwiększa o 1. Tak? W przypadku i=5 od 0 do 5 czyli 6 razy? Mam pytanie czy w dolnym kodzie wszystko dobrze?Uprościłem kod do mijanki aby się nauczyć obsługi przycisków. Jak zrobić żeby diody świeciły się tak czerwona w pierwszym a zielona w drugim przez cały czas a dopiero po naciśnięciu przycisku załączyła się sekwencja zmiany na zielona pierwszy i czerwona drugi sygnalizator?Niby mi działa ale wszystko nie tak.

    Code: c
    Log in, to see the code