Skocz do zawartości

Kurs Arduino - #2 - podstawy programowania, porty I/O


Komentator

Pomocna odpowiedź

4 godziny temu, Treker napisał:

będziemy to zmieniać

Ja bym się najpierw trzy razy zastanowił. Zajrzyj do Wikipedii pod hasło "pleonazm" - akurat "dioda LED" jest tam jako przykład dopuszczalnego użycia z wyjaśnieniem dlaczego.

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

Krótkie pytanie techniczne. Czy da się jakoś pauzować program wysłany na płytkę. Pytam, bo po wpisaniu programu w trakcie nauki, fajnie działa, ale program działa w czasie dalszego czytania kolejnych zadań kursu i trochę to deprymuje. Zanim wpiszę następny program, dotychczasowy stale jest aktywny. Czy po prostu tym się nie przejmować.

 

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

@szlak18 niestety nie ma takiej możliwości. Najprostsza opcja to wyłączenie zasilania Arduino. Nie trzeba się tym jednak przejmować - program może działać cały czas, nic złego się nie stanie. Oczywiście można samodzielnie napisać program, który będzie symulował takie działanie (np. zwarcie jednego pinu będzie oznaczało, że układ ma się wyłączyć), ale na razie proponowałbym iść dalej bez dorabiania takich funkcji 🙂

Link do komentarza
Share on other sites

Dziękuję za odp.

Wracając do programu z sygnalizacją świetlną, zmniejszając czas opóźnienia w pętlach możemy zmierzyć a raczej oszacować czas naciśnięcia przycisku - skracając do 200 ms mamy już stabilne przełączanie świateł, bo szybko naciskając przycisk wiemy że robimy to nieco szybciej niż 200 ms. Jeżeli potrzymamy przycisk stale wciśnięty,  przy tych 200 ms to sekwencja będzie się stale przełączała tak długo jak będzie wciśnięty przycisk. 

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

Cześć, też chciałbym podzielić się wynikami moich działań w ramach tej części kursu. Po wykonaniu części ze światłami drogowymi, dołożyłem jeszcze światła dla pieszych, które działały podobnie jak w rzeczywistości. Czerwone dla aut - zielone dla pieszych, zielone i pomarańczowe dla aut - czerwone dla pieszych. Postanowiłem się jednak chwile zabawić i przy wykorzystaniu funkcji warunkowej i dwóch pętli while dodałem opcję migania świateł dla pieszych przed zmianą świateł dla aut. Początek migania świateł dla pieszych i zmianę świateł dla aut inicjowane jest drugim przyciskiem. 

Są to moje pierwsze "Koty za płoty" z arduino i próba przypomnienia sobie podstaw programowania czy to z uczelni czy z własnych prób, więc w kodzie może być masa błędów i wymaga on z pewnością dużej dozy optymalizacji. 

 

void setup() {
  pinMode(7, OUTPUT); //Dioda czerwona jako wyjście
  pinMode(6, OUTPUT); //Dioda zolta jako wyjscie
  pinMode(5, OUTPUT); //dioda zielona jako wyjscie
  pinMode(9, OUTPUT); //Czerwone dla pieszych
  pinMode(8, OUTPUT); //Zielone na pieszych
  digitalWrite(7, LOW); //Wyłączenie diody czerwonej
  digitalWrite(6, LOW); // Wylaczenie diody zoltej
  digitalWrite(5, LOW); //Wylaczenie diody zielonej
  digitalWrite(8, LOW); //Wylaczenie zielonego dla pieszych
  digitalWrite(9, LOW); // Wylaczenie czerwonego dla pieszych
  digitalWrite(4, INPUT_PULLUP); //Przycisk jako wejscie, wlaczenie swiatel
  digitalWrite(3, INPUT_PULLUP); //przycisk migania pieszym
}
 
