[Résolu] déclaration de méthode problématique

Bonjour,
débutant en arduino, je commence à faire un programme de base pour le pilotage d'un moteur pas à pas.

Voici le code

int temps = 20;
 
   // variables pour interrupteur
  const int interMontee = 7;
  const int interDescente = 9;
  
  
  
// Variables des port moteur
  const int pin1 = 2;
  const int pin2 = 3;
  const int pin3 = 4;


void setup() 
{
  interSetup();
  pinMode(pin1, OUTPUT);
  pinMode(pin2, OUTPUT);
  pinMode(pin3, OUTPUT);
}

void loop() 
{
  interVoid(interMontee, monteeDP());
  
  interVoid(interDescente, descenteDP());
 
  
}

void descenteDP() // DP pour demis pas
  {
    
    
    digitalWrite(pin1, LOW);
    digitalWrite(pin2, HIGH);
    digitalWrite(pin3, HIGH);
  delay(temps);
  
   digitalWrite(pin1, LOW);
    digitalWrite(pin2, LOW);
    digitalWrite(pin3, HIGH);
  delay(temps);
  
   digitalWrite(pin1, HIGH);
    digitalWrite(pin2, LOW);
    digitalWrite(pin3, HIGH);
  delay(temps);
  
  digitalWrite(pin1, HIGH);
    digitalWrite(pin2, LOW);
    digitalWrite(pin3, LOW);
  delay(temps);
  
   digitalWrite(pin1, HIGH);
    digitalWrite(pin2, HIGH);
    digitalWrite(pin3, LOW);
  delay(temps);
  
   digitalWrite(pin1, LOW);
    digitalWrite(pin2, HIGH);
    digitalWrite(pin3, LOW);
  delay(temps);
  
  }
  
  void monteeDP() // DP pour demis pas
  {
    
     
    digitalWrite(pin1, HIGH);
  digitalWrite(pin2, HIGH);
  digitalWrite(pin3, LOW);
  delay(temps);
  
   digitalWrite(pin1, HIGH);
  digitalWrite(pin2, LOW);
  digitalWrite(pin3, LOW);
  delay(temps);
    
    
     digitalWrite(pin1, HIGH);
  digitalWrite(pin2, LOW);
  digitalWrite(pin3, HIGH);
  delay(temps);
    
    
     digitalWrite(pin1, LOW);
  digitalWrite(pin2, LOW);
  digitalWrite(pin3, HIGH);
  delay(temps);
    
    
     digitalWrite(pin1, LOW);
  digitalWrite(pin2, HIGH);
  digitalWrite(pin3, HIGH);
  delay(temps);
    
    
     digitalWrite(pin1, LOW);
  digitalWrite(pin2, HIGH);
  digitalWrite(pin3, LOW);
  delay(temps);
  
  }

//Pour le void setup


void interSetup()
{
    pinMode(interDescente, INPUT_PULLUP);
    pinMode(interMontee, INPUT_PULLUP);
}

//pour le void loop

void interVoid(const int inter, void methode()) //inter pour le choix de l'inter: interMontee ou interDescente
{                                         
  
  boolean valDep = digitalRead(inter);
  
  if(valDep == 0)
       {
       methode();  
       }
}

et voici le message d'erreur que l'IDE me renvoi

simple.ino: In function ‘void loop()’:
simple.ino:25:36: error: ‘interVoid’ was not declared in this scope

je ne comprend pas du tout pourquoi, j'ai pourtant l'impression que l'écriture est correcte.
Pourriez vous m'aider ?

bonjour,
a quoi correspond ton "interVoid"?
ca te dit qu'il n'est pas déclaré, tu le sors d'ou?
donc erreur :wink:

le voici il est tout en bas

void interVoid(const int inter, void methode()) //inter pour le choix de l'inter: interMontee ou interDescente
{                                         
  
  boolean valDep = digitalRead(inter);
  
  if(valDep == 0)
       {
       methode();  
       }
}

Plusieurs problèmes

  • la déclaration de la fonction : lorsqu'on passe une fonction en argument à une autre fonction,c'est un pointeur qui est transmis.
    void interVoid(const int inter, void (*methode)(void)) //inter pour le choix de l'inter: interMontee ou interDescente

  • l'appel de la fonction : le pointeur sur une fonction c'est le nom de la fonction. Si tu laisse les parenthèses alors tu passes en argument la valeur retournée par la fonction
    interVoid(interMontee, monteeDP);

  • la position de la déclaration. On l'oublie un peu trop souvent, parce que c'est partiellement masqué par l'IDE arduino, mais une fonction doit être déclarée avant d'être appelée

Le code corrigé et qui compile

int temps = 20;
 
   // variables pour interrupteur
  const int interMontee = 7;
  const int interDescente = 9;
  
  
  
// Variables des port moteur
  const int pin1 = 2;
  const int pin2 = 3;
  const int pin3 = 4;

void descenteDP() // DP pour demis pas
  {
    
    
    digitalWrite(pin1, LOW);
    digitalWrite(pin2, HIGH);
    digitalWrite(pin3, HIGH);
  delay(temps);
  
   digitalWrite(pin1, LOW);
    digitalWrite(pin2, LOW);
    digitalWrite(pin3, HIGH);
  delay(temps);
  
   digitalWrite(pin1, HIGH);
    digitalWrite(pin2, LOW);
    digitalWrite(pin3, HIGH);
  delay(temps);
  
  digitalWrite(pin1, HIGH);
    digitalWrite(pin2, LOW);
    digitalWrite(pin3, LOW);
  delay(temps);
  
   digitalWrite(pin1, HIGH);
    digitalWrite(pin2, HIGH);
    digitalWrite(pin3, LOW);
  delay(temps);
  
   digitalWrite(pin1, LOW);
    digitalWrite(pin2, HIGH);
    digitalWrite(pin3, LOW);
  delay(temps);
  
  }
  
  void monteeDP() // DP pour demis pas
  {
    
     
    digitalWrite(pin1, HIGH);
  digitalWrite(pin2, HIGH);
  digitalWrite(pin3, LOW);
  delay(temps);
  
   digitalWrite(pin1, HIGH);
  digitalWrite(pin2, LOW);
  digitalWrite(pin3, LOW);
  delay(temps);
    
    
     digitalWrite(pin1, HIGH);
  digitalWrite(pin2, LOW);
  digitalWrite(pin3, HIGH);
  delay(temps);
    
    
     digitalWrite(pin1, LOW);
  digitalWrite(pin2, LOW);
  digitalWrite(pin3, HIGH);
  delay(temps);
    
    
     digitalWrite(pin1, LOW);
  digitalWrite(pin2, HIGH);
  digitalWrite(pin3, HIGH);
  delay(temps);
    
    
     digitalWrite(pin1, LOW);
  digitalWrite(pin2, HIGH);
  digitalWrite(pin3, LOW);
  delay(temps);
  
  }

//Pour le void setup


void interSetup()
{
    pinMode(interDescente, INPUT_PULLUP);
    pinMode(interMontee, INPUT_PULLUP);
}

//pour le void loop

void interVoid(const int inter, void (*methode)(void)) //inter pour le choix de l'inter: interMontee ou interDescente
{                                         
  
  boolean valDep = digitalRead(inter);
  
  if(valDep == 0)
       {
       methode();  
       }
}

void setup() 
{
  interSetup();
  pinMode(pin1, OUTPUT);
  pinMode(pin2, OUTPUT);
  pinMode(pin3, OUTPUT);
}

void loop() 
{
  interVoid(interMontee, monteeDP);
  
  interVoid(interDescente, descenteDP);
 
  
}

Merci pour ton aide
et la rapidité de réponse.

Bonne journée