Merci Fantoche !
Pardon de n'avoir pas répondu plus tôt. J'ai essayé d'avancer le projet au mieux quand j'avais un peu de temps.
Mon échéance pour celui-ci arrivant mardi prochain, j'ai l'impression d'être pas trop loin d'un résultat satisfaisant.
J'ai du faire des choix cela dit : J'ai décidé de ne pas dimmer la lumière mais de la remplacer par un relai (essayer de dimmer la lumière à l'air bien complexe, surtout avec les ampoules Led, et trop peu de tutorial pour mon cas précis. Dans le doute je préfère jouer la sureté.)
J'ai également décidé de séparé les actions sur trois arduinos, pour pouvoir gérer seulement deux actions sur chaque.
1er arduino : Capeur Son, Capteur mouvement, Motorshield + un moteur et un relai
2eme arduino :Capeur Son, Capteur mouvement, Motorshield + deux moteurs
3eme arduino Capeur Son, Capteur mouvement, deux relais
Bien entendu il faudra calibrer les Capteurs Son
Maintenant, j'ai essayer de retravailler sur ce que tu m'avais dis concernant la simultanéité des actions
en créants plusieurs void.
Et cela à plutôt l'air de marcher, en tout cas pour le 1er Arduino :
const int MotorPinA = 12; // for motor A
const int MotorSpeedPinA = 3; // for motor A
const int MotorBrakePinA = 9; // for motor A
const int Relai = 5;
const int soundpin = 7; // micro, supposé binairec
const int inputPin = 4; // PIR, supposé binaire
// les variables que j'ai ajoutées
unsigned long motor1_starting_date = millis(); //date ou demarre le moteur 1
unsigned long running_motor1_duration = 5000; //duree pendant laquelle le moteur 1 tourne
bool state = true; // etat 1 (true) ou 2 (false) du montage
bool motor1State = false; // si le moteur 1 tourne (true) ou pas (false)
bool relaiState = false;
// demarre dès le premier passage par loop
// les variables qui ne me sont pas utiles
// int pirState = LOW; // we start, assuming no motion detected
// int val = 0; // variable for reading the pin status
//const int SAMPLE_TIME = 10; // ??? pas compris
//unsigned long millisCurrent; // toujours millis()
//unsigned long millisLast = 0; // remplacé par motor1_starting_date
//unsigned long millisElapsed = 0; // millis() - millisLast
//int sampleBufferValue = 0; // pas compris
void setup()
{
Serial.begin(9600); // seial monitor initialized
pinMode (soundpin, INPUT);
pinMode(inputPin, INPUT); // declare sensor as input
pinMode(MotorPinA, OUTPUT);
pinMode(MotorSpeedPinA, OUTPUT);
pinMode(MotorBrakePinA, OUTPUT);
pinMode(Relai, OUTPUT);
}
void loop() {
// MODIFICATION DE L'ETAT SI NECESSAIRE
Serial.println(digitalRead(soundpin));
if ( (state) && digitalRead(soundpin)) { // etat 1 & son fort
/* 1ère réaction : L'ambiance sonore est trop forte,
le capteur de son réagit.
On passe de l'état 1 à l'état 2
*/
state = false; // passage a l'état 2
}
else if ((!state) && digitalRead(inputPin)) { // etat 2 et mouvement
/*2ème réaction : Le capteur de mouvement réagit à un mouvement.
On passe de l'état 2 à l'état 1
(avec juste la lumière de l'ampoule
qui se tamise doucement grâce au light dimmer).
*/
state = true; // passage a l'état 1
}
// ACTION SUR LE MOTEUR
motor1(); // demarrage et arret du moteur 1
relai1();
} // loop
void motor1() {
/* gère les arrets et demarrage du moteur 1
*/
if (state && !(motor1State)) {
// declanchement de l'etat 1
// lancement du moteur qui est à l'arret
digitalWrite(MotorPinA, HIGH); // set direction // <--- A faire dans le setup ?
analogWrite(MotorSpeedPinA, 60); // set speed at maximum // <--- dans le setup ?
digitalWrite(MotorBrakePinA, LOW); // release brake, demarrage
motor1State = true; // le moteur 1 tourne
motor1_starting_date = millis(); // enregistre la date de demarrage du moteur
Serial.println("Demarrage du moteur 1 après un changement d'état");
}
else if (!state && motor1State) {
// déclanchement de l'état 2
// arret du moteur 1 s'il tourne
digitalWrite(MotorBrakePinA, HIGH); // brake
motor1State = false; // le moteur ne tourne plus
Serial.println("Arret du moteur 1 après un changement d'état");
}
} // motor1
void relai1() {
/* gère les arrets et demarrage du moteur 1
*/
if (state && !(relaiState)) {
// declanchement de l'etat 1
// lancement du moteur qui est à l'arret
digitalWrite(Relai, LOW);
relaiState = true; // le moteur 1 tourne
Serial.println("Demarrage du relai après un changement d'état");
}
else if (!state && relaiState) {
// déclanchement de l'état 2
// arret du moteur 1 s'il tourne
digitalWrite(Relai, HIGH);
delay(5000);
digitalWrite(Relai, LOW);
delay(1000);
relaiState = false; // le moteur ne tourne plus
Serial.println("Arret du relai après un changement d'état");
}
} // babycry1
Pour le 3eme arduino (deux relais) j'ai pu faire sans.
const int Light1 = 5;
const int Light2 = 6;
const int soundpin = 7; // micro, supposé binairec
const int inputPin = 4; // PIR, supposé binaire
bool state = true; // etat 1 (true) ou 2 (false) du montage
bool lightState = false;
void setup()
{
Serial.begin(9600); // seial monitor initialized
pinMode (soundpin, INPUT);
pinMode(inputPin, INPUT); // declare sensor as input
pinMode(Light1, OUTPUT);
pinMode(Light2, OUTPUT);
}
void loop() {
// MODIFICATION DE L'ETAT SI NECESSAIRE
if ( (state) && digitalRead(soundpin)) { // etat 1 & son fort
/* 1ère réaction : L'ambiance sonore est trop forte,
le capteur de son réagit.
On passe de l'état 1 à l'état 2
*/
state = false; // passage a l'état 2
}
else if ((!state) && digitalRead(inputPin)) { // etat 2 et mouvement
/*2ème réaction : Le capteur de mouvement réagit à un mouvement.
On passe de l'état 2 à l'état 1
(avec juste la lumière de l'ampoule
qui se tamise doucement grâce au light dimmer).
*/
state = true; // passage a l'état 1
}
// ACTION SUR LE MOTEUR
light();
// ACTUALISATION DES VARIABLES
} // loop
void light() {
/* gère les arrets et demarrage du moteur 1
*/
if (state && !lightState) { // <--- MODIFIE
// passage de l'état 2 à l'état 1
// lancement du moteur qui est à l'arret
digitalWrite(Light1, HIGH); // set direction // <--- A faire dans le setup ?
digitalWrite(Light2, LOW);
lightState = true;
Serial.println("Arret Light2, Demarrage Light1 après un changement d'état");
}
else if (!state && lightState) {
digitalWrite(Light1, LOW); // set direction // <--- A faire dans le setup ?
digitalWrite(Light2, HIGH);
lightState = false;
Serial.println("Arret Light1, Demarrage Light2 après un changement d'état");
}
} // light
Donc un grand merci Fantoche ! J'espère que je vais pouvoir finir le projet sans complication.
Si jamais je devais me retrouver en difficulté, j'espère que je pourrais revenir vers toi une dernière fois.