1 Dernière modification par ben1015 (27-01-2012 12:47)

Sujet : Arduino interruption 0

Bonjour,

J'ai un petit souci avec les interruptions de la carte Arduino. Je commande un moteur pap, je lui demande de faire 10000 pas (qui déplace un bloc en translation), avant qu'il arrive à faire les 10000 pas, ce bloc entre en buté avec un capteur fin de course, ce qui déclenche l'interruption mais cela n’arrête pas mon moteur. Lorsque que je remplace le code de la fonction arret par setSpeed(0), mon moteur s’arrête mais ne repars pas en sens inverse 5 secondes après. Est-ce que quelqu'un à une idée du pb? Y'a t-il une solution plus simple et plus propre? L'interruption se produit pendant que l'instruction stepper.step(10000) est en exécution, une fois que la fonction arret est exécuté, ou continue l'exécution de mon code?

Merci d'avance
Ben

Voici mon code :

#include <Stepper.h>
#define STEPS 100

Stepper stepper(STEPS, 8, 9, 10, 11);

void setup()
{
  // set the speed of the motor to 30 RPMs
  stepper.setSpeed(30);
  attachInterrupt (0, arret, RISING);
}

void loop()
{
  stepper.step(10000);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  delay(5000);
  stepper.setSpeed(30); // Uniquement Valable lors du test 2
  stepper.step(-10000);
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
}

void arret()
{
  digitalWrite(8, LOW);
  digitalWrite(9, LOW);
  digitalWrite(10, LOW);
  digitalWrite(11, LOW);
  stepper.setSpeed(0);  // Lors du test 2
}

2

Re : Arduino interruption 0

Bonjour

Je ne comprend pas très bien deux choses

1 Tu met un delay de 5000 après tes 10000 pas
Par contre tu ne mets aucun delay après tes -10000 pas
Est tu certain que les commandes sont effectuées ?
Essais de mettre un délais avant l’accolade fermante de ta fonction void loop.

2 Je ne suis pas un spécialiste des interruptions mais vas voir ca
http://www.arduino.cc/cgi-bin/yabb2/YaB … 1147164546

Cdlt
Yves

3

Re : Arduino interruption 0

Salut,

Merci de ta réponse mais j'ai réussi à solutionner mon pb. Les delay sont juste la pour me permettre de debugger.
Le problème était que quand je mettais la vitesse à 0 dans l'interruption, et que le code retourne dans la fonction stepper.setspeed() après avoir exécuté l'interruption, mon moteur devait faire un nombre n restant de tours mais il ne peut pas les faire dans le vide, la vitesse doit-être supérieur à 0. J'ai modifier la librairie et dès que j'ai une interruption, j’arrête l’exécution de  la fonction setspeed.

Merci quand meme