Salut les amis

J'ai besoin d'un coup de main pour mon premier projet (eh oui, je suis débutant)

je présente le projet :
Un radar de recul pour mon garage
J'en ai assez de ne jamais être sûr de ne pas toucher le mur du fonds de mon garage (ma voiture n'a pas de radar de recul) alors j'ai décidé de faire un appareil a fixer au mur qui m'indiquerait la distance de ma voiture avec un code couleur par LEDS (vert/orange/rouge)
Côté matériel, voici ce que j'ai choisi :
Arduino nano
HC-SR04 (radar)
une barre de 8 leds WS2812
1 bouton (pour le réglage)

une photo du montage :

Nom : radar garage - prototype.jpg
Affichages : 1796
Taille : 399,2 Ko

j'ai avancé pas à pas sans trop de difficulté jusqu'à ce que j'essaye de coder une fonction pour que les leds s'éteignent après 10 secondes d'immobilité.

C'est là que j'ai besoin de votre aide.

Voici donc le code en question :

Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
 
/* Télémètre ultrason HC-SR04 
 * Essais World of GZ - www.worldofgz.com
 */
#include <EEPROM.h>
#include <Adafruit_NeoPixel.h>
 
#define TRIG 11
#define ECHO 12
#define buttonPin 2
#define PIN 6// On définit le pin où est connecté la patte DATA du bandeau
 
//fonctions utilisées
void clignote(int red, int green, int blue, int delai);
void fled(int red, int green, int blue,int bright);
 
//Variables utilisées
long retourEcho;              // variable pour calcul de la distance mesurée
long distance;                // variable de mesure de la distance mesurée
long distanceold;             // variable de comparaison avec distance mesurée précédente
long distancevar;             // variable de comparaison avec distance mesurée précédente
long cible=0 ;                // variable de réglage de la distance cible mesurée
long relatif ;                // variable de l'écart entre distance mesurée et distance cible
int buttonState=0;            // variable de lecture de l'état du bouton
int checkdelay=100;           // variable de l'intervale de mesure de la distance en millisecondes
bool etatstable=false;        // variable de déclaration d'immobilité
long debutstable=0;           // variable de calcul de calcul de la durée d'immobilité
bool distchange=false;        // variable de détection de changement de distance mesurée
 
// Parameter 1 = number of pixels in strip
// Parameter 2 = pin number (most are valid)
// Parameter 3 = pixel type flags, add together as needed:
//   NEO_KHZ800  800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
//   NEO_KHZ400  400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
//   NEO_GRB     Pixels are wired for GRB bitstream (most NeoPixel products)
//   NEO_RGB     Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
 
//Ici, le 8 correspond au nombre de led
Adafruit_NeoPixel strip = Adafruit_NeoPixel(8, PIN, NEO_GRB + NEO_KHZ800);
 
void setup () {
  //On définie les entrées/Sorties
  pinMode(buttonPin, INPUT);
  pinMode(TRIG, OUTPUT);
  digitalWrite(TRIG, LOW); 
  pinMode(ECHO, INPUT);  
  //Lancement de la liaison série
  Serial.begin(57600); 
  Serial.println("Liaison série en ligne");
  strip.begin();
  strip.show(); // Initialise toute les led à 'off'
}
 
void loop() {
  relatif=distance-cible ;
 
  // read the state of the pushbutton value:
  buttonState = digitalRead(buttonPin);
 
 
  //On lance notre impulsion de 10µs
  digitalWrite(TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIG, LOW);
 
  //Mesure de la longueur de la pulse
  retourEcho=pulseIn(ECHO, HIGH);
 
  //Calcul de la distance
  distanceold=distance;
  distance=retourEcho / 58;
  distancevar=distance-distanceold;
  if((distancevar>=distance*1,01) ||
    (distancevar<=distance*0,99))  
    {
      distchange=true;
      etatstable=false; 
      Serial.println("etatstable");
    }
    else 
    {
      distchange=false;
    }
 
  if(distchange==false && etatstable==false) {
    etatstable=true;
    debutstable=millis();
  }
 
  //Réglage de la valeur cible
  if (buttonState==HIGH) {
    // enregistre la valeur distance comme cible et stocke la valeur
    cible = distance;
    clignote(0,0,233,100);
 
  //Ecriture de la variable valeur à l'adresse 0
  EEPROM.put(0, cible);
  } 
  //Lecture de la valeur à l'adresse 0
  EEPROM.get(0, cible);
 
  //Affichage de la distance dans le moniteur série
  Serial.print("Distance cm : ");
  Serial.println(distance);
  Serial.print("cible cm : ");
  Serial.println(cible);
  Serial.print("relatif cm : ");
  Serial.println(relatif);
  // Signaletique visuelle
 
  if ((etatstable=true)&&((millis()-debutstable)>=10000)) {
    fled(0,0,0,0);
  }
  else  if (relatif<=10){
     Serial.println("rouge ");
        fled (233,0,0,100);
      }
   else if (relatif<=55){
      Serial.println("orange");
      fled (233,127,16,100);
  }
  else if (relatif<=100){
       Serial.println("vert");
            for(int i = 0; i < 8; i++ ) { // On fait une boucle pour définir la couleur de chaque led
        // setPixelColor(n° de led, Rouge, Vert, Bleu)
        strip.setPixelColor(i, 0, 223, 0);
        }
 
      strip.show(); // on affiche
      strip.setBrightness(40);  
  }
  else {
       Serial.println("rien");
             for(int i = 0; i < 8; i++ ) { // On fait une boucle pour définir la couleur de chaque led
        // setPixelColor(n° de led, Rouge, Vert, Bleu)
        strip.setPixelColor(i, 0, 0, 0);
        }
 
      strip.show(); // on affiche
      strip.setBrightness(40); 
  }
 
 
  delay(checkdelay); 
}
 
void fled(int red, int green, int blue,int bright) 
 
   {     
         for(int i = 0; i < 8; i++ ) 
          { // On fait une boucle pour définir la couleur de chaque led
        // setPixelColor(n° de led, Rouge, Vert, Bleu)
        strip.setPixelColor(i, red, green, blue);
          }
      strip.show(); // on affiche
      strip.setBrightness(bright);
   }
 
void clignote(int red, int green, int blue, int delai) {
 
for(int j = 0; j<3 ; j++){     
 
          for(int i = 0; i < 8; i++ ) { // On fait une boucle pour définir la couleur de chaque led
        // setPixelColor(n° de led, Rouge, Vert, Bleu)
        strip.setPixelColor(i, red, green, blue);
        }
      strip.show(); // on affiche
      strip.setBrightness(50);
      delay(delai);
 
          for(int i = 0; i < 8; i++ ) { // On fait une boucle pour définir la couleur de chaque led
        // setPixelColor(n° de led, Rouge, Vert, Bleu)
        strip.setPixelColor(i, 0, 0, 0);
        }
      strip.show();
      strip.setBrightness(50);
      delay(delai);
}
}