Voici le programme, il est présent sur plusieurs sujets donc ça va vous dire quelque chose. Je continue de tenter de l'améliorer.
/* -------------- Déclaration du bandeau Leds ------------------------ */
#include <Adafruit_NeoPixel.h>
#define LED_PIN 6
#define LED_COUNT 17
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);
unsigned long tempsDeClignotement = 0;
/* -------------- Déclaration des boutons --------------------------- */
#include "OneButton.h"
OneButton boutonAppuiPedale;
OneButton boutonRelanchementPedale;
OneButton boutonArretVehicule;
OneButton boutonRelanceVehicule;
int stateBoutonAppuiPedale = 0;
int stateBoutonRelanchementPedale = 0;
int stateBoutonArretVehicule = 0;
int stateBoutonRelanceVehicule = 0;
/* -------------- Déclaration des relais + valeurs pédale d'accélérateur */
const int relaisInverseur = 2;
const int relaisCanal_A_B_PedaleAccelerateur = 12;
const int relaisParking = 13;
const int valeurFilVertInverseur = 8;
const int valeurFilBlancInverseur = 3;
const int valeurFilBleuInverseur = 4;
const int Canal_A = 6; // possibilité d'inversement avec le Canal_B ( inverseur les Pins 6 et 5 )
int pwmValue_A;
const int Canal_B = 5;
int pwmValue_B;
const int pwmValMin = 95; // Valeurs qui doivent correspondre à la vitesse en mise en marche avant )
const int pwmValMax = 160; // Valeurs qui doivent correspondre à la vitesse en mise en marche avant )
// ____________________________________________________________________________ SETUP ______________________________________________________________________________________
void setup() {
Serial.begin(115200);
// __________________ Initialisation SETUP des boutons _____________________ //
boutonAppuiPedale.setup(9, INPUT);
boutonRelanchementPedale.setup(10, INPUT);
boutonArretVehicule.setup(11, INPUT);
boutonRelanceVehicule.setup(A0, INPUT);
boutonAppuiPedale.attachClick(simpleClickAppuiPedale);
boutonRelanchementPedale.attachClick(simpleClickRelachementPedale);
boutonArretVehicule.attachClick(simpleClickArretVehicule);
boutonRelanceVehicule.attachClick(simpleClickRelanceVehicule);
// ___________________ Initialisation SETUP des relais + valeurs pédale d'accélérateur __________________ //
pinMode(relaisInverseur, OUTPUT);
pinMode(valeurFilVertInverseur, OUTPUT);
pinMode(valeurFilBlancInverseur, OUTPUT);
pinMode(valeurFilBleuInverseur, OUTPUT);
pinMode(relaisCanal_A_B_PedaleAccelerateur, OUTPUT);
pinMode(relaisParking, OUTPUT);
pinMode(Canal_A, OUTPUT);
pinMode(Canal_B, OUTPUT);
pwmValue_A = pwmValMax;
pwmValue_B = pwmValMin;
// ____________________ Initialisation SETUP des Leds _____________________________ //
strip.begin();
strip.show();
strip.setBrightness(50);
arretDuVehiculeAuDemarrageDuProgramme();
}
// __________________________________________________________________________________ LOOP __________________________________________________________________________________
void loop() {
unsigned long tempsActuel = millis();
boutonAppuiPedale.tick();
boutonRelanchementPedale.tick();
boutonArretVehicule.tick();
boutonRelanceVehicule.tick();
if(tempsActuel - dernierTemps >= 1000 ) {
Serial.println(compteurImpulsion);
compteurImpulsion = 0;
dernierTemps = tempsActuel;
}
if (compteurImpulsion >= 100) {
arretDuVehiculeAuDemarrageDuProgramme();
}
}
// _________________________________________________________________ FONCTION(S) _____________________________________________________________
// _____________________________ Fonction de d'accélération de la pédale ________________________________ //
void simpleClickAppuiPedale() {
stateBoutonRelanceVehicule = 0;
stateBoutonArretVehicule = 0;
stateBoutonAppuiPedale = 1;
stateBoutonRelanchementPedale = 0;
extinctionLeds();
int pwmValue_Aold = pwmValue_A;
pwmValue_A -=8; // Diminuer A
pwmValue_A = constrain(pwmValue_A, pwmValMin, pwmValMax); // Pour limiter les valeurs https://docs.arduino.cc/language-reference/en/functions/math/constrain/
pwmValue_B = 255 - pwmValue_A; //
for ( int a = pwmValue_Aold; a >= pwmValue_A; a-- ) {
analogWrite(Canal_A, a);
analogWrite(Canal_B, 255 -a);
delay(50);
Serial.println("A " + String(a) + "\t" + "B " + String(255 - a));
}
Serial.println("");
while (stateBoutonAppuiPedale == 1){
if(Canal_A >= 144){
strip.setPixelColor(3, 62, 214, 17);
strip.show();
}
if(Canal_A >= 120){
strip.setPixelColor(7, 62, 214, 17);
strip.show();
}
if(Canal_A >= 96){
strip.setPixelColor(11, 62, 214, 17);
strip.show();
}
if(Canal_A >= 56){
strip.setPixelColor(16, 62, 214, 17);
strip.show();
}
}
}
// _____________________________ Fonction de décélération de la pédale ________________________________ //
void simpleClickRelachementPedale() {
stateBoutonRelanceVehicule = 0;
stateBoutonArretVehicule = 0;
stateBoutonAppuiPedale = 0;
stateBoutonRelanchementPedale = 1;
extinctionLeds();
int pwmValue_Bold = pwmValue_B;
pwmValue_B -=10; // Diminuer B
pwmValue_B = constrain(pwmValue_B, pwmValMin, pwmValMax); // Pour limiter les valeurs https://docs.arduino.cc/language-reference/en/functions/math/constrain/
pwmValue_A = 255 - pwmValue_B; //
for ( int b = pwmValue_Bold; b >= pwmValue_B; b-- ) {
analogWrite(Canal_B, b);
analogWrite(Canal_A, 255 -b);
delay(50);
Serial.println("A " + String(255 - b) + "\t" + "B " + String(b));
}
Serial.println("");
while (stateBoutonRelanchementPedale == 1) {
if(Canal_A <= 80){
strip.setPixelColor(16, 62, 214, 17);
strip.show();
}
if(Canal_A <= 112){
strip.setPixelColor(11, 62, 214, 17);
strip.show();
}
if(Canal_A <= 136){
strip.setPixelColor(7, 62, 214, 17);
strip.show();
}
if(Canal_A <= 160){
strip.setPixelColor(3, 62, 214, 17);
strip.show();
}
}
}
// _____________________________ Fonction d'arrêt du véhicule en cours de programme ________________________________ //
void simpleClickArretVehicule() {
stateBoutonRelanceVehicule = 0;
stateBoutonArretVehicule = 1;
stateBoutonAppuiPedale = 0;
stateBoutonRelanchementPedale = 0;
extinctionLeds();
digitalWrite(relaisCanal_A_B_PedaleAccelerateur, LOW);
delay(2000);
digitalWrite(relaisParking, HIGH);
delay(500);
digitalWrite(relaisParking, LOW);
while (stateBoutonArretVehicule == 1) {
ledsArretDuVehicule();
}
}
// _____________________________ Fonction de relance du véhicule en marche avant ________________________________ //
void simpleClickRelanceVehicule() {
stateBoutonRelanceVehicule = 1;
stateBoutonArretVehicule = 0;
stateBoutonAppuiPedale = 0;
stateBoutonRelanchementPedale = 0;
extinctionLeds();
digitalWrite(relaisInverseur, HIGH);
digitalWrite(valeurFilVertInverseur, LOW);
digitalWrite(valeurFilBlancInverseur, LOW);
digitalWrite(valeurFilBleuInverseur, HIGH);
delay(1000);
digitalWrite(relaisInverseur, LOW);
digitalWrite(relaisCanal_A_B_PedaleAccelerateur, HIGH);
delay(1000);
analogWrite(Canal_A, 160); // Valeur qui peut être réglé pour affiner le lancement en marche avant du tracteur
analogWrite(Canal_B, 95); // Valeur qui peut être réglé pour affiner le lancement en marche avant du tracteur ( penser à modifier les valeurs de butée plus haut )
while (stateBoutonRelanceVehicule == 1){
if(Canal_A >= 160){
strip.setPixelColor(3, 62, 214, 17);
strip.show();
}
}
}
// _____________________________ Fonction Arrêt du véhicule au démarrage du programme ________________________________ //
void arretDuVehiculeAuDemarrageDuProgramme() {
stateBoutonRelanceVehicule = 0;
stateBoutonArretVehicule = 0;
stateBoutonAppuiPedale = 0;
stateBoutonRelanchementPedale = 0;
digitalWrite(relaisInverseur, LOW);
analogWrite(Canal_A, 205);
analogWrite(Canal_B, 50);
delay(1000);
digitalWrite(relaisCanal_A_B_PedaleAccelerateur, HIGH);
delay(1000);
digitalWrite(relaisParking, HIGH);
delay(2000);
digitalWrite(relaisParking, LOW);
ledsArretDuVehicule();
}
// _____________________________ Fonction clignotant rouge d'un problème de réglage vitesse trop rapide ________________________________ //
void ledsProblemeVitesse() {
if(tempsActuel - tempsDeClignotement >= 750 ) { // clignotement rouge pour problème de vitesse trop importante
strip.setBrightness(175);
strip.setPixelColor(16, 242, 23, 20);
strip.show();
tempsDeClignotement = tempsActuel;
}
}
// ____________________________ Fonction Leds fixe rouge d'arrêt du véhicule ______________________________________ //
void ledsArretDuVehicule() {
strip.setBrightness(175);
strip.setPixelColor(16, 242, 23, 20);
strip.show();
}
// _____________________________ Fonction d'extinction des leds __________________________ //
void extinctionLeds() {
strip.setPixelColor(16, 0, 0, 0);
strip.show();
}
// ____________________________ Fonction Leds verte progressive selon la position de la pédale d'accélérateur _________________________ //
/* OIC canal un de la pédale : 53 ==> pédale relevée : 17.8 -- 1,79V / pédale enfoncée : 81.4 -- 8V
OIC canal deux de la pédale : 54 ==> pédale relevée : 81.8 -- 8,18V / pédale enfoncée : 18.7 -- 2V
*/