Minutnik

Z support
Skocz do: nawigacja, szukaj

Wyzwanie: F MIŁY PORANEK

Projekt: F03 MINUTNIK

Przypomnij sobie[edytuj]

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

  • funkcje,
  • generowanie dźwięków,
  • instrukcje warunkowe proste,
  • instrukcje warunkowe złożone,
  • operatory arytmetyczne,
  • operatory logiczne,
  • operatory porównania,
  • pętle,
  • serwomechanizmy,
  • tablice,
  • urządzenia wejścia,
  • urządzenia wyjścia,
  • wyświetlacz.

Cel projektu[edytuj]

Minutnik to niezastąpione urządzenie w każdej kuchni. Dzięki niemu nie musimy pamiętać czy ziemniaki włączyliśmy o 15:32 czy 15:27. Zaprojektuj i zbuduj własny minutnik.

Zadanie 1[edytuj]

Opis[edytuj]

W pierwszym kroku należy utworzyć zmienną w której będzie liczba minut jaką ma odliczać minutnik. Dla ułatwienia ustaw sekundy zamiast minut, aby na wynik czekać krócej. W kolejnym kroku napisz funkcję, która przy wykorzystaniu pętli odliczy i wypisze kolejne upływające sekundy na wyświetlaczu. Na końcu wypisz odpowiedni komunikat. Pamiętaj aby odliczane były prawdziwe sekundy. Zastosuj bloczek <CZEKAJ>.

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

Pseudokod[edytuj]

Licznik = 10
licz w dół z i od i=licznik do i>=0 co 1 
   włącz wyświetlacz
   wyczyść wyświetlacz
   ustaw kursor
   wypisz na wyświetlaczu(NL) = i
   wyświetl na wyświetlaczu
   czekaj 1s
włącz wyświetlacz
wyczyść wyświetlacz
ustaw kursor
wypisz na wyświetlaczu(NL)=”Gotowe”
wyświetl na wyświetlaczu
czekaj 10s

Zadanie 2[edytuj]

Podłączenie modułów[edytuj]

Głośniczek jest modułem cyfrowym. Podłącz go do pinu oznaczonego literką D (Digital) i znaczkiem ~. Znaczek ~ pozwala na większe możliwości sterowania np. częstotliwością lub wysokością dźwięku.

Opis[edytuj]

Zapoznaj się z działaniem głośniczka poprzez bloczek <GENERUJ DŹWIĘK>. Dodaj instrukcję po pętli z odliczaniem czasu.

Zadanie 3[edytuj]

Podłączenie modułów[edytuj]

Diody to moduły cyfrowe. Podłącz je pod piny oznaczone literką D (Digital).

Opis[edytuj]

W jaki sposób dioda mruga? Należy użyć instrukcji <DIODA LED> z parametrem włącz/wyłącz i rozdzielić je opóźnieniem za pomocą bloczka <CZEKAJ>.

W zadaniu wykorzystaj utworzoną wcześniej pętle i dodaj do niej mruganie czerwonej diody. Podziel ostatni czas 1s na 2, aby czas pomiędzy kolejna sekundą odliczania pozostał taki sam. Po zakończeniu odliczania wyłącz czerwoną diodę i włącz zieloną. Na końcu możemy wprowadzić opóźnienie przed kolejnym odliczaniem. Aby dioda zielona była choć na chwilę zaświecona.

Zadanie 4[edytuj]

Podłączenie modułów[edytuj]

Serwo jest modułem cyfrowym. Podłącz go pod specjalny pin, który znajduje się pod pinami oznaczonymi literką D (Digital).

Opis[edytuj]

Wykorzystaj serwo jako analogową wskazówkę do odmierzania czasu minutnika. Dodaj kolejną instrukcję do utworzonej wcześniej pętli. Po ustawieniu czasu jaki ma odliczać minutnik należy ustawić serwo w takiej pozycji aby wskazywał wartość licznika.

