3. Zmiana prędkości migania diod przy pomocy przycisków

W tym punkcie nauczymy się kolejnych dwóch funkcji. Pierwsza to funkcja digitalRead(), a druga to funkcja warunkowa if(). Funkcja digitalRead() pozwala nam na odczytanie stanu na danym pinie- czy jest to stan wysoki czy niski, natomiast funkcja if() wprowadza nam do programu warunek. To znaczy jeżeli warunek zawarty w if() zostanie spełniony to mikrokontroler przechodzi do programu, który jest w nim zawarty. Przykład:
|
1 2 3 4 5 6 7 |
if(digitalRead(6) == 0) //jeżeli na pinie 6 Arduino pojawi się stan niski to: { //tutaj, pomiędzy nawiasami klamrowymi zawieramy program, //który ma być wykonywany po spełnieniu warunku } |
Okej to skoro już to wiem to jesteśmy w stanie wykonać zmianę prędkości świecenia diod. Tylko w jaki sposób zinterpretować w programie zmianę prędkości ? Możemy zrobić to na przykład, że stworzymy zmienną o nazwie czas, której wartość początkowa to zero. Zmienna ta będzie wstawiona do funkcji delay() zamiast faktycznego czasu. Jeżeli zostanie wciśnięty przycisk A to do tej zmiennej dodamy 70ms, a jak przycisk B to 200ms. Brzmi prosto, więc bierzmy się do pisania.
Na samym początku dajmy naszym przyciskom jakieś nazwy. Moje przyciski będą nazywać się A i B:
|
1 2 |
int A = 6; //literkę A przypisuje przyciskowi podłączonemu do pinu 6 int B = 5; //literkę B przypisuje przyciskowi podłączonemu do pinu 5 |
Następnie w funkcji void setup() interpretujemy te przyciski jako wejścia:
|
1 2 |
pinMode(A,INPUT); //pin 6 Arduino ustawiam jako wejście pinMode(B,INPUT); //pin 5 Arduino ustawiam jako wejście |
Teraz możemy przejść do funkcji void loop() i stworzyć warunki dla naszych przycisków:
|
1 2 3 4 5 6 7 8 9 10 11 |
if(digitalRead(A) == 0){ //jeżeli stan na przycisku A = 0 to: digitalWrite(ledG, HIGH); //ustaw stan wysoki na pin 9 digitalWrite(ledR, LOW); //ustaw stan niski na pin 10 delay (czas + 70); //czekaj 70ms bo czas = 0 => 0 + 70 = 70 digitalWrite(ledG, LOW); //ustaw stan niski na pin 9 digitalWrite(ledR, HIGH); //ustaw stan wysoki na pin 10 delay (czas + 70); //czekaj 70ms bo czas = 0 => 0 + 70 = 70 digitalWrite(ledG, LOW); //ustaw stan niski na pin 9 digitalWrite(ledR, LOW); //ustaw stan niski na pin 10 } |
Jak widać w tym programie jest realizowany warunek, że jeżeli przycisk A jest równe 0, czyli zwarte przez przyciski do masy to ma na przemiennie zapalać diody. Tak samo jak w programie wcześniej tylko, że tutaj na koniec dodałem jeszcze zgaszenie dwóch diod, ponieważ jakbym tego nie dodał to po wciśnięciu przycisku i puszczeniu go, po zakończeniu programu świeciła by się jedna dioda. Zwróć tutaj uwagę na funkcję delay() jak zostało to zrealizowane. Kolejna funkcja warunkowa będzie dla przycisku B i wygląda następująco:
|
1 2 3 4 5 6 7 8 9 10 11 |
if(digitalRead(B) ==0){ //jeżeli stan na przycisku B = 0 to: digitalWrite(ledG, HIGH); //ustaw stan wysoki na pin 9 digitalWrite(ledR, LOW); //ustaw stan niski na pin 10 delay (czas + 200); //czekaj 200ms bo czas = 0 => 0 + 200 = 200 digitalWrite(ledG, LOW); //ustaw stan niski na pin 9 digitalWrite(ledR, HIGH); //ustaw stan wysoki na pin 10 delay (czas + 200); //czekaj 200ms bo czas = 0 => 0 + 200 = 200 digitalWrite(ledG, LOW); //ustaw stan niski na pin 9 digitalWrite(ledR, LOW); //ustaw stan niski na pin 10 } |
Od razu widać, że jest to skopiowana wersja funkcji warunkowej dla A, z taką różnicą, że zmieniliśmy przycisk oraz wartość opóźnienia. Tak zrobiony program kompilujemy i wgrywamy do Arduino. Po zakończeniu wgrywania powinniśmy otrzymać taki efekt:

W ten sposób dotarliśmy do końca pierwszej części programowania. Mam nadzieję, że poradnik został napisany w miarę przejrzyście i zrozumiale. Po każdej części poradnika dostępne będą gotowe kody, jeżeli chciałbyś zobaczyć kod w całości, bądź masz z czymś problem. Jeżeli czegoś nie zrozumiałeś bądź chcesz się o coś zapytaj to pytaj śmiało w komentarzach. Dzięki za uwagę i do zobaczenia w kolejnej części poradnika ;)
wsady oraz schematy do tej części kursu:
![]()
Jeżeli chcesz być informowany na bieżąco o nowych częściach kursu to kliknij „Lubię to!” bądź subskrybuj naszą stronę, aby otrzymywać na adres e-mail nowości ze strony. Jeżeli masz jakieś pytania to śmiało zadawaj je na forum ; )