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();
}