Code Arduino utilisation fonction IF

Bonjour,
J’ai un problème avec mon code Arduino, je cherche à faire un robot aspirateur, je m’explique.
J’utilise deux moteurs CC, une carte Arduino Leonardo, un Motor Shield V3, une turbine qui est alimentée en permanence et qui n’a pas besoin d’être programmée, un capteur ultrason SRF005, le tout alimenté par une batterie de 12V.
J’ai bien fait tous les branchements sur la carte, les deux moteurs CC peuvent avancer et reculer sans le capteur (j’ai fait le code pour cela), mais au moment de connecter le capteur ultrason au système qui me permettra d’arrêter le robot si un obstacle est présent à moins de 10cm, j’utilise pour appeler un programme dans le programme la fonction if/else, mais le robot ne réagit pas.
Je mets mon code actuel ci-dessous :

#define ECHOPIN 2
#define TRIGPIN 3
int Echo = 4; //Affectation de la broche 4 à l’émission du signal Ultra-son
int Trigger = 5; //Affectation de la broche 5 à la réception du l’écho Ultra-son
int distance = LOW; //Condition de l’enclenchement du sous-programme quand la mesure est à moins de 10 centimètres

void setup()
{

//Configuration moteur A
pinMode(12, OUTPUT);
pinMode(9, OUTPUT);

//Configuration moteur B
pinMode(13, OUTPUT);
pinMode(8, OUTPUT);

//Capteur SRF005
Serial.begin(9600);
pinMode(ECHOPIN, INPUT);
pinMode(TRIGPIN, OUTPUT);

}

void loop()
{
//SRF005
digitalWrite(TRIGPIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIGPIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIGPIN, LOW);
int distance = pulseIn(ECHOPIN, HIGH);
distance = distance / 58;
Serial.println(distance);
delay(500);

if (distance == LOW >= 20)
{
avance();
}

else if (distance == HIGH < 20)
{
arrete();
}
}
void avance()
{

//Robot avance

//Roue droite avance

digitalWrite(12, LOW);
digitalWrite(9, LOW);
analogWrite(3, 123);

//Roue gauche avance
digitalWrite(13, HIGH);
digitalWrite(8, LOW);
analogWrite(11, 123);

delay (1000);

digitalWrite(9, HIGH);
digitalWrite(8, HIGH);

}

void arrete()
{
//Robot s’arrête

//Roue droite s’arrête
digitalWrite(12, LOW);
digitalWrite(9, LOW);
analogWrite(3, 0);

//Roue gauche s’arrête
digitalWrite(13, HIGH);
digitalWrite(8, LOW);
analogWrite(11, 0);

delay (1000);

digitalWrite(9, HIGH);
digitalWrite(8, HIGH);

}

Si quelqu’un pourrait m’éclairer pour faire fonctionner le capteur, je le remercierai jamais assez x).
Merci.

Bonjour,

Mets ton code entre balises

L'instruction if est incorrecte, c'est simplement une compraison

if (distance  >= 20)

Le deuxième if est inutile, le else suffit

D'accord, mais comment faire ces balises ? Je ne vois pas très bien ou le faire dans Arduino. Quand j'enlève le if après le else, il me mets une erreur de compilation.

Tu sélectionnes More… puis modifier en bas de ton premier message, tu sélectionne ton code et tu cliques sur <> au dessus à gauche.

Tu supprimes le 2eme if comme ceci

  if (distance >= 20)
  {
    avance();
  }
   else
  { 
    arrete();
  }

Message d'erreur "avance was not declared in this scope" Comment le déclarer dans mon code ? Dois-je spécifier ma prochaine fonction void quelque part ? Merci

Ce message n'a rien a voir avec la modification. Avec l'ide arduino avance() n'a pas besoin d'être déclaré, mais il faut qu'il existe. As tu fait d'autre modif? Si le problème persiste, remets ton code en entier.

il est préférable que la fonction avance() soit écrite avant le void setup() et le void loop() qu’après le void loop()

kamill, J'ai simplement reconstruit ma fonction if comme tu m'as dit, mais en recompilant j'obtiens le message "avance was not declared in this scope".

Voici mon nouveau code :

define ECHOPIN 2

define TRIGPIN 3

