[PROJEKT] KA-NUCLEO-F411CE i Waveshare Accessory Shield – obsługa joysticka wraz z diodą RGB

Ekspander Waveshare Accessory Shield zawiera wiele komponentów, dzięki którym możemy zapoznać się z technikami programowania peryferiów mikrokontrolera. Na płytce ekspandera znajdziemy następujące elementy:

  • 5-pozycyjny joystick
  • potencjometr
  • głośnik
  • dioda RGB sterowana poprzez układ P9813
  • czujnik temperatury LM75BDP o rozdzielczości 0,125℃
  • 3-osiowy akcelerometr ADXL345
  • wyświetlacz OLED o przekątnej 0,96 cala, rozdzielczość 128×64
  • zegar RTC DS3231
waveshare-accessory-shield-dla-arduino
Rys. 1. Ekspander Waveshare Accessory Shield

W tym przykładzie zajmiemy się oprogramowaniem joysticka, którego działanie będzie prezentować dioda LED RGB.

Joystick

Joystick oznaczony jako S1 jest niczym innym jak zespołem przycisków monostabilnych ze wspólną masą (COM). W joysticku wyróżnionych jest 5 przycisków oznaczonych jako A, B, C, D i CTR (Control) lub szerzej znany i używany jako przycisk zatwierdzający “Enter”. Poszczególne przyciski joysticka są podłączone do złącz Arduino oznaczonych od A1 do A5. Jako że przyciski mają wspólną masę, sugeruje to, że reakcją na wciśnięcie przycisku będzie zbocze opadające sygnału mikrokontrolera. Aby takie wygenerować, należy uprzednio wymusić stan wysoki na wejściach mikrokontrolera i oczekiwać zmiany na stan niski, oznaczający wciśnięcie któregoś z przycisków.

Rys. 2. Schemat podłączenia wyprowadzeń joysticka na ekspanderze Waveshare Accessory Shield

Drgania styków i konieczność używania przerwań

W praktyce stosowania przełączników monostabilnych występuje problem drgania styków. Podczas użycia przycisku praktycznie zawsze występuje zjawisko krótkotrwałego przełączania się wejścia mikrokontrolera między stanem wysokim a niskim. Spowodowane jest to mechaniczną budową styku, zazwyczaj wykonanego z membrany zwierającej dwa elementy stałe styku. Zjawisko to występuje zarówno w przypadku mniej, jak i lepiej wykonanych styków. W efekcie działanie to może być zinterpretowane jako kilkukrotne wciśnięcie danego przycisku.

Rozwiązań tego problemu jest kilka. Dwa główne wykorzystywane to programowe wprowadzenie debouncera lub użycie przerwań. Debouncer jest to podprogram odpowiedzialny za wprowadzenie krótkiego opóźnienia po wystąpieniu zmiany stanu wyprowadzenia. Pozwala na “przeczekanie” drgań i spokojną reakcję na zaistniałe zdarzenie z zewnątrz (użycie przycisku). Rozwiązanie to wymaga użycia opóźnień, które są często niepożądane w projektach oprogramowania mikrokontrolerów.

Drugim rozwiązaniem jest użycie przerwań od wystąpienia zbocza. W naszym przypadku będzie to reakcja na zbocze opadające. Po wykryciu zbocza sygnału wejściowego, wykonywana jest funkcja obsługi przerwania (reakcja na wciśnięcie przycisku) już podczas trwania “drgań”.

Zestaw testowy

Zestaw, na którym przedstawię przykład użycia joysticka składa się wyłącznie z płytki KA-NUCLEO-F411CE i ekspandera Waveshare Accessory Shield. Dzięki konstrukcji obu płytek, a dokładniej zgodnego rozmieszczenia złącz ze standardem Arduino UNO, możliwe jest ich szybkie i proste połączenie.

Rys. 3. Zestaw testowy KA-NUCLEO i ekspander Waveshare

 

Połączenia sprzętowe joysticka z mikrokontrolerem

W prezentowanym ekspanderze sygnały joysticka zostały wyprowadzone tak, jak prezentuje to tabela. Dodatkowo zostały również zawarte połączenia między wyjściami złącz zgodnych z Arduino i GPIO mikrokontrolera STM32F411CEU6 zamontowanego na płytce KA-NUCLEO-F411CE.

Do pobrania

O autorze