Commit bb12c4ebf25c20c262bbd162162a47af299e8b2a

Authored by csaad
1 parent 77f5e2ad

creation fichier/prog Autofinal.ino

Showing 1 changed file with 251 additions and 0 deletions   Show diff stats
progArduino/Autofinal/Autofinal.ino 0 → 100644
@@ -0,0 +1,251 @@ @@ -0,0 +1,251 @@
  1 +//////////////////////////////////////// PROJET SC: VEILLEUSE CONNECTEE (IMA3)
  2 +//Claire Vandamme
  3 +//Justine Senellart
  4 +//Camille Saâd
  5 +
  6 +
  7 +
  8 +//--------------------------------------------------------------------------------------------------------------- INITIALISATION CONSTANTES et paramètres
  9 +
  10 +
  11 +//INIT CAPTEUR PRESENCE
  12 +
  13 +//temps donné pour calibrer le capteur de présence.(10-60 secs according to the datasheet)
  14 +int calibrationTime = 10;
  15 +//the time when the sensor outputs a low impulse
  16 +long unsigned int lowIn;
  17 +//the amount of milliseconds the sensor has to be low
  18 +//before we assume all motion has stopped
  19 +long unsigned int pause = 500;
  20 +
  21 +boolean lockLow = true;
  22 +boolean takeLowTime;
  23 +int pirPin = 3; //the digital pin connected to the PIR sensor's output
  24 +int ledPin = 13;
  25 +//var meaning the parent receives a message
  26 +int MESSAGE=0;
  27 +
  28 +
  29 +//INIT NEOPIXEL LED RGB
  30 +
  31 +//add the library
  32 +#include <Adafruit_NeoPixel.h>
  33 +//control pin
  34 +# define PININ 12
  35 +# define PINOUT 8
  36 +
  37 +// Parameter 1 = number of pixels in strip
  38 +// Parameter 2 = pin number (most are valid)
  39 +// Parameter 3 = pixel type flags, add together as needed:
  40 +// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)
  41 +// NEO_KHZ400 400 KHz (classic 'v1' (not v2) FLORA pixels, WS2811 drivers)
  42 +// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)
  43 +// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)
  44 +Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PININ, NEO_RGB + NEO_KHZ800);
  45 +
  46 +
  47 +//INIT PHOTRESISTANCE (LUMINOSITE AMBIANTE)
  48 +#define CAPTEUR A0
  49 +int luminosite = 0;
  50 +int seuil = 200;
  51 +
  52 +//INIT interrupteur
  53 +const int pinInter = 9 ;
  54 +int etatBouton;
  55 +
  56 +
  57 +//--------------------------------------------------------------------------------------------------------------------------------------SETUP ()
  58 +
  59 +
  60 +void setup() {
  61 + //SETUP LIAISON SERIE
  62 + Serial.begin(9600);
  63 +
  64 + //SETUP INTER
  65 + pinMode(pinInter, INPUT_PULLUP); //le bouton est une entrée
  66 + etatBouton = HIGH; //on initialise l'état du bouton comme "relaché"
  67 +
  68 + //SETUP LEDS
  69 + //pour les RGB
  70 + strip.begin();
  71 + strip.show(); // Initialize all pixels to 'off'
  72 +
  73 + //Led en sortie
  74 + pinMode(PININ, OUTPUT);
  75 +
  76 +
  77 + //SETUP CAPTEUR PRESENCE ET LED ROUGE
  78 + pinMode(pirPin, INPUT);
  79 + pinMode(ledPin, OUTPUT);
  80 + digitalWrite(pirPin, LOW);
  81 + //give the sensor some time to calibrate
  82 + Serial.print("calibrating sensor ");
  83 + for(int i = 0; i < calibrationTime; i++){
  84 + Serial.print(".");
  85 + delay(1000);
  86 + }
  87 + Serial.println(" done");
  88 + Serial.println("SENSOR ACTIVE");
  89 +
  90 +
  91 + delay(50);
  92 +}
  93 +
  94 +
  95 +//------------------------------------------------------------------------------------------------------------------------FONCTIONS SECONDAIRES
  96 +
  97 +void couleur(int R, int G, int B)
  98 +{
  99 + strip.setPixelColor(0,R,G,B);
  100 + strip.show();
  101 +}
  102 +
  103 +
  104 +void eteindre()
  105 +{
  106 + strip.setPixelColor(0,0,0,0);
  107 + strip.show();
  108 + digitalWrite(pirPin, LOW);
  109 + digitalWrite(ledPin, LOW);
  110 + digitalWrite(PININ, LOW);
  111 +}
  112 +
  113 +
  114 +//-------------------------------------------------------------------------------------------------------------------------------------------FONCTIONS PRINCIPALES
  115 +
  116 +//---------------------------------------------------------------------------------------------------------------------------------mainveilleuse()
  117 +
  118 +//fonction du programme principal (à copier plus tard dans la LOOP()
  119 +//elle permet l'utilisation de la veilleuse de manière automatique selon la position de l'interrupteur, sinon c'est l'application qui gere le contrôle
  120 +//Elle est constituée de la fusion des fonctions secondaires: lumiere_auto(), mouvement() et automatique()
  121 +void mainVeilleuse_auto()
  122 +{
  123 + etatBouton = digitalRead(pinInter); //Rappel :pinInter = 9
  124 +
  125 + //MODE AUTOMATIQUE
  126 + //si la veilleuse est allumé et interrupteur = LOW on utilise le mode automatique.
  127 + while (etatBouton == LOW) //test si le bouton a un niveau logique HAUT
  128 + {
  129 + delay(1000);
  130 +
  131 + etatBouton = digitalRead(pinInter);
  132 +
  133 + if(etatBouton==LOW)
  134 + {
  135 + //On récupère la valeur du seuil
  136 + luminosite = analogRead(CAPTEUR);
  137 + int i=0;
  138 +
  139 + //Monitoring
  140 + Serial.print("Luminosite = ");
  141 + Serial.print(luminosite);
  142 + Serial.print(" / Seuil = ");
  143 + Serial.print(seuil);
  144 +
  145 + // on l'éteint
  146 + if (luminosite > seuil)
  147 + {
  148 + eteindre();
  149 + Serial.println(" / LED OFF");
  150 + }
  151 +
  152 + //Allumage de la led si la luminosité est inférieur au seuil (on l'allume dans la couleur blanche la base)
  153 + //enfant couché il doit dormir
  154 + else
  155 + {
  156 + //Monitoring
  157 + couleur(255,255,255);
  158 +
  159 +
  160 + while(i<=5 && etatBouton==LOW)
  161 + {
  162 + luminosite = analogRead(CAPTEUR);
  163 +
  164 + if(luminosite < seuil)
  165 + {
  166 + couleur(255,255,255);
  167 +
  168 + //DETECTION D'UN MOUVEMENT
  169 + if(digitalRead(pirPin)==HIGH)
  170 + {
  171 + digitalWrite(ledPin,HIGH); // la led modélise la déection d'un mouvement selon l'etat du capteur
  172 + if (lockLow)
  173 + {
  174 + //être sûr d'attendre la transistion à l'état LOW du capteur pour continuer :
  175 + lockLow= false;
  176 + delay(50);
  177 + }
  178 + takeLowTime = true;
  179 + }
  180 +
  181 + //FIN DE LA DETECTION
  182 + if(digitalRead(pirPin)==LOW)
  183 + {
  184 + digitalWrite(ledPin, LOW);
  185 + if(takeLowTime)
  186 + {
  187 + lowIn= millis(); // enregistrement du temps qu'il faut pour passer de HIGH à LOW pour le capteur
  188 + takeLowTime = false; // être sûr que cela se fait uniquement au debut du passage à LOW
  189 + }
  190 + // Ainsi si le capteur est LOW plus longtemps que la pause, on suppose qu'il n'y plus de mouvement
  191 + // if > être sûr que la suite s'execute seulement après un nouveau mouvement, donc nouvelle séquence de led allumée
  192 + if(!lockLow && millis()-lowIn > pause)
  193 + {
  194 + lockLow = true;
  195 + i++;
  196 + Serial.println(i);
  197 +
  198 + //CHILD AWAKE
  199 + if(i==5)
  200 + {
  201 + Serial.println("Sommeil agite !!!");
  202 + MESSAGE = 1;
  203 + i=0;
  204 + }
  205 + delay(20);
  206 + }
  207 + }
  208 +
  209 + delay(500);
  210 + }
  211 +
  212 + else
  213 + {
  214 + eteindre();
  215 + i=0;
  216 + }
  217 +
  218 + etatBouton = digitalRead(pinInter); //Rappel :pinInter = 9
  219 +
  220 + }
  221 + delay(50);
  222 + }
  223 + }
  224 + else
  225 + {
  226 + eteindre();
  227 + Serial.println("UTILISATION APPLICATION");
  228 + }
  229 +
  230 + etatBouton = digitalRead(pinInter); //Rappel :pinInter = 9
  231 + }
  232 +
  233 + //MODE MANUEL (APPLICATION)
  234 + //on est eteint avec l'interrupteur manuel on peut tjrs utiliser l'application pour gerer la veilleuse
  235 + eteindre(); //la LED reste éteinte
  236 + Serial.println("UTILISATION APPLICATION");
  237 +
  238 + delay(1000);
  239 +
  240 +
  241 +}
  242 +
  243 +//-------------------------------------------------------------------------------------------------------------------------------------------TESTS & LOOP == MAIN PROG
  244 +
  245 +
  246 +void loop()
  247 +{
  248 +
  249 + mainVeilleuse_auto();
  250 + delay(200);
  251 +}