int Echo = 4; //Affectation de la broche 4 à l'émission du signal Ultra-son int Trigger = 5; //Affectation de la broche 5 à la réception du l'écho Ultra-son int distance = LOW; //Condition de l'enclenchement du sous-programme quand la mesure est à moins de 10 centimètres

void setup() {

//Configuration moteur A pinMode(12, OUTPUT); pinMode(9, OUTPUT);

//Configuration moteur B pinMode(13, OUTPUT); pinMode(8, OUTPUT);

//Capteur SRF005 Serial.begin(9600); pinMode(ECHOPIN, INPUT); pinMode(TRIGPIN, OUTPUT);

}

void loop() { //SRF005 digitalWrite(TRIGPIN, LOW); delayMicroseconds(2); digitalWrite(TRIGPIN, HIGH); delayMicroseconds(10); digitalWrite(TRIGPIN, LOW); int distance = pulseIn(ECHOPIN, HIGH); distance = distance / 58; Serial.println(distance); delay(500);

if (distance >= 20) { avance(); } else { arrete();

}

void avance() {

//Robot avance

//Roue droite avance

digitalWrite(12, LOW); digitalWrite(9, LOW); analogWrite(3, 123);

//Roue gauche avance digitalWrite(13, HIGH); digitalWrite(8, LOW); analogWrite(11, 123);

delay (1000);

digitalWrite(9, HIGH); digitalWrite(8, HIGH);

}

void arrete() { //Robot s'arrête

//Roue droite s'arrête digitalWrite(12, LOW); digitalWrite(9, LOW); analogWrite(3, 0);

//Roue gauche s'arrête digitalWrite(13, HIGH); digitalWrite(8, LOW); analogWrite(11, 0);

delay (1000);

digitalWrite(9, HIGH); digitalWrite(8, HIGH);

}

Il manque le } à la fin de loop() juste avant void avance()

Mets ton code entre balises

Je l'ai bien remis, mais j'ai toujours une erreur à la focnction setup.. "excepted initializer before void"

moi je n'ai pas d'erreur

#define ECHOPIN 2
#define TRIGPIN 3
int Echo = 4;                          //Affectation de la broche 4 à l'émission du signal Ultra-son
int Trigger = 5;                       //Affectation de la broche 5 à la réception du l'écho Ultra-son
int distance = LOW;                    //Condition de l'enclenchement du sous-programme quand la mesure est à moins de 10 centimètres


void setup()
{

  //Configuration moteur A
  pinMode(12, OUTPUT);
  pinMode(9, OUTPUT);

  //Configuration moteur B
  pinMode(13, OUTPUT);
  pinMode(8, OUTPUT);

  //Capteur SRF005
  Serial.begin(9600);
  pinMode(ECHOPIN, INPUT);
  pinMode(TRIGPIN, OUTPUT);

}

void loop()
{
  //SRF005
  digitalWrite(TRIGPIN, LOW);
  delayMicroseconds(2);
  digitalWrite(TRIGPIN, HIGH);
  delayMicroseconds(10);
  digitalWrite(TRIGPIN, LOW);
  int distance = pulseIn(ECHOPIN, HIGH);
  distance = distance / 58;
  Serial.println(distance);
  delay(500);

  if (distance >= 20)
  {
    avance();
  }
  else
  {
    arrete();

  }
}
void avance()
{

  //Robot avance

  //Roue droite avance

  digitalWrite(12, LOW);
  digitalWrite(9, LOW);
  analogWrite(3, 123);

  //Roue gauche avance
  digitalWrite(13, HIGH);
  digitalWrite(8, LOW);
  analogWrite(11, 123);

  delay (1000);

  digitalWrite(9, HIGH);
  digitalWrite(8, HIGH);


}


void arrete()
{
  //Robot s'arrête

  //Roue droite s'arrête
  digitalWrite(12, LOW);
  digitalWrite(9, LOW);
  analogWrite(3, 0);

  //Roue gauche s'arrête
  digitalWrite(13, HIGH);
  digitalWrite(8, LOW);
  analogWrite(11, 0);

  delay (1000);

  digitalWrite(9, HIGH);
  digitalWrite(8, HIGH);

}

METS TON CODE ENTRE BALISES

Exact, j'avais oublié de mettre une } Je vais tester si voir ce que je cherche à faire fonctionne !