#define BUTTON_LEFT_PIN 12
#define BUTTON_RIGHT_PIN 13
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
bool vehicleStarted=false;
bool scrolling=true;
bool firstCard=false;
int numberClicks=0;
int currentCard = 0;
int numCards = 6;
const int colorR = 200;
const int colorG = 200;
const int colorB = 200;
const char* longText = "Appuyez sur un bouton pour continuer";
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
pinMode(12, OUTPUT);
pinMode(9, OUTPUT);
pinMode(BUTTON_LEFT_PIN, INPUT);
pinMode(BUTTON_RIGHT_PIN, INPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
for (int i = 0; i < 16; i++) {
lcd.print("#");
delay(50);
}
lcd.setCursor(0, 1);
for (int i = 15; i >= 0; i--) {
lcd.setCursor(i, 1);
lcd.print("#");
delay(50);
}
lcd.clear();
String line1 = "tAudi aiReS7";
String line2 = "//tAudi (S)porc";
animateString(line1, 0, 0, 180);
animateString(line2, 0, 1, 180);
delay(3000);
lcd.clear();
lcd.setCursor(0,0);
animateString("Bienvenue", 0, 0, 100);
lcd.setCursor(0,1);
lcd.autoscroll();
lcd.print(longText);
pinMode(BUTTON_LEFT_PIN, INPUT_PULLUP);
pinMode(BUTTON_RIGHT_PIN, INPUT_PULLUP);
}
void animateFadeIn() {
for (int j = 0; j <= 255; j++) {
delay(200);
}
}
void animateString(String str, int x, int y, int speed) {
for (int i = 0; i < str.length(); i++) {
lcd.setCursor(x + i, y);
lcd.print(str.charAt(i));
delay(speed);
}
}
void loop() {
for (int i = 0; i < strlen(longText); i++) {
lcd.scrollDisplayLeft();
delay(150);
if(digitalRead(BUTTON_LEFT_PIN) == LOW && firstCard==true){
numberClicks+=1;
if (numberClicks%2!=0){
vehicleStarted=true;
lcd.setCursor(0,1);
lcd.clear();
currentCard=0;
lcd.print("1Appui double pr eteindre");
}
else{
vehicleStarted=false;
lcd.setCursor(0,1);
lcd.clear();
currentCard=0;
lcd.print("1Appui double pr demarrer");
}
delay(200);
}
if (digitalRead(BUTTON_RIGHT_PIN) == LOW) {
currentCard = (currentCard + 1) % numCards;
displayCurrentCard(currentCard);
delay(500);
}
}
}
void displayCurrentCard(int currentCard) {
lcd.clear();
switch (currentCard) {
case 0:
firstCard=true;
lcd.setCursor(0, 0);
lcd.print("Gestion vehicule");
lcd.setCursor(0, 1);
if (vehicleStarted=false){
lcd.print("Double appui pr demarrer");
}
else{
lcd.print("Double appui pr eteindre");
}
break;
case 1:
firstCard=false;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Raccourcis");
lcd.setCursor(0, 1);
lcd.print("Some testing here");
break;
case 2:
firstCard=false;
lcd.setCursor(0, 0);
lcd.print("Ultrason + Fourche");
lcd.setCursor(0, 1);
lcd.print("0cm ; 0p");
break;
case 3:
firstCard=false;
lcd.setCursor(0, 0);
lcd.print("Moteur");
lcd.setCursor(0, 1);
lcd.print("Pw : 0 ; V : 0");
break;
case 4:
firstCard=false;
lcd.setCursor(0, 0);
lcd.print("(fameux) Challenges");
lcd.setCursor(0, 1);
lcd.print("Double appui pr acceder app");
break;
case 5:
firstCard=false;
lcd.setCursor(0, 0);
lcd.print("Odometre");
lcd.setCursor(0, 1);
lcd.print("---m");
break;
case 6:
firstCard=false;
lcd.setCursor(0, 0);
lcd.print("Infos diverses");
lcd.setCursor(0, 1);
lcd.print("Double appui pr en savoir +");
break;
default:
break;
}
}