10 септембар 2017

Arduino Joystick + OLED 128x64 LCD I2C Display

Ovim jednostavnim primerom prikazano je na koji način je moguće vizuelno prikazati vrednosti očitavanja na analognim ulazima Arduino mikrokontrolera.

Korišćen hardver: 

- Arduino Duemillanove
- Dual Axis Joystick Module
- 0.96" OLED LCD Display Module I2C

Očitavanje analognih vrednosti sa joystick-a je preko pinova A0 (x-osa) i A1 (y-osa). Princip je isti kao i kod običnog potenciometra - ovde ih praktično ima dva, po jedan za svaku osu.
Joystick ima i jedan taster koji je u primeru povezan kao digitalni ulaz 4 na Arduino mikrokontroleru.
0.96" OLED LCD Display Module je jedan od retkih I2C Display modula i povezuje se korišćenjem samo dve žice - SDA (A4) i SCK (A5). Naravno, neophodno je i napajanje, koje za ovaj model displeja iznosi 5V.

Šema povezivanja:





Neophodne biblioteke za OLED display mogu se preuzeti sa sledećih linkova:
SSD1306 library
GFX library

Izvorni kod:


#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
const int buttonPin = 4;
Adafruit_SSD1306 display(0);
void setup() {
  pinMode(buttonPin, INPUT_PULLUP); //joystick button
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);  // initialization
  display.clearDisplay();
}
void loop() {
  bool button = digitalRead(buttonPin);
  int x = analogRead(A0);
  int y = analogRead(A1);
  f_drawJoystickInfo(button, x, y);
}
void f_drawJoystickInfo(bool button, int x, int y) {
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println("Joystick");
  display.println("    test");
  display.println();
  display.print("X: ");
  display.println(x);
  display.print("Y: ");
  display.println(y);

  if(!button) {
    display.setCursor(0, 54);
    display.setTextColor(BLACK, WHITE);
    display.print("Button");
  }
  int x1 = map(x, 0, 1023, display.width() - 60 - 2, display.width() - 2);
  int y1 = map(y, 0, 1023, display.height() - 60 - 2, display.height() - 2);
  display.drawRect(display.width() - 60 - 2, display.height() - 60 - 2, 60, 60, WHITE);  //draw frame
  display.drawLine(x1, y1 - 2, x1, y1 + 2, WHITE);  //draw joystick position inside frame
  display.drawLine(x1 - 2, y1, x1 + 2, y1, WHITE);

  display.display();
}

Demo video: