From bb12c4ebf25c20c262bbd162162a47af299e8b2a Mon Sep 17 00:00:00 2001 From: csaad Date: Mon, 8 May 2017 20:11:42 +0200 Subject: [PATCH] creation fichier/prog Autofinal.ino --- progArduino/Autofinal/Autofinal.ino | 251 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 251 insertions(+), 0 deletions(-) create mode 100644 progArduino/Autofinal/Autofinal.ino diff --git a/progArduino/Autofinal/Autofinal.ino b/progArduino/Autofinal/Autofinal.ino new file mode 100644 index 0000000..86d0760 --- /dev/null +++ b/progArduino/Autofinal/Autofinal.ino @@ -0,0 +1,251 @@ +//////////////////////////////////////// PROJET SC: VEILLEUSE CONNECTEE (IMA3) +//Claire Vandamme +//Justine Senellart +//Camille Saâd + + + +//--------------------------------------------------------------------------------------------------------------- INITIALISATION CONSTANTES et paramètres + + +//INIT CAPTEUR PRESENCE + +//temps donné pour calibrer le capteur de présence.(10-60 secs according to the datasheet) +int calibrationTime = 10; +//the time when the sensor outputs a low impulse +long unsigned int lowIn; +//the amount of milliseconds the sensor has to be low +//before we assume all motion has stopped +long unsigned int pause = 500; + +boolean lockLow = true; +boolean takeLowTime; +int pirPin = 3; //the digital pin connected to the PIR sensor's output +int ledPin = 13; +//var meaning the parent receives a message +int MESSAGE=0; + + +//INIT NEOPIXEL LED RGB + +//add the library +#include +//control pin +# define PININ 12 +# define PINOUT 8 + +// 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) +Adafruit_NeoPixel strip = Adafruit_NeoPixel(60, PININ, NEO_RGB + NEO_KHZ800); + + +//INIT PHOTRESISTANCE (LUMINOSITE AMBIANTE) +#define CAPTEUR A0 +int luminosite = 0; +int seuil = 200; + +//INIT interrupteur +const int pinInter = 9 ; +int etatBouton; + + +//--------------------------------------------------------------------------------------------------------------------------------------SETUP () + + +void setup() { + //SETUP LIAISON SERIE + Serial.begin(9600); + + //SETUP INTER + pinMode(pinInter, INPUT_PULLUP); //le bouton est une entrée + etatBouton = HIGH; //on initialise l'état du bouton comme "relaché" + + //SETUP LEDS + //pour les RGB + strip.begin(); + strip.show(); // Initialize all pixels to 'off' + + //Led en sortie + pinMode(PININ, OUTPUT); + + + //SETUP CAPTEUR PRESENCE ET LED ROUGE + pinMode(pirPin, INPUT); + pinMode(ledPin, OUTPUT); + digitalWrite(pirPin, LOW); + //give the sensor some time to calibrate + Serial.print("calibrating sensor "); + for(int i = 0; i < calibrationTime; i++){ + Serial.print("."); + delay(1000); + } + Serial.println(" done"); + Serial.println("SENSOR ACTIVE"); + + + delay(50); +} + + +//------------------------------------------------------------------------------------------------------------------------FONCTIONS SECONDAIRES + +void couleur(int R, int G, int B) +{ + strip.setPixelColor(0,R,G,B); + strip.show(); +} + + +void eteindre() +{ + strip.setPixelColor(0,0,0,0); + strip.show(); + digitalWrite(pirPin, LOW); + digitalWrite(ledPin, LOW); + digitalWrite(PININ, LOW); +} + + +//-------------------------------------------------------------------------------------------------------------------------------------------FONCTIONS PRINCIPALES + +//---------------------------------------------------------------------------------------------------------------------------------mainveilleuse() + +//fonction du programme principal (à copier plus tard dans la LOOP() +//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 +//Elle est constituée de la fusion des fonctions secondaires: lumiere_auto(), mouvement() et automatique() +void mainVeilleuse_auto() +{ + etatBouton = digitalRead(pinInter); //Rappel :pinInter = 9 + + //MODE AUTOMATIQUE + //si la veilleuse est allumé et interrupteur = LOW on utilise le mode automatique. + while (etatBouton == LOW) //test si le bouton a un niveau logique HAUT + { + delay(1000); + + etatBouton = digitalRead(pinInter); + + if(etatBouton==LOW) + { + //On récupère la valeur du seuil + luminosite = analogRead(CAPTEUR); + int i=0; + + //Monitoring + Serial.print("Luminosite = "); + Serial.print(luminosite); + Serial.print(" / Seuil = "); + Serial.print(seuil); + + // on l'éteint + if (luminosite > seuil) + { + eteindre(); + Serial.println(" / LED OFF"); + } + + //Allumage de la led si la luminosité est inférieur au seuil (on l'allume dans la couleur blanche la base) + //enfant couché il doit dormir + else + { + //Monitoring + couleur(255,255,255); + + + while(i<=5 && etatBouton==LOW) + { + luminosite = analogRead(CAPTEUR); + + if(luminosite < seuil) + { + couleur(255,255,255); + + //DETECTION D'UN MOUVEMENT + if(digitalRead(pirPin)==HIGH) + { + digitalWrite(ledPin,HIGH); // la led modélise la déection d'un mouvement selon l'etat du capteur + if (lockLow) + { + //être sûr d'attendre la transistion à l'état LOW du capteur pour continuer : + lockLow= false; + delay(50); + } + takeLowTime = true; + } + + //FIN DE LA DETECTION + if(digitalRead(pirPin)==LOW) + { + digitalWrite(ledPin, LOW); + if(takeLowTime) + { + lowIn= millis(); // enregistrement du temps qu'il faut pour passer de HIGH à LOW pour le capteur + takeLowTime = false; // être sûr que cela se fait uniquement au debut du passage à LOW + } + // Ainsi si le capteur est LOW plus longtemps que la pause, on suppose qu'il n'y plus de mouvement + // if > être sûr que la suite s'execute seulement après un nouveau mouvement, donc nouvelle séquence de led allumée + if(!lockLow && millis()-lowIn > pause) + { + lockLow = true; + i++; + Serial.println(i); + + //CHILD AWAKE + if(i==5) + { + Serial.println("Sommeil agite !!!"); + MESSAGE = 1; + i=0; + } + delay(20); + } + } + + delay(500); + } + + else + { + eteindre(); + i=0; + } + + etatBouton = digitalRead(pinInter); //Rappel :pinInter = 9 + + } + delay(50); + } + } + else + { + eteindre(); + Serial.println("UTILISATION APPLICATION"); + } + + etatBouton = digitalRead(pinInter); //Rappel :pinInter = 9 + } + + //MODE MANUEL (APPLICATION) + //on est eteint avec l'interrupteur manuel on peut tjrs utiliser l'application pour gerer la veilleuse + eteindre(); //la LED reste éteinte + Serial.println("UTILISATION APPLICATION"); + + delay(1000); + + +} + +//-------------------------------------------------------------------------------------------------------------------------------------------TESTS & LOOP == MAIN PROG + + +void loop() +{ + + mainVeilleuse_auto(); + delay(200); +} -- libgit2 0.21.2