Bonjour,
J'ai un projet pour mon école à finir, c'est une maison en domotique. Nous avons pris les fonctions suivante :
- Si on appuie sur 1 : On peut géré les led et la luminosité de la maison
- Si on appuie sur 2 : On peut ouvrir ou fermer les volets.
- Si on appuie sur 3 : La maison est géré toutes seules. S'il fait nuit il les lumières s'allume et les volet se ferme. S'il fait jour les lumières s'éteignent et les volets s'ouvrent.
Voici le code :
#include <Stepper.h>
#include "IRremote.h"
/*-----( Declare Constants )-----*/
int receiver = 7; // pin 1 of IR receiver to Arduino digital pin 11
// RECEPTEUR
#define LDB_Touche_0 0xE12430CF
#define LDB_Touche_1 0xFF30CF
#define LDB_Touche_2 0xFF18E7
#define LDB_Touche_3 0xFF7A85
#define LDB_Touche_4 0xFF10EF
#define LDB_Touche_5 0xFF38C7
#define LDB_Touche_6 0xFF5AA5
#define LDB_Touche_7 0xFF42BD
#define LDB_Touche_8 0xFF4AB5
#define LDB_Touche_9 0xFF52AD
#define LDB_Touche_Volume_Up 0xFF906F
#define LDB_Touche_Volume_Down 0xFFA857
#define LDB_Touche_Power 0xFFA25D
#define LDB_Touche_Play 0xFFC23D
char appuyer = 'FFC23D';
// Moteur constante
#define IN1 8
#define IN2 9
#define IN3 10
#define IN4 11
int Steps = 0;
boolean Direction = true;
unsigned long last_time;
unsigned long currentMillis ;
int steps_left=4095;
long time;
int moteur_position = 0; // Donne la variable de la position du moteur
// Capteur Photosensible
int LDR = 0; // the cell and 10K pulldown are connected to a0
int photocellReading; // the analog reading from the analog resistor divider
int base;
int lumiere = 100; // luminosité
int k = 0;
// Led
int ledPin =6; // the number of the LED pin
int Led_allumer = 0; // Si la valeur est 1 = Allumer / Si la valeur est 0 éteinds
int ledlevel = 0;
// Variable servant a choisir le mode
int prog_led = 0;
int prog_domo = 0;
// Variabe pour le capteur de mouvement
#define trigPin 13
#define echoPin 12
/*-----( Declare objects )-----*/
IRrecv irrecv(receiver); // create instance of 'irrecv'
decode_results results; // create instance of 'decode_results'
/*-----( Declare Variables )-----*/
void setup() /*----( SETUP: RUNS ONCE )----*/
{
Serial.begin(9600);
Serial.println("IR Receiver Raw Data + Button Decode Test");
irrecv.enableIRIn(); // Start the receiver
//declare the motor pins as outputs
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
// pinMode(trigPin, OUTPUT);
// pinMode(echoPin, INPUT);
//LED
pinMode(ledPin, OUTPUT);
// Capteur photosensible
base = analogRead(LDR);
}/*--(end setup )---*/
void loop() /*----( LOOP: RUNS CONSTANTLY )----*/
{
if (irrecv.decode(&results)) // have we received an IR signal?
{
//Serial.println(results.value, HEX);
translateIR();
irrecv.resume(); // receive the next value
}
}/* --(end main loop )-- */
/*-----( Declare User-written Functions )-----*/
void translateIR() // takes action based on IR code received
// describing Car MP3 IR codes
{
switch(results.value)
{
//POUR ALLUMER LA LED ET géré Luminosité
case LDB_Touche_1:
Serial.println(" 1 ");
prog_led = 1;
while (prog_led == 1)
{
if (irrecv.decode(&results)) {
if(results.value == LDB_Touche_Volume_Up && ledlevel <255)
{
ledlevel += 51; //luminosité led ++
Serial.println("Luminosite ++");
}
if(results.value == LDB_Touche_Volume_Down && ledlevel >0)
{
ledlevel -= 51; //luminosité led --
Serial.println("Luminosite --");
}
analogWrite(6, ledlevel);
Serial.println("Allume");
Led_allumer = 1;
delay(100); // attend une seconde
if (results.value == LDB_Touche_Power)
{
prog_led == 0;
Serial.println("Eteindre");
break;
}
irrecv.resume(); // Receive the next value
}
}
delay(100); // attend une seconde
break;
case LDB_Touche_2: // Fonction ouverture fermeture volet
Serial.println(" 2 ");
// Boucle pour le moteur
while(steps_left>0)
{
currentMillis = micros();
if(currentMillis-last_time>=1000)
{
stepper(1);
time=time+micros()-last_time;
last_time=micros();
steps_left--;
}
}
Serial.println(time);
Serial.println("Wait...!");
delay(2000);
Direction=!Direction;
steps_left=1364;
break;
// Fonction Maison domotique
case LDB_Touche_3:
{
prog_domo = 1;
while (prog_domo == 1)
{
int j = analogRead(LDR); // valeur de la luminosité
if (j != k)
{
if (j < 700)
{
digitalWrite(ledPin, HIGH);
moteur_position = 0;
if (moteur_position == 0) // Si le volet est ouvert
{
// Boucle pour le moteur
while(steps_left>0)
{
currentMillis = micros();
if(currentMillis-last_time>=1000)
{
stepper(1);
time=time+micros()-last_time;
last_time=micros();
steps_left--;
}
}
delay(2000);
Direction=!Direction;
steps_left=1364;
}
k = j;
}
else if (j > 699)
{
digitalWrite(ledPin, LOW);
Serial.println("Lumiere eteinte");
moteur_position = 1;
// Boucle pour le moteur
if (moteur_position == 1) // Si le volet est fermé
{
while(steps_left>0)
{
currentMillis = micros();
if(currentMillis-last_time>=1000)
{
stepper(1);
time=time+micros()-last_time;
last_time=micros();
steps_left--;
}
}
delay(2000);
Direction=!Direction;
steps_left=4095;
}
}
}
else
{
delay(100);
}
}
}
break;
default:
Serial.println(" other button ");
}
delay(500);
} //END translateIR
////////////////////////////////////////////////////////////////////////
/// Function suppl.
void stepper(int xw){
for (int x=0;x<xw;x++){
switch(Steps){
case 0:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
break;
case 1:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, HIGH);
break;
case 2:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
break;
case 3:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
break;
case 4:
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 5:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 6:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
case 7:
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
break;
default:
digitalWrite(IN1, LOW);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, LOW);
break;
}
SetDirection();
}
}
void SetDirection(){
if(Direction==1){ Steps++;}
if(Direction==0){ Steps--; }
if(Steps>7){Steps=0;}
if(Steps<0){Steps=7; }
}
/* ( THE END ) */
J'utilise une télécommande pour savoir les entrés utilisateurs.
Mais je bloque absolument sur la partie 3 de tous géré seul.
De pouvoir rester dans le programme. Savoir si le volet et déjà ouvert de le fermer.
Voilà si une âme charitable pourrait bien m'aider,
cordialement,
Tchoune