#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
}
nano:12
nano:11
nano:10
nano:9
nano:8
nano:7
nano:6
nano:5
nano:4
nano:3
nano:2
nano:GND.2
nano:RESET.2
nano:0
nano:1
nano:13
nano:3.3V
nano:AREF
nano:A0
nano:A1
nano:A2
nano:A3
nano:A4
nano:A5
nano:A6
nano:A7
nano:5V
nano:RESET
nano:GND.1
nano:VIN
nano:12.2
nano:5V.2
nano:13.2
nano:11.2
nano:RESET.3
nano:GND.3
lcd1:GND
lcd1:VCC
lcd1:SDA
lcd1:SCL
pot1:GND
pot1:SIG
pot1:VCC