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);
}
} |
Partager