Skocz do zawartości

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


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
1 godzinę temu, ethanak napisał:

Zajrzyj do Wikipedii pod hasło "pleonazm" 

Coś w tym jest, za pamięć RAM nikt jeszcze nie oberwał 😄

  • Lubię! 1

Wyjaśniłem to mało jasno - miałem na myśli, że będę odchodził od podawania, że "dioda LED" jest niepoprawną formą 😉

  • 4 miesiące później...

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ć.

 

@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 🙂

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
  • 1 miesiąc później...

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
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 😉

  • 1 miesiąc później...
(edytowany)

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

@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.

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

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