Le site référence de tutoriels électroniques français

 
chrm
Sujet Auteur
Messages : 1
Inscription : jeu. févr. 20, 2020 10:42 am

Buzzer pour radar de recul

jeu. févr. 20, 2020 10:58 am

Bonjour,
je suis actuellement en train de programmer un robot zumo polulu afin d'y ajouter un radar de recul, un joystick ainsi qu'un buzzer, de telle façon à ce que le buzzer émette un son lorsque le robot recule et que ce dernier s'arrête en présence d'obstacle. Voici le code :

#define M2PWM 10                                         // définition de la variable M2PWM
#define M1PWM 9                                          // définition de la variable M1PWM
#define M2DIR 8                                          // définition de la variable M2DIR
#define M1DIR 7                                          // définition de la variable M1DIR

float xPin = A1;                                         // définition de la variable xPin
float yPin = A0;                                         // définition de la variable yPin

int xPosition = 0;                                       // définition de la variable xPosition
int yPosition = 0;                                       // définition de la variable yPosition

int trig = 2;
int distance;
int impulse;

int buzzer = 3;

void setup()                                             // Initialisation de la carte

{

  Serial.begin(9600);

  pinMode(xPin, INPUT);
  pinMode(yPin, INPUT);


  pinMode(M2PWM, OUTPUT);
  pinMode(M1PWM, OUTPUT);
  pinMode(M1DIR, OUTPUT);
  pinMode(M2DIR, OUTPUT);


  pinMode(buzzer,OUTPUT);

}

void loop()

{
  xPosition = analogRead(xPin);
  yPosition = analogRead(yPin);

  if ((yPosition > 500 ) && (yPosition < 510) && (xPosition > 230 ) && (xPosition < 295))           //Avance

  {

    analogWrite (M1PWM, 150);
    analogWrite (M2PWM, 150);
    digitalWrite (M1DIR, LOW);                            // variable M1DIR à l'état logique bas ( LOW ) = 0
    digitalWrite (M2DIR, LOW);                            // variable M2DIR à l'état logique bas ( LOW ) = 0
    Serial.print(" Avancer ");

  }

  else if ((yPosition > 490 ) && (yPosition < 530) && (xPosition > 770 ) && (xPosition < 790))       //Recule

  {

    analogWrite (M1PWM, 100);
    analogWrite (M2PWM, 100);
    digitalWrite (M1DIR, HIGH);                           // Variable M1DIR à l'état logique haut ( HIGH ) = 1
    digitalWrite (M2DIR, HIGH);                           // variable M2DIR à l'état logique haut ( HIGH ) = 1
    Serial.print("Reculer");

    pinMode (trig, OUTPUT); // on met la broche 2 en sortie
    digitalWrite (trig, HIGH); // on envoie une impulsion
    delayMicroseconds (5); // on attend 5 µs
    digitalWrite (trig, LOW); // on désactive l'impulsion

    pinMode (trig, INPUT); // on met la broche 2 en sortie

    impulse == pulseIn (trig, HIGH); // on lit impulse en fonction de trig
    distance == (impulse/1000000*100*170); //on calcule la distance
    Serial.println (distance); // on affiche la distance dans le moniteur série

    digitalWrite(buzzer, LOW); // état bas
    delay(500); //on attend p milli-secondes
    digitalWrite(buzzer, HIGH); //état haut
    delayMicroseconds(500); // on attend p millisecondes


  }
}
Mon problème est : lorsque le robot recule, je ne souhaite pas que le buzzer émette un son continu. De ce fait, j'ai utilisé delay(500). Sauf que ce delay s'applique aussi aux mouvements du robot. Du coup celui-ci aussi s'arrête pendant 0.5 secondes, et je cherche un moyen de stopper le son du buzzer indépendemment du robot, tout en restant dans la boucle de recul (je ne sais pas trop si c'est clair).

Merci d'avance pour votre aide !

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité
GZIP: Off