Bonjour,
Voici un projet que je reprends en main après l'avoir abandonné pendant presque un an. J'ai débuté l'arduino avec ce montage et je n'avais aucune connaissance en programmation et à peine en électronique. J'ai récupéré des informations à gauche et à droite pour obtenir le compte rour ci-dessous. Je n'avais à l'époque pas trouvé de solution à mon problème de Chronometrage. Les différents Chronomètres perdaient certainement la tête à cause de la fonction Millis.
Voici la présentation du montage:
ce montage est équipé d'un arduino Uno, d'un écran LCD 20x4, une photodiode pour detecter le passage de la voiture, d'un buzzer, 1 double afficheur 7 Digit pour le nombre de tour restant à effectué, d'un bouton pour incrémenter le nombre de tour à effectuer et de diode de couleurs pour le départ, meilleur tour...
L'écran LCD affiche plusieurs informations:
- Nombre de tour réalisé (ligne 1 à Droite - R/4 sur la photo) couplé à l'afficheur 7 digit
- Temps du tour précédent ( Ligne 1 à gauche - Go sur la photo car 1er tour)
- Temps du tour en cours (Ligne 2)
- Temps du meilleur tour (Ligne 3)
- Temps Total (Ligne 4)
Description du problème:
A l'origine, j'avais un écran LCD deux lignes et les différents temps s'affichaient alternativement sans aucun problème dans le chronométrage
Avec un écran 4 lignes, on dirait que le temps se mélange entre toute les lignes de Chronométrage.
Au bout de 30 secondes de tentmps total, le temps de la ligne 2 passe à 1 minute, bug sur le meilleur temps au tour... Voici le lien vers la video
Code Partie 1:
// include the library code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal_I2C lcd(0x27,20,4); //l adresse 0x27 est a changé en fonction de votre écrant
// Broches du CD4511 et du point décimal de l'afficheur
const byte PIN_CD4511_A1 = 2;
const byte PIN_CD4511_A2 = 3;
const byte PIN_CD4511_A3 = 4;
const byte PIN_CD4511_A4 = 5;
// 11 non branché
const byte PIN_SEGMENT_DP = 11;
// définitions des broches des transistors pour chaque afficheur
const int alim_dizaine = 7; // les dizaines
const int alim_unite = 6; // les unites
byte chiffre = 0;
static byte etat_dp = 0;
const int photoPin = 0; // analog input of the photoresistor
const int RED_PIN = 8; // red LED
const int YELLOW_PIN = 9; // yellow LED
const int GREEN_PIN = 10; // green LED
const int BUZZER_PIN = 12;
const int BUTTON_PIN = 13;
const int CONFIG = 0;
const int RACE = 1;
const int FINISH = 2;
int mode = CONFIG;
boolean buttonWasPressed = false;
const int TOTAL_LAP_INCREMENT = 1 ;
const int TOTAL_LAP_DECREMENT = 1;
const int MAX_TOTAL_LAPS = 99;
long raceStart;
long totalLaps = TOTAL_LAP_INCREMENT;
int lap;
long decrementation = TOTAL_LAP_DECREMENT;
int lapStart;
long lastLapTime;
long lastTotalTimeSeconds;
boolean newLapStarted = false;
long bestTime = 100000;
const int BARRIER_THRESHOLD_LOW = 900;
const int BARRIER_THRESHOLD_HIGH = 950;
const int BARRIER_OPENED = 0;
const int BARRIER_CLOSED = 1;
const int BARRIER_NOCHANGE = 2;
boolean barrierClosed = false;
const int MINIMUM_LAP_TIME_MILLIS = 300;
const int LAST_LAP_DISPLAY_MILLIS = 1500;
const int COL_TOTAL_LAPS = 2;
const int COL_LIGHT = 8;
const int COL_LAP_TOTAL = 1;
const int COL_LAP_TIME = 7;
const int PRECISION_SECONDS = 0;
const int PRECISION_TENS = 1;
const int PRECISION_MILLIS = 2;
const int SHOW_LAP = 0;
const int SHOW_TOTAL_TIME = 1;
int lapTimeMode;
const char TOTAL_LAPS_MARKER = 'R';
const char TOTAL_TIME_MARKER = 'G';
const char FASTEST_LAP_MARKER = 'B';
const char LAP_TIME_MARKER = 'Z';
const char LIGHT_MARKER = 'L';
boolean ledsOn;
// Fonction setup() afficheur 7 digit
void setup() {
lcd.init(); // initialize the lcd
/* Toutes les broches en sorties */
pinMode(PIN_CD4511_A1, OUTPUT);
digitalWrite(PIN_CD4511_A1, LOW);
pinMode(PIN_CD4511_A2, OUTPUT);
digitalWrite(PIN_CD4511_A2, LOW);
pinMode(PIN_CD4511_A3, OUTPUT);
digitalWrite(PIN_CD4511_A3, LOW);
pinMode(PIN_CD4511_A4, OUTPUT);
digitalWrite(PIN_CD4511_A4, LOW);
pinMode(PIN_SEGMENT_DP, OUTPUT);
digitalWrite(PIN_SEGMENT_DP, LOW);
pinMode(alim_dizaine, OUTPUT);
pinMode(alim_unite, OUTPUT);
digitalWrite(alim_dizaine, LOW);
digitalWrite(alim_unite, LOW);
pinMode(RED_PIN, OUTPUT);
pinMode(YELLOW_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BUZZER_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT);
lcd.begin(20, 4);
Serial.begin(57600);
readySetGo();
initConfig();
}

