#include <LiquidCrystal_I2C.h>
unsigned long previousMillis = 0; // Stocke le temps écoulé depuis la dernière mise à jour d'affichage
const long interval = 100; // Intervalle d'affichage en millisecondes
uint16_t Vout; // Valeur lue depuis l'AS5600
int16_t angle, previousAngle; // Angles actuels et précédents
int16_t tour = 0; // Compteur de tours
float distance; // Distance totale parcourue
float distanceTour = 8.00; // Distance parcourue par un tour complet de la roue
bool flag = false; // Drapeau pour la gestion des tours
int cpt;
LiquidCrystal_I2C lcd(0x27, 8, 2); // Initialisation de l'écran LCD avec adresse I2C
void setup() {//**************************************SETUP***************************************************************************
Serial.begin(115200); // Initialisation de la communication série
lcd.init(); // Initialisation de l'écran LCD
lcd.backlight(); // Activer le rétroéclairage de l'écran LCD
lcd.setCursor(0, 0); // Positionner le curseur à la position (0,0) sur l'écran LCD
lcd.print("59jag"); // Afficher un message de bienvenue
previousAngle = 0.0; // Initialiser l'angle précédent à zéro
}
void loop() {//**************************************LOOP******************************************************************************
Vout = analogRead(A0); // Lecture de la valeur analogique depuis le capteur AS5600
//angle = (Vout * (36000 / 1024); // Convertir la valeur lue en angle en degrés
angle =( map(Vout,1023,0,3596,0)/10);
int deltaAngle = angle - previousAngle; // Différence entre l'angle actuel et l'angle précédent
if (deltaAngle > 180) { // Passage de 360° à 0° (rotation dans le sens antihoraire)
tour--; // Décrémenter le compteur de tours
} else if (deltaAngle < -180) { // Passage de 0° à 360° (rotation dans le sens horaire)
tour++; // Incrémenter le compteur de tours
}
distance = (distanceTour * tour) + (angle / 360.0) * distanceTour; // Distance totale en cm
if (millis() - previousMillis >= interval && angle/2 != previousAngle/2) { // Vérifier si 100ms se sont écoulées et angele different
previousMillis = millis(); // Mettre à jour le moment de la dernière mise à jour
Serial.print(angle); // Afficher l'angle actuel
Serial.print(" degres \t"); // Afficher l'unité de l'angle
Serial.print(distance); // Afficher la distance totale parcourue
Serial.println(" cm"); // Afficher l'unité de la distance
lcd.setCursor(0, 0); // Positionner le curseur à la ligne 0 de l'écran LCD
lcd.print(angle); // Afficher le nombre de tours
lcd.print(" tours "); // Afficher le texte pour le nombre de tours
lcd.setCursor(0, 1); // Positionner le curseur à la ligne 1 de l'écran LCD
lcd.print(distance, 2); // Afficher la distance avec 2 décimales
lcd.print(" cm "); // Afficher l'unité de la distance
cpt++;
}
previousAngle = angle; // Mettre à jour l'angle précédent avec l'angle actuel
}