void loop()
{
  if (digitalRead(4) == LOW) { //Jeśli przycisk wciśnięty
    digitalWrite(7, HIGH); //Włącz diode czerwona
    digitalWrite(8, HIGH); //wlacz zielone na pieszych
    delay(4000);
       
    while (digitalRead(3) == HIGH)
    digitalWrite(7, HIGH); //Włącz diode czerwona
    digitalWrite(8, LOW); //Miganie zielonego
    delay(500);
    digitalWrite(8, HIGH);
    delay(500);
    digitalWrite(8, LOW);
    delay(500);
    digitalWrite(8, HIGH);
    delay(500);
    digitalWrite(8, LOW);
    delay(500);
    digitalWrite(8, HIGH);
    delay(500);
    digitalWrite(8, LOW);
    
    digitalWrite(7, HIGH);  //wlacz siwatlo czerwone 
    digitalWrite(6, HIGH); //Wlacz swiatlo zolte
    digitalWrite(9, HIGH); //zmiana czerwone dla pieszych
    delay(2000);
    
    digitalWrite(7, LOW); //Wylacz czerwone
    digitalWrite(6, LOW); //Wylacz zolte
    digitalWrite(5, HIGH); //Wlacz zielone
    digitalWrite(9, HIGH); //zmiana czerwone dla pieszych
    delay(5000);

    while (digitalRead(3) == HIGH)
    digitalWrite(5, HIGH); //Włącz diode czerwona
    digitalWrite(9, LOW); //Miganie czerwonego
    delay(500);
    digitalWrite(9, HIGH);
    delay(500);
    digitalWrite(9, LOW);
    delay(500);
    digitalWrite(9, HIGH);
    delay(500);
    digitalWrite(9, LOW);
    delay(500);
    digitalWrite(9, HIGH);
    
    
    digitalWrite(5, LOW); //wylacz zielone
    digitalWrite(6, HIGH); //wlacz zolte
    digitalWrite(9, HIGH); //Czerwone dla pieszych
    delay(1000);
    
    digitalWrite(6, LOW); //wylacz zolte
    digitalWrite(7, HIGH); //Wlacz czerwone
    digitalWrite(8, HIGH); //wlacz zielone dla pieszych
    digitalWrite(9, LOW); //wylacz czerowne dla pieszych
    delay(10000);
    
    digitalWrite(7, LOW); //Wyłączenie diody czerwonej
    digitalWrite(6, LOW); // Wylaczenie diody zoltej
    digitalWrite(5, LOW); //Wylaczenie diody zielonej
    digitalWrite(8, LOW); //Wylaczenie zielonego dla pieszych
    digitalWrite(9, LOW); //Wylaczenie czerownego dla piezych
  } 
  
}

 

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

Dnia 4.01.2020 o 14:20, BHBmacieg napisał:

Są to moje pierwsze "Koty za płoty" z arduino i próba przypomnienia sobie podstaw programowania czy to z uczelni czy z własnych prób, więc w kodzie może być masa błędów i wymaga on z pewnością dużej dozy optymalizacji. 

Super, bardzo fajny pomysł na rozbudowanie projektu! Powodzenia podczas dalszych eksperymentów 😉

Link do komentarza
Share on other sites

Witam, napisałam program wejścia układu w praktyce i zbudowałam wszystko na płytce to dioda cały czas świeci. Nawet skopiowałam program i dalej to samo. Tylko nie za bardzo wiem jak podłączyć przycisk i jedną nogę podłączyłam do wprowadzenia nr. 7, a drugą do masy minusa. Liczę na szybką pomoc. 

Edytowano przez Szatanak
Link do komentarza
Share on other sites

@Szatanak witam na forum!

11 godzin temu, Szatanak napisał:

a drugą do masy minusa.

Do linii na płytce stykowej czy do GND Arduino? Może spróbuj użyć inne przewody, czasami coś w nich wewnętrznie nie zwiera.

Jak nie zadziała to proszę podeślij zdjęcie to coś pomyślimy.

Link do komentarza
Share on other sites

7 godzin temu, Gieneq napisał:

@Szatanak witam na forum!

Do linii na płytce stykowej czy do GND Arduino? Może spróbuj użyć inne przewody, czasami coś w nich wewnętrznie nie zwiera.

Jak nie zadziała to proszę podeślij zdjęcie to coś pomyślimy.

Po prostu podłączyłam do tej samej linii minus i wprowadzenie nr.7. Naprawiłam to i już skończyłam ten rozdział.

  • Lubię! 1
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.