probleme programme servo-moteur

Bonjour. Dans le cadre d'un projet j'aimerai contrôler une trappe a l'aide d'un servo moteur. celui s'actionne lorsqu'il y a une présence (poids) puis une présence magnétique. Sinon il ne s'actionne pas. Le soucis est que mon servo moteur ne prends pas en compte ces capteurs et s'actionne en continue sans tenir compte de mes boucles for. Voila mon programme et merci d'avance pour vos réponses.

int presence = 8;              // attribue la valeur entiere 10 à la constante presence
int magnetique = 9;            // attribue la valeur entiere 11 à la constante magnetique
int capteurFDC = 10;
int poussoir = 11;
int pos;  
int C; 
// variable to store the servo position 
boolean P, M;                      // déclare P, M comme des variables booléennes (logiques)

#include <Servo.h> 

Servo monservo;                      // crée l’objet pour contrôler le servomoteur 

void setup(){
  // variable to store the servo position 
  // fonction setup qui s'exécute une fois
  pinMode(presence, INPUT);          // configure le capteur presence comme entrée numérique
  pinMode(magnetique, INPUT);        // configure le capteur magnetique comme entrée numérique
  pinMode(capteurFDC,INPUT);
  pinMode(poussoir,OUTPUT);
  monservo.attach(12);                 // utilise la broche 9 pour le contrôle du servomoteur 
 
Serial.begin(9600);  
  // positionne le servomoteur à 0° 
}

void loop(){                        // fonction boucle qui s'éxécute de façon répétée après le setup
P = digitalRead(presence);
 Serial.println(P);
                                            // attribue la valeur booléenne de l'entrée magnetique à la variable M

if(P = 1){

 M = digitalRead(magnetique);       // attribue la valeur booléenne de l'entrée magnetique à la variable M
if (M=1){                           // Si il y a une presence magnétique

  for(pos = 90; pos > 1; pos--)    // va de 0 degrees a 90 degrees 
  {                                  // in steps of 1 degree 
    monservo.write(pos);              // dire au servo d'aller a la position variable 'pos' 
    delay(10);                     // attendre 3s pour atteindre la position finale
    delay(3000); 
  }
 
  for(pos = 0; pos<90; pos++)     // va de 90 degrees à 0 degrees 
  {                                
    monservo.write(pos);              // dire au servo d'aller a la position variable 'pos' 
    delay(10);                     // attendre 3s pour atteindre la position initiale
  }   

  }
 }
 
  else                             // sinon
 {                      
 digitalWrite(poussoir,HIGH); 
 C = digitalRead(capteurFDC);    // mettre la sortie numérique poussoir à l'état haut
 if (C = 1) // si le capteur fin de course est préssé
 { 
digitalWrite(poussoir,LOW);        // mettre la sortie numérique poussoir à l'état bas
}
}
}

Normale, tu a confondu = et == dans les if.
Profite en pour indenter ton code en faisant ctrl+T et modifie les commentaire pour correspondre au bon brochage.

if(P = 1){

au lieu de

if(P == 1){

idem pour

if (M=1){                           // Si il y a une presence magnétique

pas vu le reste

J'ai changé cela mais ça ne marche toujours pas... je suis bloquée

Je ne suis pas très fort du cerveau servo mais ça :

for(pos = 90; pos > 1; pos--)    // va de 0 degrees a 90 degrees 
  {                                  // in steps of 1 degree 
    monservo.write(pos);              // dire au servo d'aller a la position variable 'pos' 
    delay(10);                     // attendre 3s pour atteindre la position finale
    delay(3000); 
  }

ça le fait bouger de 90 à 1 en 90 étapes qui durent chacune 3 secondes (et 10 millis), ce qui me semble un peu lent, donc ça peut donner l'impression qu'il ne bouge pas.
Il faudrait sortir le delay(3000) de la boucle for.

Après, je ne sais pas si ça va le faire fonctionner, je n'ai pas l’habitude des servos...

Merci beaucoup pour votre réponse j'ai rectifié ce soucis et il marche! :slight_smile: