W ramach podsumowania dotychczas zdobytej wiedzy tym razem stworzymy układ, który oprócz praktycznego wykorzystania wielu elementów zapewni nam sporo frajdy będąc równocześnie wciągającą grą zręcznościową. To najwyższy czas, aby pobawić się elektroniką, którą poznajemy.

Na początek skupmy się na cyfrowym pierwowzorze, który będziemy chcieli odtworzyć w naszym układzie. Mowa o grze Ready Steady Bang, która polega na pojedynku na czas reakcji pomiędzy dwójką graczy. Kto pierwszy wystrzeli z wirtualnego rewolweru po usłyszeniu sygnału zdobywa punkt.

Pojedyncza runda rozgrywa się w mgnieniu oka, ale potrafi wciągnąć ze względu na chęć doskonalenia techniki. W końcu chyba każdy chciałby wykazać się refleksem niczym kowboje na dzikim zachodzie.

Mając założenia dla naszej gry spróbujmy przełożyć je na świat elektroniki. Z całą pewnością będziemy potrzebować dwóch przycisków stykowych (po jednym dla każdego gracza), głośnika wydającego dźwięk startu rundy, wyświetlacza do prezentacji wyników oraz oczywiście mikrokontrolera, który zajmie się stosownymi obliczeniami czasu. Warto dodać również przyciski odpowiadające za przejście do kolejnej rundy i resetu do stanu pierwotnego.

Potrzebne materiały

  • płytka Arduino (w przykładzie wykorzystam UNO)
  • kabel USB do połączenia Arduino z Makiem
  • wyświetlacz LCD (zgodny z HD44780)
  • rezystor 220Ω
  • rezystor 10kΩ
  • 4x potencjometr 10kΩ
  • 4x przełącznik stykowy
  • głośnik piezoelektryczny (tzw. piezo)
  • 2x płytka stykowa (opcjonalnie można zmieścić się też na jednej, ale kosztem komfortu grania)
  • kabelki połączeniowe

Połączenie

Wyświetlacz

  • pin 1 (VSS) wyświetlacza LCD do GND Arduino
  • pin 2 (VDD) wyświetlacza LCD do 5V Arduino
  • pin 3 (V0) wyświetlacza LCD do wyjścia (środkowego pinu) potencjometru 10kΩ
  • pin 4 (RS) wyświetlacza LCD do D12 Arduino
  • pin 5 (RW) wyświetlacza LCD do GND Arduino
  • pin 6 (E) wyświetlacza LCD do D11 Arduino
  • pin 7 (D0) wyświetlacza LCD bez połączenia
  • pin 8 (D1) wyświetlacza LCD bez połączenia
  • pin 9 (D2) wyświetlacza LCD bez połączenia
  • pin 10 (D3) wyświetlacza LCD bez połączenia
  • pin 11 (D4) wyświetlacza LCD do D5 Arduino
  • pin 12 (D5) wyświetlacza LCD do D4 Arduino
  • pin 13 (D6) wyświetlacza LCD do D3 Arduino
  • pin 14 (D7) wyświetlacza LCD do D2 Arduino
  • pin 15 (A) wyświetlacza LCD poprzez rezystor 220Ω do 5V Arduino
  • pin 16 (K) wyświetlacza LCD do GND Arduino

Plansza do gry

  • Gracz A: jedną stronę przełącznika stykowego podłączamy do 5V Arduino, a drugą poprzez rezystor 10kΩ do GND Arduino (masy) oraz bezpośrednio do do D6 Arduino
  • Gracz B: jedną stronę przełącznika stykowego podłączamy do 5V Arduino, a drugą poprzez rezystor 10kΩ do GND Arduino (masy) oraz bezpośrednio do do D7 Arduino
  • Przycisk DALEJ: jedną stronę przełącznika stykowego podłączamy do 5V Arduino, a drugą poprzez rezystor 10kΩ do GND Arduino (masy) oraz bezpośrednio do do D8 Arduino
  • Przycisk RESET: jedną stronę przełącznika stykowego podłączamy do 5V Arduino, a drugą poprzez rezystor 10kΩ do GND Arduino (masy) oraz bezpośrednio do do D9 Arduino

Głośnik piezo

  • nóżkę „+” do D10 Arduino
  • nóżkę „-” do GND Arduino

Kod źródłowy

Starałem się możliwie szczegółowo komentować poszczególne linie kodu tak, aby całość była zrozumiała:

Bardziej zaawansowani elektronicy oraz programiści z pewnością będą w stanie zoptymalizować powyższy kod dodając obsługę przerwań lub zabezpieczając poszczególne etapy przed niespodziewanym naciśnięciem przycisku. Ja starałem się napisać go możliwie prostym językiem tak, aby jego poziom był adekwatny do aktualnie poznanej wiedzy w ramach cyklu „Makowe przygody z elektroniką”.

Bibliografia:

Strona biblioteki LiquidCrystal

Strona biblioteki Chrono

Gra Ready Steady Bang w AppStore