J'ai une carte Arduino UNO monter dessus un Grove Shield et encore monter dessus Un Velleman KA02 tout ca sur deux étage. Sur mon Shield j'ai de brancher un détecteur de mouvement avec un vibration motor, deux leds et un capteur de lumière tout ca chez Grove. Tout c'est composant font un détecteur de mouvement.
J'ai réussi a faire mon code pour le détecteur tout les composants marche ensemble mais une dernière choses me pose problème.
J'ai le code d'exemple du Velleman KA02 et mon soucis et que je n'arrive pas ajouter le code a l'autre code du détecteur pour que quand le détecteur de mouvement détecte un mouvement le son se déclenche. Tout marche sauf le lancer du son au moment de la détection.
Voici le code du détecteur :
//Déclaration des pins utilisés
int ledPin = 4; //Broche pour la LED
int ledPin2 = 3; //Broche pour la LED
int pirPin = 2; //Broche pour le capteur de mouvement
int lightPin = A0; //Broche pour le capteur de lumière
int motorPin = 6; //Broche pour le moteur
//Déclaration des variables
int pirState = LOW; //Etat du capteur de mouvement
int lightLevel = 0; //Niveau de lumière ambiant
unsigned long movementStartTime = 0; //Temps de début de détection de mouvement
const unsigned long movementDuration = 5000; //Durée de détection de mouvement en millisecondes (ici 5 secondes)
const unsigned long detectionCooldown = 5000; //Temps de refroidissement entre les détections en millisecondes (ici 10 secondes)
bool lightOn = false; //Indicateur pour savoir si la lumière est allumée ou éteinte
unsigned long lightOnTime = 0; //Temps d'allumage de la lumière en millisecondes
const unsigned long lightDuration = 1000; //Durée d'allumage de la lumière en millisecondes (ici 1 seconde)
void setup() {
pinMode(ledPin, OUTPUT); //Déclare la broche de la LED comme une sortie
pinMode(ledPin2, OUTPUT); //Déclare la broche de la LED comme une sortie
pinMode(pirPin, INPUT); //Déclare la broche du capteur de mouvement comme une entrée
pinMode(lightPin, INPUT); //Déclare la broche du capteur de lumière comme une entrée
pinMode(motorPin, OUTPUT); //Déclare la broche du moteur comme une sortie
Serial.begin(9600); //Initialise la communication série à 9600 bauds
}
void loop(){
lightLevel = analogRead(lightPin); //Lit le niveau de lumière ambiant
pirState = digitalRead(pirPin); //Lit l'état du capteur de mouvement
//Si le niveau de lumière est bas et que le capteur de mouvement détecte un mouvement pendant la durée de détection de mouvement
if (lightLevel < 200 && pirState == HIGH && (millis() - movementStartTime) >= detectionCooldown) {
//Allume la LED et le moteur
digitalWrite(ledPin, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(motorPin, HIGH);
lightOn = true;
lightOnTime = millis();
movementStartTime = millis();
}
//Eteint la LED et le moteur si la durée d'allumage de la lumière est écoulée
if (lightOn && (millis() - lightOnTime) >= lightDuration) {
digitalWrite(ledPin, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(motorPin, LOW);
lightOn = false;
}
}
Et voici l'autre code du Velleman KA02 :
#include <ISD1700.h>
ISD1700 chip(10); // Initialize chipcorder with
// SS at Arduino's digital pin 10
int apc=0;
int vol=0; //volume 0=MAX, 7=min
int startAddr=0x10;
int endAddr =0x2DF;
int inInt=0;
void setup()
{
apc = apc | vol; //D0, D1, D2
//apc = apc | 0x8; //D3 comment to disable output monitor during record
apc = apc | 0x50; // D4& D6 select MIC REC
//apc = apc | 0x00; // D4& D6 select AnaIn REC
//apc = apc | 0x10; // D4& D6 select MIC + AnaIn REC
apc = apc | 0x80; // D7 AUX ON, comment enable AUD
apc = apc | 0x100; // D8 SPK OFF, comment enable SPK
//apc = apc | 0x200; // D9 Analog OUT OFF, comment enable Analog OUT
//apc = apc | 0x400; // D10 vAlert OFF, comment enable vAlert
apc = apc | 0x800; // D11 EOM ON, comment disable EOM
Serial.begin(9600);
Serial.println("Sketch is starting up");
}
void loop()
{
char c;
if(Serial.available())
{
/* Power Up */
chip.pu();
c = Serial.read();
switch(c)
{
case 'A':
Serial.println(chip.rd_apc(), BIN);
break;
case 'Y':
chip.play();
break;
case 'P':
chip.stop();
delay(500);
break;
case 'E':
chip.erase();
delay(500);
break;
case 'R':
chip.rec();
break;
case 'F':
chip.fwd();
delay(500);
break;
case 'Z':
chip.g_erase();
delay(500);
break;
case 'I':
Serial.println(chip.devid(), BIN);
break;
case 'W':
Serial.println(apc, BIN);
chip.wr_apc2(apc); //
break;
case 'S':
Serial.println(chip.rd_status(), BIN);
break;
case '>':
startAddr=SerialIn();
Serial.print("startAddr: ");
Serial.println(startAddr);
break;
case '<':
endAddr=SerialIn();
Serial.print("endAddr: ");
Serial.println(endAddr);
break;
case 'y':
chip.set_play(startAddr,endAddr);
break;
case 'r':
//chip.set_erase(startAddr,endAddr);
//delay(500);
chip.set_rec(startAddr,endAddr);
break;
case 'e':
chip.set_erase(startAddr,endAddr);
delay(500);
break;
}
Serial.print("Status---> ");
Serial.print(chip.CMD_ERR()? "CMD_ERR ": "OK ");
Serial.print(chip.PU()? "PU ": "NO PU ");
Serial.print(chip.RDY()? "RDY ": "Not_RDY ");
Serial.print(chip.rd_status(), BIN);
Serial.println();
delay(1000);
}
}
int SerialIn(){
inInt=0;
while (Serial.available() <= 0)
{
delay(300);
}
while (Serial.available()) {
// get the new byte:
char c = Serial.read();
// add it to the inputString:
inInt = (inInt*10) + (c-48);
// if the incoming character is a newline, set a flag
// so the main loop can do something about it:
if (c == '\n') {
//stringComplete = true;
Serial.print("stringComplete ");
}
}
//c = Serial.read()-48;
//mess(c);
return (inInt);
}
/*
void mess(int num){
Serial.print("num: ");
Serial.println(num);
startAddr=(0x50*num)+0x10;
endAddr=(startAddr+0x50)-1;
Serial.print("startAddr: ");
Serial.print(startAddr, HEX);
Serial.print(" - endAddr: ");
Serial.println(endAddr, HEX);
}
*/
Si vous auriez la solution ou pourrez m'aiguiller je vous en serais très reconnaissant.