bonjour, je ne pensais pas avoir une réponse aussi rapide.
Ci-dessous mon code de débutant que j'essaie même pour moi de commenter un max.
merci pour votre temps.
=======================================================================================================================*/
#include <SoftwareSerial.h>
#include "TFMini.h"
TFMini tfmini;
//===================================================================
//=================SECTIONS DECLARATION DE VARIABLES=================
//ENTREES ARDUINO & AFFECTATION DES PINS
SoftwareSerial SerialTFMini(10, 11);
int I_BPStart = 2;
int I_PosPot_Detect = 23;
int I_PosPot_Expo = 22;
int I_PosPot_Ouie = 26;
int I_PosPot_Odorat = 28;
int I_PosPot_LL = 30;
int I_PosPot_Vue = 34;
int I_PosPot_Lorenz = 32;
int I_PosPot_Gout = 36;
//SORTIES ARDUINO & AFFECTATION DES PINS
int O_InitOK = 25; //Allumage LED confirmation bonne alimentation.
int O_Ready = 27; //Allumage LED confirmation reception BP Start.
int O_Ouie = 31;
int O_Odorat = 33;
int O_Vue = 35;
int O_Lorenzini = 37;
int O_Gout = 39;
int Verrou_74HC = 6; // (12) ST_CP [RCK] on 74HC595
int Horl_74HC = 5; // (11) SH_CP [SCK] on 74HC595
int Data_74HC = 4; // (14) DS [S1] on 74HC595
//DECLARATION VARIABLES INTERNES & AFFECTATION DE VALEURS
int Ouie = 500; //On indique la distance en dessous de laquelle nous souhaitons voir la led s'allumer
int Odorat = 300;
int LL = 100;
int Vue = 50;
int Lorenzini = 30;
int Gout = 10;
int Tare = 5;
int DelaiSens = 300;
int Delai_MExpo = 500;
int DelaiInit = 100;
byte leds_74HC = 0;
//========================================================
//=================SECTION INITIALISATION=================
void setup() // Initialisation des Variables & Fonctions du PROG.
{
Serial.begin(115200); //Initialisation du port serie avec Baud Rate de connexion
while (!Serial); // Attente de réponse du terminal série
Serial.println ("Initializing...");
SerialTFMini.begin(TFMINI_BAUDRATE); //Initialisation du baud rate software
tfmini.begin(&SerialTFMini); //Initialisation du Capteur TFMini-S
//réglages des types d'entrées.
pinMode(I_BPStart, INPUT_PULLUP);
pinMode(I_PosPot_Detect, INPUT_PULLUP);
pinMode(I_PosPot_Expo, INPUT_PULLUP);
pinMode(I_PosPot_Ouie, INPUT_PULLUP);
pinMode(I_PosPot_Odorat, INPUT_PULLUP);
pinMode(I_PosPot_LL, INPUT_PULLUP);
pinMode(I_PosPot_Vue, INPUT_PULLUP);
pinMode(I_PosPot_Lorenz, INPUT_PULLUP);
pinMode(I_PosPot_Gout, INPUT_PULLUP);
//réglages des types de sorties et mise à zéro.
digitalWrite(O_InitOK, LOW);
pinMode(O_InitOK, OUTPUT);
digitalWrite(O_Ready, LOW);
pinMode(O_Ready, OUTPUT);
digitalWrite(O_Gout, HIGH);
pinMode(O_Gout, OUTPUT);
digitalWrite(O_Lorenzini, HIGH);
pinMode(O_Lorenzini, OUTPUT);
digitalWrite(O_Vue, HIGH);
pinMode(O_Vue, OUTPUT);
digitalWrite(O_Odorat, HIGH);
pinMode(O_Odorat, OUTPUT);
digitalWrite(O_Ouie, HIGH);
pinMode(O_Ouie, OUTPUT);
pinMode(Verrou_74HC, OUTPUT);
pinMode(Horl_74HC, OUTPUT);
pinMode (Data_74HC, OUTPUT);
}
//=======================================================================================================
//=============== SECTIONS DES SOUS-FONCTIONS APPELEES DANS LA BOUCLE PRINCIPALE "LOOP"==================
//------Fonction de récupération des valeurs du capteur TFMini-S-------//
void getTFminiData(int* distance, int* strength)
{
static char i = 0;
char j = 0;
int checksum = 0;
static int rx[9];
if (SerialTFMini.available())
{
rx[i] = SerialTFMini.read();
if (rx[0] != 0x59)
{
i = 0;
}
else if (i == 1 && rx[1] != 0x59)
{
i = 0;
}
else if (i == 8)
{
for (j = 0; j < 8; j++)
{
checksum += rx[j];
}
if (rx[8] == (checksum % 256))
{
*distance = rx[2] + rx[3] * 256;
*strength = rx[4] + rx[5] * 256;
}
i = 0;
}
else
{
i++;
}
}
}
//------Fonction Mise à jour 74HC595-------//
void Maj_Registre_Decal()
{
digitalWrite(Verrou_74HC, LOW);
shiftOut(Data_74HC, Horl_74HC, LSBFIRST, leds_74HC);
digitalWrite(Verrou_74HC, HIGH);
}
//------Fonction d'activation Sens Ligne Latérale-------//
void Activation_LigneLat()
{
leds_74HC = 0;
Maj_Registre_Decal();
for (int i = 0; i < 8; i++)
{
bitSet(leds_74HC, i);
Maj_Registre_Decal();
delay(200);
}
leds_74HC = 0;
Maj_Registre_Decal();
for (int i = 7; i >= 0; i--)
{
bitSet(leds_74HC, i);
Maj_Registre_Decal();
delay(200);
}
leds_74HC = 0;
Maj_Registre_Decal();
delay(200);
}
//------Fonction d'activation du Mode de Pilotage via Detecteur de Distance (TFMini-S)-------//
void Mode_Auto()
{
delay(DelaiInit);
int distance = 0;
int strength = 0;
getTFminiData(&distance, &strength);
while (!distance)
{
getTFminiData(&distance, &strength);
if (distance)
{
Serial.print(distance);
Serial.print("cm\t");
Serial.print("strength: ");
Serial.println(strength);
if (distance < Gout)
{
LL_Activ = false;
digitalWrite(O_Ouie, HIGH);
digitalWrite(O_Odorat, HIGH);
digitalWrite(O_Vue, HIGH);
digitalWrite(O_Lorenzini, HIGH);
digitalWrite(O_Gout, LOW);
}
else if (distance > Gout & distance < Lorenzini)
{
LL_Activ = false;
digitalWrite(O_Ouie, HIGH);
digitalWrite(O_Odorat, HIGH);
digitalWrite(O_Vue, HIGH);
digitalWrite(O_Lorenzini, LOW);
digitalWrite(O_Gout, HIGH);
}
else if (distance > Lorenzini && distance < Vue)
{
LL_Activ = false;
digitalWrite(O_Ouie, HIGH);
digitalWrite(O_Odorat, HIGH);
digitalWrite(O_Vue, LOW);
digitalWrite(O_Lorenzini, HIGH);
digitalWrite(O_Gout, HIGH);
}
else if (distance > Vue && distance < LL) //<<<<<<<<<<< c'est ici que ça chi... que ça devient complexe.
{
digitalWrite(O_Ouie, HIGH);
digitalWrite(O_Odorat, HIGH);
digitalWrite(O_Vue, HIGH);
digitalWrite(O_Lorenzini, HIGH);
digitalWrite(O_Gout, HIGH);
Activation_LigneLat();
}
else if (distance > LL && distance < Odorat)
{
LL_Activ = false;
digitalWrite(O_Ouie, HIGH);
digitalWrite(O_Odorat, LOW);
digitalWrite(O_Vue, HIGH);
digitalWrite(O_Lorenzini, HIGH);
digitalWrite(O_Gout, HIGH);
}
else if (distance > Odorat )//&& distance < Ouie)
{
LL_Activ = false;
digitalWrite(O_Ouie, LOW);
digitalWrite(O_Odorat, HIGH);
digitalWrite(O_Vue, HIGH);
digitalWrite(O_Lorenzini, HIGH);
digitalWrite(O_Gout, HIGH);
}
//Pour le moniteur série
if ( distance <= 0) {
Serial.println("Hors de portee");
}
}
}
}
void Mode_Expo()
{
leds_74HC = 0;
Maj_Registre_Decal();
digitalWrite(O_Ouie, LOW);
delay(Delai_MExpo);
digitalWrite(O_Ouie, HIGH);
delay(Delai_MExpo);
digitalWrite(O_Ouie, LOW);
delay(Delai_MExpo);
digitalWrite(O_Ouie, HIGH);
delay(Delai_MExpo);
digitalWrite(O_Odorat, LOW);
delay(Delai_MExpo);
digitalWrite(O_Odorat, HIGH);
delay(Delai_MExpo);
digitalWrite(O_Odorat, LOW);
delay(Delai_MExpo);
digitalWrite(O_Odorat, HIGH);
delay(Delai_MExpo);
Activation_LigneLat();
Activation_LigneLat();
delay(Delai_MExpo);
digitalWrite(O_Vue, LOW);
delay(Delai_MExpo);
digitalWrite(O_Vue, HIGH);
delay(Delai_MExpo);
digitalWrite(O_Vue, LOW);
delay(Delai_MExpo);
digitalWrite(O_Vue, HIGH);
delay(Delai_MExpo);
digitalWrite(O_Lorenzini, LOW);
delay(Delai_MExpo);
digitalWrite(O_Lorenzini, HIGH);
delay(Delai_MExpo);
digitalWrite(O_Lorenzini, LOW);
delay(Delai_MExpo);
digitalWrite(O_Lorenzini, HIGH);
delay(Delai_MExpo);
digitalWrite(O_Gout, LOW);
delay(Delai_MExpo);
digitalWrite(O_Gout, HIGH);
delay(Delai_MExpo);
digitalWrite(O_Gout, LOW);
delay(Delai_MExpo);
digitalWrite(O_Gout, HIGH);
}
//===================================================================================
//=============== SECTION DE LA BOUCLE PRINCIPALE DE TRAVAIL "LOOP"==================
void loop()
{
delay(DelaiInit);
leds_74HC = 0;
Maj_Registre_Decal();
digitalWrite(O_InitOK, HIGH);
if (digitalRead(I_BPStart) == HIGH)
{
digitalWrite(O_Ready, HIGH);
if (digitalRead(I_PosPot_Expo) == LOW)
{
Mode_Expo();
}
else if (digitalRead(I_PosPot_Detect) == LOW)
{
Mode_Auto();
}
else if (digitalRead(I_PosPot_Ouie) == LOW)
{
Activation_Ouie();
}
else if (digitalRead(I_PosPot_Odorat) == LOW)
{
Activation_Odorat();
}
else if (digitalRead(I_PosPot_LL) == LOW)
{
Activation_LigneLat();
}
else if (digitalRead(I_PosPot_Vue) == LOW)
{
Activation_Vue();
}
else if (digitalRead(I_PosPot_Lorenz) == LOW)
{
Activation_Lorenzini();
}
else if (digitalRead(I_PosPot_Gout) == LOW)
{
Activation_Gout();
}
}
else
{
digitalWrite(O_Ready, LOW);
digitalWrite(O_Gout, HIGH);
digitalWrite(O_Lorenzini, HIGH);
digitalWrite(O_Vue, HIGH);
digitalWrite(O_Odorat, HIGH);
digitalWrite(O_Ouie, HIGH);
}
delay(300);
}