petit problème

a marqué ce sujet comme résolu.

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

Salut. Je te suggères de revoir ton bloc de code, car dans cet état, il est vraiment difficile à lire.

Aussi, je n'ai pas programmé pour Arduino depuis un moment, mais dans ton cas, il serait sûrement plus pertinent de stocker l'état des capteurs dans des variables booléennes plutôt que dans des int. Il faudrait alors faire une condition du type if (val == True). Cette solution aurait aussi l'avantage de prendre moins de mémoire dans l'Arduino. ;)

Sinon, la répétition des if (val1 == HIGH) ne me semble pas très "optimisée". Une boucle for serait peut-être plus adaptée.

+2 -0

Mais j'ai un problème, mes capteurs allument automatiquement le haut-parleur, sans vérifier si il y a un mouvement ou pas.

Peux-tu préciser ? En gros dès que tu lances le programme, le haut-parleur s'active sans même passer la main au dessus des PIR ?
Et que donne le programme de test pour un seul capteur ? Ça fonctionne ?

Petit HS : il y a les tags arduino et pir; donc on peut conclure que je sujet porte sur un petit problème avec arduino et les capteurs pir. Mais je suis d'accord, c'est pas intuitif o_O . Ou alors tu as ajouté les tags après coup ?

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte