Zajęcia stacjonarne:

 

Zadanie 1 – 3 – jeszcze raz GPIO

podłączyć do wyprowadzeń D9 i D10 dwa przewody. Z drugiej strony przewody należy podpinać do GND – symulacja naciśnięcia przycisku.

skonfigurować odpowiednie piny jako wejścia mikrokontrolera z ustawionym pull-up.

Wykorzystać funkcję do odczytu stanu pinów “HAL_GPIO_ReadPin()”, napisać program, który reaguje na odpowiednie zbocza:

  1. przycisk monostabilny, jedno wciśnięcie przycisku 1 – dioda LED świeci, drugie wciśnięcie dioda LED nie świeci. Dłuższe przytrzymanie przycisku nic nie zmienia, zapewnić odporność na drgania styków.
  2. przycisk bistabilny – zmiana stanu przycisku na wciśnięty powoduje wysłanie na terminal komunikatu “Przycisk włączony”, zmiana stanu na przycisk wyłączony powoduje wysłanie komunikatu “Przycisk wyłączony”.  Dłuższe przytrzymanie przycisku nic nie zmienia, zapewnić odporność na drgania styków.

Zadanie 2 – 4 – pierwsze kroki w I2C

Podłączyć moduł MPU6050 do płytki za pomocą interfejsu I2C:

  • VCC – > nucleo 5V
  • GND -> nucleo GND
  • SCL -> nucleo D5
  • SDA -> nucleo D4

Skonfigurować projekt STM32:

  • uruchomić układ komunikacji I2C1
  • upewnić się, że interfejs I2C jest skonfigurowany na wyprowadzeniach D4 i D5

Zapoznać się z instrukcją i mapą rejestrów do układu MPU6050. Zapoznać się z komunikacją po interfejsie I2C.

  1. do obsługi modułu podłączone po interfejsie I2C potrzebujemy znać jego adres (dokumentacja techniczna – 9.2). Moduł posiada AD0 podpięte do GND.
  2. uruchomić funkcję readAndShow() – co robi ta funkcja, jaka wartość powinna być w rejestrze “Who Am I” mapy rejestrów?
  3. “<<—-” – komentarze tak oznaczone należy uzupełnić odpowiednimi wartościami

 

Zadanie 3 – 4.5 – odczyt temperatury

Odczytać temperaturę z modułu  i przesłać ją na terminal w postaci stopni Celsjusza. Uzupełnić funkcję “readTemp()”.

Odczyt temperatury dokonujemy z rejestrów  “TEMP_OUT_H” i “TEMP_OUT_L” – dokładne informacje znajdują się w rozdziale 4.18 dokumentacja mapy rejestrów.

 

 

Zadanie 4 – 5 – poziomnica (link1, link2)

Utworzyć program, który będzie wyświetlał na terminalu położenie kątowe moduły w jednej osi.

  1. Dołączyć bibliotekę “math.h” (#include “math.h”)
  2. uzupełnić i uruchomić funkcję poziomnica() – co robi ta funkcja?
  3. jakie wady posiada tak wyznaczone położenie modułu?

 

 

Zajęcia zdalne:

Zakres laboratorium:
  • zapoznanie się z ekosystemem Arduino
  • obsługa przerwań zewnętrznych
  • poznanie interfejsu transmisji danych UART

 

Środowisko programistyczne: arduino

Jak wyciągnąć plik hex/elf z kompilacji Arduino IDE: link

Zapoznać się z zbiorem funkcji dostępnych w Arduino: link

 

W celu uruchomienia terminala należy kliknąć PPM Arduino i wybrać “Open serial Monitor.”

Zadanie 1 – ocena 3

Zapoznać się z obsługa przerwań w Arduino: link

  • stworzyć symulację z płytką Arduino Uno, dodać dwa przyciski dołączone do pinów 2 i 3, oddać 2 diody LED,
  • utworzyć program, który za pomocą przerwania z przycisku 1 będzie włączył/wyłączał diodę 1,
  • analogicznie do poprzedniego punktu, uruchomić przycisk 2 i diodę 2.

 

Zadanie 2 – ocena 3,5

Zapoznać się z możliwościami biblioteki do komunikacji Serial: link

  • na podstawie programu z zadania 1, należy uruchomić obsługę komunikacji UART,
  • ustawić prędkość komunikacji UART na 9600
  • na początku programu (tylko jeden raz), należy wysłać do terminala napis “Hello world – numer indeksu”, gdzie za napis numer indeksu podstawiamy swój numer,
  • w pętli głównej programu utworzyć licznik zliczający o 1, co 1 sekundę
  • na każdą zmianę licznika powinien zostać przesłany po interfejsie uart napis “dziala: n”, gdzie n to stan licznika,
  • każdy kolejny napis powinien być w nowej linijce,
  • dodać do obsługi przerwań przesyłanie komunikatu po UART o zmianie stanu diody LED.

 

Zadanie 3 – ocena 4

Zapoznać się z kodowaniem znaków ASCII: link

Utworzyć nowy program i skonfigurować komunikację UART jak w zadaniu 2.

  • na początku programu (tylko jeden raz), należy wysłać do terminala napis “Hello world – numer indeksu”, gdzie za napis numer indeksu podstawiamy swój numer,
  • program co 1 sekundę sprawdza czy został wysłane do mikrokontrolera jakiś znak po UART, jeśli tak to odbiera go i wyświetla na ekranie napis “Odebralem: x-nn”, gdzie x to przesłany znak w postaci znaku ASCII, a nn to jego kod liczbowy,czyli dla przesłanego znaku “a” ma zostać wyświetlony komunikat “Odebrałem: a-97”
  • co każde 10 sekund jeśli nie został przesłany jakiś znak, wyświetla na ekranie napis “Czekam na znak, pospiesz się…”
Zadanie 4 – ocena 4,5

Utworzyć program, który oblicza wiek osoby na podstawie wprowadzonego roku urodzenia.

  • Po uruchomieniu program przedstawia się, krótkim komunikatem z nazwą programu i opisem co robi,
  • następnie prosi o podanie roku urodzenia,
  • wczytane dane zamienia na liczbę i dokonuje obliczenia wieku osoby (dla uproszczenia proszę przyjąć rok obecny na 2020),
  • wyświetla na ekranie komunikat, gdzie x to obliczony wiek, a “…” to miejsce na wymyślony komentarz, logiczne dokończenie komunikatu:
    • jeśli wiek <18 – “Masz x lat, ale jesteś …”,
    • dla 18<=wieku < 25 – “Masz x lat, jesteś …”,
    • dla 25<=wieku < 65 – “Masz x lat, czy już …”,
    • dla 65<=wieku – “Masz x lat, czy to już …”,
  • następnie program ponownie rozpoczyna działanie od początku.
Zadanie 5 – ocena 5

Utworzyć program, który na podstawie wprowadzonej daty urodzenia określa czy osoba jest pełnoletnia.

  • program prosi o podanie daty urodzenia w formacie dd.mm.yyyy, czyli 01.05.2000,
  • oblicza czy osoba ma skończone 18 lat, dla uproszczenia proszę przyjąć dzisiejszą datę jako 08.02.2021,
  • wyświetla na ekranie komunikat “Jesteś już pełnoletni.” lub “Jeszcze nie masz 18 lat, musisz poczekać: xxx dni”, gdzie xxx to ilość dni jaka pozostała aby dana osoba osiągnęła pełnoletność.