Sygnalizacja świetlna

Z support
Skocz do: nawigacja, szukaj

Wyzwanie: A INTELIGENTNE MIASTO

Projekt: A02 SYGNALIZACJA ŚWIETLNA

Przypomnij sobie[edytuj]

Przed rozpoczęciem tego projektu warto wrócić do lekcji:

  • funkcje,
  • pętle,
  • urządzenia wyjścia,
  • wyświetlacz,
  • zmienne.

Cel projektu[edytuj]

W projekcie uczeń zbuduje i zaprogramuje sygnalizację świetlną dla samochodów, którą mija każdego dnia idąc do szkoły. Sygnalizacja będzie składać się z 3 świateł drogowych, które należy zaprogramować w czterech różnych stanach. Dodatkowo uczeń nauczy się wykorzystywać funkcję aby napisany kod był bardziej czytelny przy rozwiązywaniu kolejnych zadań. Następnie będzie możliwość zmierzenia się z większym zadaniem, czy rozszerzenie sygnalizatora dla kierowców o sygnalizator dla pieszych. W tym celu wykorzystany zostanie wyświetlacz z możliwością rysownia różnych kształtów m. in. Okręgów i kół.

Zadanie 1[edytuj]

Podłączenie modułów[edytuj]

Diody to moduły cyfrowe i należy je podłączyć pod piny oznaczone literką D (Digital).

Opis[edytuj]

W pierwszym zadaniu należy zapalić każdą z diod w określonej kolejności. W tym celu należy wykorzystać bloczek <DIODA LED> z wybraną opcją „włącz”.

Zadanie 2[edytuj]

Opis[edytuj]

Płytka wykonuje bardzo dużo operacji na sekundę dlatego, jeśli połączymy bloczki <DIODA LED> z opcją włącz z bloczkiem <DIODA LED> z opcją wyłącz, to nasz program będzie poprawny. Jednakże nasze oko nie będzie w stanie zauważyć akcji wyłączenia diody i tym samym będziemy uważać, że dioda cały czas świeci. Aby zauważyć miganie diody musimy użyć bloczka <CZEKAJ> w celu wprowadzenia opóźnienia wykonania kolejnej operacji.

Należy pamiętać aby bloczek czekaj umieścić nie tylko pomiędzy instrukcjami włącz-wyłącz, ale także na końcu programu czyli po instrukcji włącz. W przeciwnym razie efekt będzie taki sam jakbyśmy w ogóle nie zastosowali bloczka <CZEKAJ>.

Pseudokod[edytuj]

Dioda-led włącz
czekaj 1s
dioda-led wyłącz
czekaj 1s

Program[edytuj]

A02z2.png

Zadanie 3[edytuj]

Opis[edytuj]

Przyszedł czas na zaprogramowania sygnalizatora świetlnego dla kierowców. Uczeń po przeczytaniu opisu wskazówki „dowiedz się więcej…” na pewno poradzi sobie z problemem. Aby program był bardziej czytelny warto wykorzystać tutaj wiedzę o kolejności wykonywania połączonych bloków instrukcji. Najpierw wykonują się te połączone instrukcje, które są najwyżej na scenie. Znając tą wiedzę uczeń może zbudować cztery połączone bloki instrukcji i każdy kolejny stan świateł umieścić trochę niżej na scenie. W tym przypadku najwyżej powinny być instrukcje skojarzone z zapaleniem światła czerwonego.

Pamiętaj aby w każdym połączonym bloku instrukcji włączyć potrzebne diody, ale wyłączyć także te które powinny być wyłączone.

Pseudokod[edytuj]

Dla połączonych instrukcji światła czerwonego:

włącz czerwona dioda-led
wyłącz żółta dioda-led
wyłącz zielona dioda-led
czekaj 1s

Program[edytuj]

A02z3.png

Zadanie 4[edytuj]

Opis[edytuj]

W kolejnym zadaniu zostaną wykorzystane funkcje aby program stał się bardziej czytelny. Funkcje to nic innego jak pogrupowanie kilku instrukcji razem i nadanie im nazwy oznaczającej co takiego robią. W przypadku aktualnego programu możemy stworzyć cztery funkcje, gdzie każda z nich będzie odpowiedzialna za konkretny stan świateł: czerwone, czerwono-żółte, żółte, zielone.

Pamiętaj, żeby wywołać stworzoną funkcję w odpowiednim miejscu w swoim programie.

