Projektant systemu wbudowanego musi się zmierzyć z problemem nadania odpowiedniego tempa wykonywania swojego programu. Czy dotyczy to zapalenia diody LED, czy obsługi przekaźnika, oczekujemy działania w określonym czasie. Platforma Arduino umożliwia wykorzystanie dwóch metod odmierzania czasu w programie.
Funkcja delay() – czym jest i do czego służy
Jest to funkcja, która po wywołaniu zatrzymuje działanie programu na podaną jako argument liczbę ms. Oto przykład jej zastosowania:
Linia 1. digitalWrite otwórz nawias okrągły ledPin przecinek HIGH zamknij nawias okrągły średnik.
Linia 2. delay otwórz nawias okrągły 100 zamknij nawias okrągły średnik.
Linia 3. digitalWrite otwórz nawias okrągły ledPin przecinek LOW zamknij nawias okrągły średnik.
Jak widać w powyższym przykładzie, po przejściu w stan wysoki pinu ledPin następuje odczekanie 100 ms, po czym pin ledPin przechodzi w stan niski.
Ważne!
Pamiętaj, że mikrokontroler (po wywołaniu funkcji) oczekuje na jej zakończenie, będąc w stanie zablokowanym – czyli w stanie bezczynności.
Funkcja delay() – ćwiczenie
Co nam będzie potrzebne:
przewody połączeniowe męsko‑męskie,
Arduino Uno,
rezystor 100 Ωomega,
dioda LED,
kabel USB typu A‑B do podłączenia do komputera.
Układ budujemy zgodnie z następującym schematem:
RJAWh0GDLf8ZX
Schemat przedstawia płytkę Arduino Uno XA1 i połączone z nią rezystor R1 i diodę LED D1. Płytka Arduino przedstawiona jest na schemacie jako pionowo ustawiony prostokąt z pogrupowanymi pinami przy obu dłuższych pionowych bokach. Piny z lewej to od góry: grupa Serial: 1. D0_RX0, odstęp, grupa I2C: 1. SCL, 2. SDA, odtęp, grupa Analogue: 1. A5, 2. A4, 3. A3, 4. A2, 5. A1, 6. A0, 7. AREF, odstęp, grupa Power: 1. GND, 2. GND, 3. GND, 4. 3.3 V, 5. 5 V, 6. VIN. Piny z prawej to od góry: grupa GPIO: 1. D2_INT0, 2. D3_INT1, 3. D4, 4. D5, 5. D6, 6. D7, 7. D8, 8. D9, 9. D10_CS, 10. D11, 11. D12, 12. D13, odstęp, grupa SPI: 1. SPI_MISO, 2. SPI_MOSI, 3. SPI_SCK, 4. SPI_5 V, 5. SPI_GND, 6. SPI_RESET, odstęp, grupa Misc.: 1. RESET, 2. IOREF. Z pinu D8 poprowadzono przewód do rezystora R1 100 omów, który na schemacie jest reprezentowany przez prostokąt osadzony na linii reprezentującej przewody. Rezystor połączony jest diodą LED D1 reprezentowaną na schemacie jako trójkąt osadzony na linii przedstawiającej przewód. Jeden wierzchołek trójkąta pokrywa się z linią. Przez ten wierzchołek przechodzi pozioma kreska, a pod trójkątem znajdują się dwie ukośne równoległe do siebie strzałki z grotami skierowanymi w dół w prawo. Linia reprezentująca przewód biegnie dalej od diody do GND reprezentowanego jako trójkąt.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Wykonanie połączeń na płytce stykowej:
Przygotuj potrzebne elementy:
RGfTOp05FSouk
Zdjęcie przedstawia moduł Arduino Uno, kabel USB, kilka przewodów, diodę LED, rezystor, płytkę stykową.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Podłącz kabel USB i umieść diodę LED w płytce stykowej.
RjiaBF0gUo55d
Zdjęcie przedstawia moduł Arduino Uno z podpiętym kablem USB, diodę LED wpiętą w płytkę stykową.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Rezystor 100 Ωomega połącz z anodą diody LED.
R196rIC9RLdav
Zdjęcie przedstawia moduł Arduino Uno z podpiętym kablem USB, diodę LED wpiętą w płytkę stykową oraz rezystor wpięty w płytkę stykową tak, że jest on połączony jedną nóżką z anodą diody.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Przewodem połączeniowym podłącz GND z Arduino do katody diody LED.
R1Tfg46LwNCuu
Zdjęcie przedstawia moduł Arduino Uno z podpiętym kablem USB, diodę LED wpiętą w płytkę stykową oraz rezystor wpięty w płytkę stykową tak, że jest on połączony jedną nóżką z anodą diody. Katoda diody połączona jest przewodem z masą GND na płytce Arduino Uno.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Za pomocą przewodu połączeniowego podłącz pin numer 8 z Arduino do rezystora.
R1b28InKwgQXo
Zdjęcie przedstawia moduł Arduino Uno z podpiętym kablem USB, diodę LED wpiętą w płytkę stykową oraz rezystor wpięty w płytkę stykową tak, że jest on połączony jedną nóżką z anodą diody. Katoda diody połączona jest przewodem z masą GND na płytce Arduino Uno. Drugim przewodem połączono wolną nóżkę rezystora z pinem D8.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Układ jest gotowy do pracy.
Pisanie programu
Otwieramy i zapisujemy nowy sketch w Arduino IDE.
W funkcji setup() określamy tryb pracy pinu numer 8 – pin sterujący LED jako wyjście:
Uruchom poniższy film, by zobaczyć prezentację działania programu.
RTFqlJM9IMULg
Film przedstawia moduł Arduino Uno z podpiętym kablem USB, diodę LED wpiętą w płytkę stykową oraz rezystor wpięty w płytkę stykową tak, że jest on połączony jedną nóżką z anodą diody. Katoda diody połączona jest przewodem z masą GND na płytce Arduino Uno. Drugim przewodem połączono wolną nóżkę rezystora z pinem D8. Po uruchomieniu programu, dioda świeci na czerwono.
Film przedstawia moduł Arduino Uno z podpiętym kablem USB, diodę LED wpiętą w płytkę stykową oraz rezystor wpięty w płytkę stykową tak, że jest on połączony jedną nóżką z anodą diody. Katoda diody połączona jest przewodem z masą GND na płytce Arduino Uno. Drugim przewodem połączono wolną nóżkę rezystora z pinem D8. Po uruchomieniu programu, dioda świeci na czerwono.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Film przedstawia moduł Arduino Uno z podpiętym kablem USB, diodę LED wpiętą w płytkę stykową oraz rezystor wpięty w płytkę stykową tak, że jest on połączony jedną nóżką z anodą diody. Katoda diody połączona jest przewodem z masą GND na płytce Arduino Uno. Drugim przewodem połączono wolną nóżkę rezystora z pinem D8. Po uruchomieniu programu, dioda świeci na czerwono.
Zróbmy symulację funkcji delay(), za pomocą środowiska Tinkercad.
Zrzut ekranu przedstawia okno przeglądarki z otwartą stroną tinkercad. Pod adresem strony znajduje się pasek tytułowy "0936 Arduino – odliczanie czasu". Poniżej znajduje się pasek narzędzi. Od lewej: Obrót w prawo, kosz, cofanie, do przodu, komentarz, po prawo na pasku znajdują się następujące przyciski: Kod, Uruchom symulację, Eksportuj, Udostępnij. Poniżej główną część okna zajmuje puste pole robocze. Po prawo znajduje się pasek, nad którym z listy wybrano „Komponenty wszystko:, poniżej jest pole wyszukiwania. Na przewijalnym pasku zatytułowanym „Ogólne” znajdują się następujące komponenty: rezystor, kondensator, kondensator spolaryzowany, dioda, dioda Zenera, cewka indukcyjna.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Dodaj do głównego okna symulatora płytkę stykową.
RGXNAV1uDeUPY
Zrzut ekranu przedstawia okno przeglądarki z otwartą stroną tinkercad. Pod adresem strony znajduje się pasek tytułowy "0936 Arduino – odliczanie czasu". Poniżej znajduje się pasek narzędzi. Od lewej: Obrót w prawo, kosz, cofanie, do przodu, komentarz, po prawo na pasku znajdują się następujące przyciski: Kod, Uruchom symulację, Eksportuj, Udostępnij. Poniżej główną część okna zajmuje pole robocze, w którym umieszczono płytkę stykową. Po prawo znajduje się pasek, nad którym z listy wybrano „Komponenty wszystko”, poniżej jest pole wyszukiwania. Na przewijalnym pasku zatytułowanym „Ogólne” znajdują się następujące komponenty: bateria 9 V, bateria pastylkowa 3 V, bateria 1,5 V, mała płytka prototypowa, mikro bit, Arduino Uno R3, silnik wibracyjny, silnik prądu.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Dodaj moduł Arduino Uno do okna symulacji.
R113X4BVf7tqq
Zrzut ekranu przedstawia okno przeglądarki z otwartą stroną tinkercad. Pod adresem strony znajduje się pasek tytułowy "0936 Arduino – odliczanie czasu". Poniżej znajduje się pasek narzędzi. Od lewej: Obrót w prawo, kosz, cofanie, do przodu, komentarz, po prawo na pasku znajdują się następujące przyciski: Kod, Uruchom symulację, Eksportuj, Udostępnij. Poniżej główną część okna zajmuje pole robocze, w którym umieszczono płytkę stykową oraz moduł Arduino Uno R3 z kablem USB. Po prawo znajduje się pasek, nad którym z listy wybrano „Komponenty wszystko”, poniżej jest pole wyszukiwania. Na przewijalnym pasku zatytułowanym „Ogólne” znajdują się następujące komponenty: bateria 9 V, bateria pastylkowa 3 V, bateria 1,5 V, mała płytka prototypowa, mikro bit, Arduino Uno R3, silnik wibracyjny, silnik prądu.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Do płytki stykowej dodaj diodę LED.
R19QAw2FYQtnm
Zrzut ekranu przedstawia okno przeglądarki z otwartą stroną tinkercad. Pod adresem strony znajduje się pasek tytułowy "0936 Arduino – odliczanie czasu". Poniżej znajduje się pasek narzędzi. Od lewej: Obrót w prawo, kosz, cofanie, do przodu, komentarz, po prawo na pasku znajdują się następujące przyciski: Kod, Uruchom symulację, Eksportuj, Udostępnij. Poniżej główną część okna zajmuje pole robocze, w którym umieszczono płytkę stykową oraz moduł Arduino Uno R3 z kablem USB W płytkę stykową wpięto diodę LED. Po prawo znajduje się pasek, nad którym z listy wybrano „Komponenty wszystko”, poniżej jest pole wyszukiwania. Na przewijalnym pasku zatytułowanym „Ogólne” znajdują się następujące komponenty: rezystor, dioda LED, przycisk, potencjometr, kondensator, przełącznik suwakowy.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Do anody diody dodaj rezystor o wartości 100 Ωomega.
RDEJ70U4CXxal
Zrzut ekranu przedstawia okno przeglądarki z otwartą stroną tinkercad. Pod adresem strony znajduje się pasek tytułowy "0936 Arduino – odliczanie czasu". Poniżej znajduje się pasek narzędzi. Od lewej: Obrót w prawo, kosz, cofanie, do przodu, komentarz, po prawo na pasku znajdują się następujące przyciski: Kod, Uruchom symulację, Eksportuj, Udostępnij. Poniżej główną część okna zajmuje pole robocze, w którym umieszczono płytkę stykową oraz moduł Arduino Uno R3 z kablem USB. W płytkę stykową wpięto diodę LED oraz rezystor 100 omów w taki sposób, że jedna nóżka rezystora jest połączona z anodą diody, czyli są wpięte w ten sam wiersz. Po prawo znajduje się pasek, nad którym z listy wybrano „Komponenty wszystko”, poniżej jest pole wyszukiwania. Na przewijalnym pasku zatytułowanym „Ogólne” znajdują się następujące komponenty: rezystor, dioda LED, przycisk, potencjometr, kondensator, przełącznik suwakowy.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Podłącz katodę diody LED z pinem GND Arduino.
RcSby3QqnilQe
Zrzut ekranu przedstawia okno przeglądarki z otwartą stroną tinkercad. Pod adresem strony znajduje się pasek tytułowy "0936 Arduino – odliczanie czasu". Poniżej znajduje się pasek narzędzi. Od lewej: Obrót w prawo, kosz, cofanie, do przodu, komentarz, po prawo na pasku znajdują się następujące przyciski: Kod, Uruchom symulację, Eksportuj, Udostępnij. Poniżej główną część okna zajmuje pole robocze, w którym umieszczono płytkę stykową oraz moduł Arduino Uno R3 z kablem USB. W płytkę stykową wpięto diodę LED oraz rezystor 100 omów w taki sposób, że jedna nóżka rezystora jest połączona z anodą diody, czyli są wpięte w ten sam wiersz. Przewodem połączono katodę diody z masą GND. Po prawo znajduje się pasek, nad którym z listy wybrano „Komponenty wszystko”, poniżej jest pole wyszukiwania. Na przewijalnym pasku zatytułowanym „Ogólne” znajdują się następujące komponenty: rezystor, dioda LED, przycisk, potencjometr, kondensator, przełącznik suwakowy.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Wolną nóżkę rezystora podepnij pod pin D8 Arduino.
RfdsZZs17dI80
Zrzut ekranu przedstawia okno przeglądarki z otwartą stroną tinkercad. Pod adresem strony znajduje się pasek tytułowy "0936 Arduino – odliczanie czasu". Poniżej znajduje się pasek narzędzi. Od lewej: Obrót w prawo, kosz, cofanie, do przodu, komentarz, po prawo na pasku znajdują się następujące przyciski: Kod, Uruchom symulację, Eksportuj, Udostępnij. Poniżej główną część okna zajmuje pole robocze, w którym umieszczono płytkę stykową oraz moduł Arduino Uno R3 z kablem USB. W płytkę stykową wpięto diodę LED oraz rezystor 100 omów w taki sposób, że jedna nóżka rezystora jest połączona z anodą diody, czyli są wpięte w ten sam wiersz. Przewodem połączono katodę diody z masą GND. Wolną nóżkę rezystora połączono przewodem z pinem D8. Po prawo znajduje się pasek, nad którym z listy wybrano „Komponenty wszystko”, poniżej jest pole wyszukiwania. Na przewijalnym pasku zatytułowanym „Ogólne” znajdują się następujące komponenty: rezystor, dioda LED, przycisk, potencjometr, kondensator, przełącznik suwakowy.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Przejdźmy teraz do pisania kodu. W tym celu klikamy na przycisk Kod, z listy rozwijanej wybieramy Tekst, potwierdzamy chęć zmiany widoku i czyścimy zawartość.
Przepisz kod, dopasuj widok okna i uruchom symulację.
R1tHfj48uPwfm
Zrzut ekranu przedstawia okno przeglądarki z otwartą stroną tinkercad. Pod adresem strony znajduje się pasek tytułowy "0936 Arduino – odliczanie czasu". Poniżej znajduje się pasek narzędzi. Od lewej: Obrót w prawo, kosz, cofanie, do przodu, komentarz, po prawo na pasku znajdują się następujące przyciski: Zaznaczony na niebiesko (czyli wybrany) Kod, Uruchom symulację, Eksportuj, Udostępnij. Poniżej główną część okna zajmuje pole robocze, w którym umieszczono płytkę stykową oraz moduł Arduino Uno R3 z kablem USB. W płytkę stykową wpięto diodę LED oraz rezystor 100 omów w taki sposób, że jedna nóżka rezystora jest połączona z anodą diody, czyli są wpięte w ten sam wiersz. Przewodem połączono katodę diody z masą GND. Wolną nóżkę rezystora połączono przewodem z pinem D8. Po prawo znajduje się pole z kodem. Nad polem z listy wybrano Tekst. Kod jest następujący: 1. void setup() { 2. pinMode (8, OUTPUT); 3. } 4. void loop() { 5. digitalWrite (8, HIGH); 6. delay (1000); 7. digitalWrite (8, LOW); 8. delay (1000); 9. }
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Film z działania programu.
R1Q1wnjk8vHnK
Film z działania programu przedstawia okno przeglądarki z otwartą stroną tinkercad. Pod adresem strony znajduje się pasek tytułowy "0936 Arduino – odliczanie czasu". Poniżej znajduje się pasek narzędzi. Od lewej: Obrót w prawo, kosz, cofanie, do przodu, komentarz, po prawo na pasku znajdują się następujące przyciski: Zaznaczony na niebiesko (czyli wybrany) Kod, Uruchom symulację, Eksportuj, Udostępnij. Poniżej główną część okna zajmuje pole robocze, w którym umieszczono płytkę stykową oraz moduł Arduino Uno R3 z kablem USB. W płytkę stykową wpięto diodę LED oraz rezystor 100 omów w taki sposób, że jedna nóżka rezystora jest połączona z anodą diody, czyli są wpięte w ten sam wiersz. Przewodem połączono katodę diody z masą GND. Wolną nóżkę rezystora połączono przewodem z pinem D8. Po prawo znajduje się pole z kodem. Nad polem z listy wybrano Tekst. Kod jest następujący: 1. void setup() { 2. pinMode (8, OUTPUT); 3. } 4. void loop() { 5. digitalWrite (8, HIGH); 6. delay (1000); 7. digitalWrite (8, LOW); 8. delay (1000); 9. } Po wybraniu przycisku Uruchom symulację znajdującego się w górnej lewej części okna, dioda zaczyna świecić na czerwono przez sekundę i gaśnie na sekundę. Cykl powtarza się kilkukrotnie.
Film z działania programu przedstawia okno przeglądarki z otwartą stroną tinkercad. Pod adresem strony znajduje się pasek tytułowy "0936 Arduino – odliczanie czasu". Poniżej znajduje się pasek narzędzi. Od lewej: Obrót w prawo, kosz, cofanie, do przodu, komentarz, po prawo na pasku znajdują się następujące przyciski: Zaznaczony na niebiesko (czyli wybrany) Kod, Uruchom symulację, Eksportuj, Udostępnij. Poniżej główną część okna zajmuje pole robocze, w którym umieszczono płytkę stykową oraz moduł Arduino Uno R3 z kablem USB. W płytkę stykową wpięto diodę LED oraz rezystor 100 omów w taki sposób, że jedna nóżka rezystora jest połączona z anodą diody, czyli są wpięte w ten sam wiersz. Przewodem połączono katodę diody z masą GND. Wolną nóżkę rezystora połączono przewodem z pinem D8. Po prawo znajduje się pole z kodem. Nad polem z listy wybrano Tekst. Kod jest następujący: 1. void setup() { 2. pinMode (8, OUTPUT); 3. } 4. void loop() { 5. digitalWrite (8, HIGH); 6. delay (1000); 7. digitalWrite (8, LOW); 8. delay (1000); 9. } Po wybraniu przycisku Uruchom symulację znajdującego się w górnej lewej części okna, dioda zaczyna świecić na czerwono przez sekundę i gaśnie na sekundę. Cykl powtarza się kilkukrotnie.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Film z działania programu przedstawia okno przeglądarki z otwartą stroną tinkercad. Pod adresem strony znajduje się pasek tytułowy "0936 Arduino – odliczanie czasu". Poniżej znajduje się pasek narzędzi. Od lewej: Obrót w prawo, kosz, cofanie, do przodu, komentarz, po prawo na pasku znajdują się następujące przyciski: Zaznaczony na niebiesko (czyli wybrany) Kod, Uruchom symulację, Eksportuj, Udostępnij. Poniżej główną część okna zajmuje pole robocze, w którym umieszczono płytkę stykową oraz moduł Arduino Uno R3 z kablem USB. W płytkę stykową wpięto diodę LED oraz rezystor 100 omów w taki sposób, że jedna nóżka rezystora jest połączona z anodą diody, czyli są wpięte w ten sam wiersz. Przewodem połączono katodę diody z masą GND. Wolną nóżkę rezystora połączono przewodem z pinem D8. Po prawo znajduje się pole z kodem. Nad polem z listy wybrano Tekst. Kod jest następujący: 1. void setup() { 2. pinMode (8, OUTPUT); 3. } 4. void loop() { 5. digitalWrite (8, HIGH); 6. delay (1000); 7. digitalWrite (8, LOW); 8. delay (1000); 9. } Po wybraniu przycisku Uruchom symulację znajdującego się w górnej lewej części okna, dioda zaczyna świecić na czerwono przez sekundę i gaśnie na sekundę. Cykl powtarza się kilkukrotnie.
Polecenie 1
Zmodyfikuj program tak, aby dioda migała co 2 sekundy.
Jest to funkcja, która po wywołaniu zwraca liczbę ms, jaka upłynęła od momentu włączenia zasilania układu. Służy do określania zależności czasowych pomiędzy poszczególnymi instrukcjami/działaniami programu. Przykład zastosowania:
Linia 1. unsigned long czasOdStartu znak równości millis otwórz nawias okrągły zamknij nawias okrągły średnik.
unsigned long czasOdStartu = millis();
Jak widać w powyższym przykładzie, do zmiennej czasOdStartu typu unsigned longzmienna typu unsigned longunsigned long przypisywana jest wartość ms zwrócona przez funkcję millis(). Należy pamiętać, że po przepełnieniu się zmiennej zliczanie zaczyna się od 0.
Funkcja millis() – ćwiczenie
Co nam będzie potrzebne:
przewody połączeniowe męsko‑męskie,
Arduino Uno,
rezystor 100 Ωomega,
dioda LED,
kabel USB typu A‑B do podłączenia do komputera.
Układ budujemy zgodnie z następującym schematem:
RwyFEZPXtZfsL
Schemat przedstawia płytkę Arduino Uno XA1 i połączone z nią rezystor R1 i diodę LED D1. Płytka Arduino przedstawiona jest na schemacie jako pionowo ustawiony prostokąt z pogrupowanymi pinami przy obu dłuższych pionowych bokach. Piny z lewej to od góry: grupa Serial: 1. D0_RX0, odstęp, grupa I2C: 1. SCL, 2. SDA, odtęp, grupa Analogue: 1. A5, 2. A4, 3. A3, 4. A2, 5. A1, 6. A0, 7. AREF, odstęp, grupa Power: 1. GND, 2. GND, 3. GND, 4. 3.3 V, 5. 5 V, 6. VIN. Piny z prawej to od góry: grupa GPIO: 1. D2_INT0, 2. D3_INT1, 3. D4, 4. D5, 5. D6, 6. D7, 7. D8, 8. D9, 9. D10_CS, 10. D11, 11. D12, 12. D13, odstęp, grupa SPI: 1. SPI_MISO, 2. SPI_MOSI, 3. SPI_SCK, 4. SPI_5 V, 5. SPI_GND, 6. SPI_RESET, odstęp, grupa Misc.: 1. RESET, 2. IOREF. Z pinu D8 poprowadzono przewód do rezystora R1 100 omów, który na schemacie jest reprezentowany przez prostokąt osadzony na linii reprezentującej przewody. Rezystor połączony jest diodą LED D1 reprezentowaną na schemacie jako trójkąt osadzony na linii przedstawiającej przewód. Jeden wierzchołek trójkąta pokrywa się z linią. Przez ten wierzchołek przechodzi pozioma kreska, a pod trójkątem znajdują się dwie ukośne równoległe do siebie strzałki z grotami skierowanymi w dół w prawo. Linia reprezentująca przewód biegnie dalej od diody do GND reprezentowanego jako trójkąt.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Wykonanie połączeń na płytce stykowej:
Przygotuj potrzebne elementy.
R15HsphjoPmkm
Zdjęcie przedstawia moduł Arduino Uno, kabel USB, kilka przewodów, diodę LED, rezystor, płytkę stykową.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Podłącz kabel USB oraz umieść diodę LED w płytce stykowej.
RXJtLjo3N8sQc
Zdjęcie przedstawia moduł Arduino Uno, podpięty do niego kabel USB oraz diodę LED wpiętą w płytkę stykową.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Rezystor 100 Ωomega połącz z anodą diody LED.
RGixQHL7gjlfL
Zdjęcie przedstawia moduł Arduino Uno z podpiętym kablem USB, diodę LED wpiętą w płytkę stykową oraz rezystor wpięty w płytkę stykową tak, że jest on połączony jedną nóżką z anodą diody.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Przewodem połączeniowym podłącz GND z Arduino do katody diody LED.
RGWejgC43s2DK
Zdjęcie przedstawia moduł Arduino Uno z podpiętym kablem USB, diodę LED wpiętą w płytkę stykową oraz rezystor wpięty w płytkę stykową tak, że jest on połączony jedną nóżką z anodą diody. Katoda diody połączona jest przewodem z masą GND na płytce Arduino Uno.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Za pomocą przewodu połączeniowego podłącz pin numer 8 z Arduino do rezystora.
Rsw1EGlUkcARZ
Zdjęcie przedstawia moduł Arduino Uno, podpięty do niego kabel USB oraz diodę LED wpiętą w płytkę stykową. Wolna nóżka rezystora jest podpięta przewodem do pinu D8.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Układ jest gotowy do pracy.
Pisanie programu
Otwieramy i zapisujemy nowy sketch w Arduino IDE.
Na początku przygotowujemy zmienne do przechowywania czasu aktualnego oraz czasu ostatniej zmiany.
Linia 1. unsigned long currentTime średnik prawy ukośnik prawy ukośnik czas aktualny.
Linia 2. unsigned long lastTime średnik prawy ukośnik prawy ukośnik czas ostatniej zmiany LED.
unsigned long currentTime; // czas aktualny
unsigned long lastTime; // czas ostatniej zmiany LED
W funkcji setup() określamy tryb pracy pinu numer 8 – pin sterujący LED jako wyjście.
Określamy początkowy czas, od którego rozpoczynamy działanie programu.
Linia 1. lastTime znak równości millis otwórz nawias okrągły zamknij nawias okrągły średnik.
lastTime = millis();
W pętli głównej rozpisujemy algorytm naszego programu:
– sprawdzamy aktualny czas, który minął od startu zasilania:
Linia 1. currentTime znak równości millis otwórz nawias okrągły zamknij nawias okrągły średnik.
currentTime = millis();
– wykorzystując instrukcję warunkową, sprawdzamy, czy różnica czasu ostatniego oraz aktualnego jest większa od zadanego przez nas czasu oczekiwania:
Linia 1. if otwórz nawias okrągły otwórz nawias okrągły currentTime minus lastTime zamknij nawias okrągły zamknij nawias ostrokątny znak równości 1000 zamknij nawias okrągły.
if((currentTime-lastTime)>=1000)
– jeśli czas, który minął, jest niewystarczający, wracamy do początku algorytmu; w przeciwnym wypadku ustawiamy stan diody LED na przeciwny względem stanu odczytanego z pinu wyjściowego:
– zapisujemy czas, w którym zmieniliśmy stan diody; ten czas będziemy teraz porównywać, sprawdzając, ile czasu minęło od ostatniej zmiany stanu:
Linia 1. lastTime znak równości currentTime średnik.
lastTime = currentTime;
Gotowy program wygląda następująco:
Linia 1. unsigned long currentTime średnik prawy ukośnik prawy ukośnik czas aktualny.
Linia 2. unsigned long lastTime średnik prawy ukośnik prawy ukośnik czas ostatniej zmiany LED.
Linia 3. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 4. pinMode otwórz nawias okrągły 8 przecinek OUTPUT zamknij nawias okrągły średnik.
Linia 5. lastTime znak równości millis otwórz nawias okrągły zamknij nawias okrągły średnik.
Linia 6. zamknij nawias klamrowy.
Linia 7. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 8. currentTime znak równości millis otwórz nawias okrągły zamknij nawias okrągły średnik.
Linia 9. if otwórz nawias okrągły otwórz nawias okrągły currentTime minus lastTime zamknij nawias okrągły zamknij nawias ostrokątny znak równości 1000 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 10. digitalWrite otwórz nawias okrągły 8 przecinek wykrzyknik digitalRead otwórz nawias okrągły 8 zamknij nawias okrągły zamknij nawias okrągły średnik.
Linia 11. lastTime znak równości currentTime średnik.
Linia 12. zamknij nawias klamrowy.
Linia 13. zamknij nawias klamrowy.
unsigned long currentTime; // czas aktualny
unsigned long lastTime; // czas ostatniej zmiany LED
void setup() {
pinMode (8, OUTPUT);
lastTime = millis();
}
void loop() {
currentTime = millis();
if((currentTime - lastTime) >= 1000){
digitalWrite(8, !digitalRead(8));
lastTime = currentTime;
}
}
Wgrywamy program i sprawdzamy jego działanie.
Uruchom poniższy film, by zobaczyć prezentację działania programu.
RC2kZUH2gSEJ5
Film z działania programu przedstawia moduł Arduino Uno, podpięty do niego kabel USB oraz diodę LED wpiętą w płytkę stykową. Wolna nóżka rezystora jest podpięta przewodem do pinu D8. Po uruchomieniu programu dioda świeci na czerwono przez jedną sekundę, po czym gaśnie na jedną sekundę. Cykl powtarza się kilkukrotnie.
Film z działania programu przedstawia moduł Arduino Uno, podpięty do niego kabel USB oraz diodę LED wpiętą w płytkę stykową. Wolna nóżka rezystora jest podpięta przewodem do pinu D8. Po uruchomieniu programu dioda świeci na czerwono przez jedną sekundę, po czym gaśnie na jedną sekundę. Cykl powtarza się kilkukrotnie.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Film z działania programu przedstawia moduł Arduino Uno, podpięty do niego kabel USB oraz diodę LED wpiętą w płytkę stykową. Wolna nóżka rezystora jest podpięta przewodem do pinu D8. Po uruchomieniu programu dioda świeci na czerwono przez jedną sekundę, po czym gaśnie na jedną sekundę. Cykl powtarza się kilkukrotnie.
Zróbmy symulację funkcji millis(), za pomocą środowiska
Nie musimy modyfikować naszego połączenia. Wystarczy przepisać kod dla funkcji millis().
RNyu3iWSF2FQi
Zrzut ekranu przedstawia okno przeglądarki z otwartą stroną tinkercad. Pod adresem strony znajduje się pasek tytułowy "0936 Arduino – odliczanie czasu". Poniżej znajduje się pasek narzędzi. Od lewej: Obrót w prawo, kosz, cofanie, do przodu, komentarz, po prawo na pasku znajdują się następujące przyciski: Zaznaczony na niebiesko (czyli wybrany) Kod, Uruchom symulację, Eksportuj, Udostępnij. Poniżej główną część okna zajmuje pole robocze, w którym umieszczono płytkę stykową oraz moduł Arduino Uno R3 z kablem USB. W płytkę stykową wpięto diodę LED oraz rezystor w taki sposób, że jedna nóżka rezystora jest połączona z anodą diody. Przewodem połączono katodę diody z masą GND. Wolną nóżkę rezystora połączono przewodem z pinem D8. Po prawo znajduje się pole z kodem. Nad polem z listy wybrano Tekst. Kod jest następujący: 1. unsigned long currentTimme; // czas aktualny 2. unsigned long lastTime; // czas ostatniej zmiany LED 3. 4. void setup() { 5. pinMode (8, OUTPUT); 6. lastTime = millis(); 7. } 8. 9. void loop() { 10. currentTime = millis(); 11. if ((currentTime – lastTime) >= 1000) { 12. digitalWrite (8, !digitalRead(8)); 13. lastTime = currentTime; 14. } 15. }
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Film z działania programu.
RFvChRf8Io15L
Film przedstawia działanie układu w programie Tinkercad.
Film przedstawia działanie układu w programie Tinkercad.
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.
Linia 1. unsigned long currentTime średnik prawy ukośnik prawy ukośnik czas aktualny.
Linia 2. unsigned long lastTime średnik prawy ukośnik prawy ukośnik czas ostatniej zmiany LED.
Linia 3. void setup otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 4. pinMode otwórz nawias okrągły 8 przecinek OUTPUT zamknij nawias okrągły średnik.
Linia 5. lastTime znak równości millis otwórz nawias okrągły zamknij nawias okrągły średnik.
Linia 6. zamknij nawias klamrowy.
Linia 7. void loop otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 8. currentTime znak równości millis otwórz nawias okrągły zamknij nawias okrągły średnik.
Linia 9. if otwórz nawias okrągły otwórz nawias okrągły currentTime minus lastTime zamknij nawias okrągły zamknij nawias ostrokątny znak równości 2000 zamknij nawias okrągły otwórz nawias klamrowy.
Linia 10. digitalWrite otwórz nawias okrągły 8 przecinek wykrzyknik digitalRead otwórz nawias okrągły 8 zamknij nawias okrągły zamknij nawias okrągły średnik.
Linia 11. lastTime znak równości currentTime średnik.
Linia 12. zamknij nawias klamrowy.
Linia 13. zamknij nawias klamrowy.
unsigned long currentTime; // czas aktualny
unsigned long lastTime; // czas ostatniej zmiany LED
void setup() {
pinMode (8, OUTPUT);
lastTime = millis();
}
void loop() {
currentTime = millis();
if((currentTime - lastTime) >= 2000){
digitalWrite(8, !digitalRead(8));
lastTime = currentTime;
}
}
Ciekawostka
Czy wiesz, że funkcja delay() do swojego działania wykorzystuje wewnątrz funkcję millis()?
Funkcja delay() sprawdza najpierw, ile czasu minęło od uruchomienia Arduino, a następnie tak długo sprawdza, ile minęło czasu, aż zadany przez nas czas opóźnienia zostanie osiągnięty.
Słownik
biblioteka
biblioteka
zbiór funkcji, zazwyczaj dostarczany do większości shieldów w celu ułatwienia pisania kodu; pozwala wykorzystać dany komponent bez potrzeby pisania poszczególnych funkcji
zmienna typu unsigned long
zmienna typu unsigned long
jeden z typów zmiennych występujących w Arduino; zmienna tego typu jest liczbą dodatnią o maksymalnej wartości 2Indeks górny 3232-1
instrukcja warunkowa
instrukcja warunkowa
instrukcja, która wykonuje swoją zawartość tylko wtedy, gdy warunek podany w argumencie instrukcji jest prawdziwy
przepełnienie zmiennej
przepełnienie zmiennej
gdy wartość zmiennej osiąga maksimum, zostaje zresetowana do wartości minimalnej