bonjour
j'ai acheter 7 capteur PIR pour un projet de de piano"virtuel", qui joue une note quand un capteur détecte un mouvement, ils pourraient donc reproduire les 7 notes de la gamme. Mais j'ai un problème, mes capteurs allument automatiquement le haut-parleur, sans vérifier si il y a un mouvement ou pas.
J'ai donc essayé chaque capteur un par un : ils détectent mais restent sur cette état et ne détectent plus rien.
voici mon programme :
const int H = 13;
int val1 = 0;
int val2 = 0;
int val3 = 0;
int val4 = 0;
int val5 = 0;
int val6 = 0;
int val7 = 0;
void setup()
{
pinMode(13, OUTPUT); // Mise en sortie du Pin du haut-parleur
pinMode(2, INPUT); // Mise en entrée des pin des Pir sensor
pinMode(3, INPUT);
pinMode(4, INPUT);
pinMode(5, INPUT);
pinMode(6, INPUT);
pinMode(7, INPUT);
pinMode(8, INPUT);
}
void loop()
{
val1 = digitalRead(2);
if (val1 == HIGH)
{
tone(H, 131);
}
else
{
digitalWrite(H, LOW);
delay(200);
}
val2 = digitalRead(3);
if (val2 == HIGH)
{
tone(H, 147);
}
else
{
digitalWrite(H, LOW);
delay(200);
}
val3 = digitalRead(4);
if (val3 == HIGH)
{
tone(H, 165);
}
else
{
digitalWrite(H, LOW);
delay(200);
}
val4 = digitalRead(5);
if (val4 == HIGH)
{
tone(H, 175);
}
else
{
digitalWrite(H, LOW);
delay(200);
}
val5 = digitalRead(6);
if (val5 == HIGH)
{
tone(H, 196);
}
else
{
digitalWrite(H, LOW);
delay(200);
}
val6 = digitalRead(7);
if (val6 == HIGH)
{
tone(H, 220);
}
else
{
digitalWrite(H, LOW);
delay(200);
}
val7 = digitalRead(2);
if (val7 == HIGH)
{
tone(H, 247);
}
else
{
digitalWrite(H, LOW);
delay(200);
}
}
et voici le programme de test pour un capteur :
//the time we give the sensor to calibrate (10-60 secs according to the datasheet)
int calibrationTime = 30;
int ledPin = 13; // choose the pin for the LED
int inputPin = 2; // choose the input pin (for PIR sensor)
int pirState = LOW; // we start, assuming no motion detected
int val = 0; // variable for reading the pin status
void setup() {
pinMode(ledPin, OUTPUT); // declare LED as output
pinMode(inputPin, INPUT); // declare sensor as input
Serial.begin(9600);
Serial.print("calibrating sensor ");
for(int i = 0; i < calibrationTime; i++){
1 2 3 | Serial.print("."); delay(1000); |
}
}
void loop(){
val = digitalRead(inputPin); // read input value
Serial.println(val);
if (val == HIGH) { // check if the input is HIGH
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | digitalWrite(ledPin, HIGH); // turn LED ON delay(150); if (pirState == LOW) { // we have just turned on Serial.println("Motion detected!"); // We only want to print on the output change, not state pirState = HIGH; } |
} else {
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | digitalWrite(ledPin, LOW); // turn LED OFF delay(300); if (pirState == HIGH){ // we have just turned of Serial.println("Motion ended!"); // We only want to print on the output change, not state pirState = LOW; } |
}
}
merci de vos réponses