Ważna sprawa: jeżeli chcemy używać wyświetlacza w funkcjach to bloczek „włącz wyświetlacz” musi zostać umieszczony na początku kodu programu, przed definicją funkcji. W przeciwnym razie wystąpi błąd. Program pomyśli, że chcesz korzystać z czegoś co nie zostało wcześniej zadeklarowane. Dobrą praktyką jest umieszczanie definicji funkcji na samym dole sceny, a ich wywołanie i cała reszta programu powinna być jak najwyżej.

Pseudokod[edytuj]

Funkcja wlacz-czerwone
   włącz czerwona dioda-led
   wyłącz żółta dioda-led
   wyłącz zielona dioda-led
   czekaj 1s

Program[edytuj]

A02z4.png

Zadanie 5[edytuj]

Opis[edytuj]

Przypomnij sobie jakie bloczki są potrzebne do prawidłowej pracy z wyświetlaczem:[edytuj]

  • włącz wyświetlacz (domyślnie wyświetlacz jest wyłączony, ta instrukcja powinna być użyta tylko raz),
  • wyczyść wyświetlacz (instrukcja wyczyści poprzednie zapiski na wyświetlaczu, np. logo producenta),
  • ustaw kursor (pozwala na wypisanie tekstu zawsze w tym samym miejscu),
  • wypisz na wyświetlaczu (wypisanie tekstu dołączonego z prawej strony bloczka),
  • wyświetl na wyświetlaczu (wyświetlenie powyżej zdefiniowanych tekstów i figur).

Liczniki określające ile będzie świecić się światło czerwone i zielone najlepiej przechowywać w zmiennych. Aby wypisać ich malejące wartości na wyświetlaczu uczeń powinien użyć pętli for lub dopóki. Wewnątrz każdej iteracji pętli powinna być także użyta instrukcja opóźnienia dalszego wykonywania programu czyli czekaj 1s. Pominięcie tej instrukcji spowoduje, że licznik będzie bezużyteczny ponieważ nie zauważymy malejących wartości licznika wypisanego na wyświetlaczu. W przypadku tego zadania deklarację liczników wraz z przypisanymi wartościami najlepiej umieścić w bloczku inicjuj w celu wykonania tej operacji tylko raz na początku programu.

Dodatkowo jeśli używamy pętle w kilku niezależnych od siebie funkcji to warto wykorzystać tą samą zmienną licznikową niż deklarować kolejną zmienną.

Optymalizacja:[edytuj]

W tym zadaniu dwa razy zostanie wykorzystana pętla, w której na wyświetlaczu zostanie wypisana wartość aktualnego licznika dla światła czerwonego lub zielonego. Można tutaj wprowadzić małą optymalizację i stworzyć zmienną aktualny-licznik i zapisać do niej wartość licznika w zależności czy aktualnie jest włączone czerwone czy zielone światło drogowe. Po ustawieniu tej zmiennej należy wywołać funkcję wypisz-wartosc-licznika, która wypisze malejące wartości licznika ustawionego w zmiennej aktualny-licznik. W ten sposób nie będzie potrzeby użycia dwukrotnego powtórzenia kilku instrukcji związanych z wyświetlaczem.

Pseudokod[edytuj]

Inicjuj
   licznik-czerwone = 5
Funkcja wlacz-czerwone
   włącz czerwona dioda-led
   wyłącz żółta dioda-led
   wyłącz zielona dioda-led
   licz w dół z  i od licznik-czerwone do i>=0 co  1
      wypisz na wyświetlaczu = i 	
      czekaj 1s

Program[edytuj]

A02z5.png

Zadanie 6[edytuj]

Opis[edytuj]

Sygnalizator dla pieszych narysowany na wyświetlaczu powinien składać się z obramowania czyli potrzebny jest bloczek rysuj-linie. Główna częścią sygnalizatora są światła. Należy rozróżnić dwa stany światła: zapalone – instrukcja rysuj-koło oraz zgaszone – instrukcja rysuj-okrąg. W każdej instrukcji należy dobrze ustawić parametry x1,y1,x2,y2,x,y,promień.

Podobnie jak z światłami drogowymi dla samochodów tutaj też trzeba pamiętać, żeby nie tylko włączyć zielone światło dla pieszych, ale także wyłączyć czerwone. Dodatkowo jeśli nie została zastosowana optymalizacja opisana w poprzednim zadaniu to po raz kolejny uczeń przekona się, że niektóre instrukcje kodu można byłoby zoptymalizować poprzez użycie funkcji.