//Created by Barbu Vulc!
/*
* In this sketch we will simulate a automatic gearbox & orientation of a car...
* ...with a joystick and 16x2 LCD! We have: drive (D), neutral (N) & reverse (R)!
* The LCD is used as an on-board car screen!
*/
//LCD (library & object):
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
//Define Joystick variables:
#define joyX A0 // X axis
#define joyY A1 // Y axis
#define button 2 // Joystick's pushbutton
void setup() {
//Joystick Initialization:
//pinMode(joyX, INPUT); pinMode(joyY, INPUT); pinMode(button, INPUT_PULLUP);
//LCD Initialization:
lcd.init(); lcd.backlight(); lcd.setCursor(0, 0); lcd.print("Engine started!");
delay(3000); lcd.clear();
}
void loop() {
//Read joystick values (gear - pin A0 & direction - pin A1):
int gear = analogRead(joyX), direction = analogRead(joyY);
//Print gear & orientation depending on joystick values:
if(gear == 1023 && direction == 511) {
lcd.clear();
lcd.setCursor(0, 0); lcd.print("Gear: Drive ");
lcd.setCursor(0, 1); lcd.print(" ");
} if(gear == 1023 && direction == 0) {
lcd.setCursor(0, 0); lcd.print("Gear: Drive ");
lcd.setCursor(0, 1); lcd.print("Direction: Left ");
} if(gear == 1023 && direction == 1023) {
lcd.setCursor(0, 0); lcd.print("Gear: Drive ");
lcd.setCursor(0, 1); lcd.print("Direction: Right");
}
if(gear == 511 && direction == 511) {
lcd.setCursor(0, 0); lcd.print("Gear: Neutral ");
lcd.setCursor(0, 1); lcd.print("No direction! ");
}
if(gear == 0 && direction == 511) {
lcd.setCursor(0, 0); lcd.print("Gear: Reverse");
lcd.setCursor(0, 1); lcd.print(" ");
} if(gear == 0 && direction == 0) {
lcd.setCursor(0, 0); lcd.print("Gear: Reverse");
lcd.setCursor(0, 1); lcd.print("Direction: Left ");
} if(gear == 0 && direction == 1023) {
lcd.setCursor(0, 0); lcd.print("Gear: Reverse");
lcd.setCursor(0, 1); lcd.print("Direction: Right");
}
}