Napisz funkcję, która mapuje wartość licznika na wartość serwa i zwraca na jaką pozycję należy ustawić serwo i o ile przesuwać aby użytkownik miał wrażenie, że przesuwa się o sekundę. Pamiętaj, że serwo ma zakres 0-180. Z obliczeń matematycznych wynika, że skoro wartość licznika jest 20 i serwo będzie w pozycji 90 stopni, to musimy liczyć, że każda sekunda licznika to 4,5 stopnia, zaokrąglijmy to w dół, czyli każda wartość licznika niech będzie odpowiednikiem 4stopni w serwie.

Zadanie 5[edytuj]

Opis[edytuj]

Z każdym przesunięciem ramienia serwa odtwórz sygnał dźwiękowy. Wykorzystaj bloczek <GENERUJ DŹWIĘK>.

Zadanie 6[edytuj]

Podłączenie modułów[edytuj]

Czujnik obrotu jest modułem analogowym. Podłącz go pod pin oznaczony literką A (Analog). Natomiast przycisk to moduł cyfrowy. Podłącz go pod pin oznaczony literką D (Digital).

Opis[edytuj]

W pierwszej kolejności sprawdź jaki zakres wartości zwraca czujnik obrotu po wskazaniu na jedną z liczb na planszy. Wartości czujnika wypisz na monitorze portu szeregowego. Wybór liczby do odmierzania zatwierdź za pomocą przycisku. Następnie przypisz wskazaną liczbę do zmiennej licznik i uruchom swój napisany wcześniej program.

Zadanie 7[edytuj]

Opis[edytuj]

Sprawdź jaki zakres wskazany przez czujnik obrotu o to liczby ujemne. Napisz instrukcję warunkową wypisującą na wyświetlaczu komunikat, że obsługiwane są tylko liczby dodatnie.

Zadanie 8[edytuj]

Podłączenie modułów[edytuj]

Joystick jest modułem analogowym. Podłącz go pod pin oznaczony literką A (Analog).

Opis[edytuj]

Stwórz książkę kucharką. W pierwszym kroku utwórz tablicę, gdzie w każdym wierszu umieścisz nazwę potrawy i czas jej przygotowania. Informacje oddziel znakiem minus. Następnie sprawdź jakie wartości zwraca joystick w 3 różnych stanach – lewo, prawo, dół (naciśnięcie). Za pomocą joysticka (ruch lewo/prawo) wyświetl kolejne potrawy na wyświetlaczu. Dodatkowo aby wyświetlić kolejne elementy tablicy po kolei potrzebujemy utworzyć zmienną w której będzie przypisany indeks aktualnie wyświetlonego elementu np. „aktualny-indeks”. Przy wychyleniu joysticka w lewo należy zwiększyć zmienną „aktualny-indeks” a przy wychyleniu w prawo zmniejszyć.

Pamiętaj, aby zabezpieczyć program przed wypisaniem indeksu spoza tablicy. Wybierz jedną z potraw (element tablicy) i zatwierdź ją za pomocą naciśnięcia joysticka w dół. Następnie ustaw czas gotowania za pomocą czujnika obrotu i zatwierdź uruchomienie minutnika niebieskim przyciskiem.

Pseudokod[edytuj]

Tab-potraw = [jajka na twardo - 10 min, ziemniaki - 30 min, zapiekanka makaronowa - 20 min]
Jeśli joystick < 100 //lewo
   aktualny-indeks = aktualny-indeks + 1 
   jeśli aktualny-indeks == długość(tab-potraw)
      aktualny-indeks = 0
   wypisz-na-wyświetlaczu(NL) = tab-potraw[aktualny-indeks]
w przeciwnym razie jeśli joystick < 600 //prawo
   aktualny-indeks = aktualny-indeks - 1 
   jeśli aktualny-indeks < 0
      aktualny-indeks = długość(tab-potraw)-1
   wypisz-na-wyświetlaczu(NL) = tab-potraw[aktualny-indeks]
w przeciwnym razie jeśli joystick < 800 //w dół
   wypisz-na-wyświetlaczu = „wybrano: ” 
   wypisz-na-wyświetlaczu(NL) = tab-potraw[aktualny-indeks]
   jeśli przycisk
      //uruchom swój minutnik napisany wcześniej