Réactivité du programme long.... bug

flo39400 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   -  
flo39400 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   -
Bonsoir,
Donc j'ai pour but de faire une simple barrière levante avec un servomoteur et un détecteur IR.

Le but est que dès que un objet est détecter la barrière ce baisse comme en vrai pour un passage a niveau.

La ça fait le boulot mais parfois on dirait que l'arduino ne lis pas le résultat du capteur. Car aucun mouvement du servomoteur.

Et aussi le moteur vas trop vite pour aller a la position 0.


Voici mon petit code:

#include <Servo.h> //on importe la bibliothèque Servo
int pinServo=4; // variable pour stocker le pin pour la commande
Servo leServo; // on définit un objet Servo nommé leServo
int calibrationTime = 30; 
int delayHAUT = 10000;
int delayBAS = 10000;
int inputPin = 2;
int pirState = LOW;
int val = 0;

void setup() {
  leServo.attach(pinServo); // on relie l'objet au pin de commande
  pinMode(inputPin, INPUT);     // declare IR en Entree
  Serial.begin(9600);
  Serial.print("Calibrage du detecteur IR ");
  for(int i = 0; i < calibrationTime; i++){
    Serial.print(".");
    delay(1000);
  }
  Serial.println("Dectecteur IR active");
  delay(1000);
}
void loop(){
  val = digitalRead(inputPin); 
  Serial.println(val);
  if (val == LOW) { 
    delay(1000);    

    if (pirState == LOW) {
     
      Serial.println("Detection");
      
      pirState = HIGH;
    }
  } else {
    delay(3000);    
      if (pirState == HIGH){
      
      Serial.println("R.A.S");
  
      pirState = LOW;
    }
  }

  Serial.println(pirState);
  if(pirState == HIGH){
     leServo.write(90);
      // atouter l'objet a mettre en action etat 1
     delay(delayHAUT);
  } else {
      leServo.write(0); // on dit à l'objet de mettre le servo à 0°
      // atouter l'objet a mettre en action etat 2
      delay(delayBAS);
  }
}





Merci d'avance et bonne fête de fin d'années.
A voir également:

1 réponse

flo39400 Messages postés 596 Date d'inscription   Statut Membre Dernière intervention   21
 
Re, donc j'ai bosser un peu dessus et la sais plus fluide voila le code :

#include <Servo.h> //on importe la bibliothèque Servo
int pinServo=4; // variable pour stocker le pin pour la commande
Servo leServo; // on définit un objet Servo nommé leServo
int calibrationTime = 10; 
int delayHAUT = 10000;
int delayBAS = 1000;
int inputPin = 2;
int pirState = LOW;
int val = 0;

void setup() {
  leServo.attach(pinServo); // on relie l'objet au pin de commande
  pinMode(inputPin, INPUT);     // declare IR en Entree
  Serial.begin(9600);
  Serial.print("Calibrage du detecteur IR ");
  for(int i = 0; i < calibrationTime; i++){
    Serial.print(".");
    delay(125);
  }
  Serial.println("Dectecteur IR active");
  delay(125);
}
void loop(){
  val = digitalRead(inputPin); 
  Serial.println(val);
  if (val == LOW) { 
    delay(125);    

    if (pirState == LOW) {
     
      Serial.println("Detection");
      
      pirState = HIGH;
    }
  } else {
    delay(125);    
      if (pirState == HIGH){
      
      Serial.println("R.A.S");
  
      pirState = LOW;
    }
  }

  Serial.println(pirState);
  if(pirState == HIGH){
     leServo.write(90);
      // atouter l'objet a mettre en action etat 1
     delay(delayHAUT);
  } else {
      leServo.write(0); // on dit à l'objet de mettre le servo à 0°
      // atouter l'objet a mettre en action etat 2
      delay(delayBAS);
  }
}



Manque plus que a réglé la vitesse de décente et de remonte du moteur....

Et la je suis perdu....
0