Go Down

Topic: Pb programmation capteurs effet hall + interruptions (Read 607 times) previous topic - next topic

antoine974

Bonjour, j'ai un problème avec mon programme, je dois faire un double-compteur avec deux capteurs effet-hall: un capteur incrémente un compteur pour la première roue; l'autre capteur incrémente l'autre compteur pour la deuxième roue. Voici mon code, quelqu'un peut m'aider svp? Merci d'avance!! :)
Code: [Select]
volatile int nb;
volatile int nomb;
int capteur = 2;
int capt = 3;


void rpm()
{
  nb++;
  Serial.print(nomb);
  Serial.println(nb);
}
void rp()
{
  nomb++;;
  Serial.print(nomb);
  Serial.println(nb);
}

void setup()
{
  pinMode(capteur, INPUT);
  pinMode(capt, INPUT);
  Serial.begin(9600);
  attachInterrupt(0, rpm, RISING);
  attachInterrupt(1, rp, RISING);
}

void loop()
{
  sei();
  delay(1000);
  cli();
}

3Sigma

Bonjour,

Pourquoi fais-tu ça dans la loop ?
A part ça, quel est ton problème ?

kamill

Bonjour,

Il y a un pull up sur tes capteurs?
C'est quoi la référence de tes capteurs?

antoine974

En fait, je me suis basé d'un exemple avec un débitmètre, c'est pourquoi c'est dans le loop.

Ah oui!! et le problème c'est que la variable nomb ne s'incrémente pas du tout alors que l'autre oui. je m'explique un peu plus: lorsque je bouge la roue gauche, l'incrémentation nb fonctionne correctement; lorsque je bouge la roue droite, l'incrémentation ne fonctionne pas du tout.


Il y a un pull-up sur chaque capteur oui: il est fait avec une résistance de 10kOhm.

Je ne connais pas la référence des capteurs: ce sont les capteurs effet hall d'une tondeuse: la Friendly Robotics RL550 (c'est le matériel du lycée en fait).

Merci à vous de m'aider :)

kamill

Si ça fonctionne d'un coté et pas de l'autre c'est qu'il y a un problème de capteur ou de câblage.


dfgh


kamill

Mon programme est bon?
On ne peut pas vraiment dire ça, mais il doit afficher les compteurs des deux roues.

Ce qui ne va pas:
- On essaie de faire des routines d'interruption le plus courtes possibles et en particulier on n'affiche pas dans les routines d'interruption
- comme l'a dit 3Sigma ça sert à quoi ce qu'il y a dans la loop?
- le nom des variables laisse à désirer. Tu as deux capteurs et tu appelles le premier capteur capteur et le deuxième capt ?????, même chose pour les autres variables. Quelqu'un qui aurait réfléchi un peu un peu les aurait appelé par exemple capteur1 et capteur2 ou capteurGauche et capteurDroit.
- la sémantique des noms laisse à désirer: appeler une routine d'interruption rpm, c'est quand même moyen.

Ce n'est pas rédhibitoire, mais ça laisse quand même à désirer.

antoine974

hello
commence par croiser les capteurs
Hi!! merci de m'aider!! :) C'est quoi croiser les capteurs? a quoi ca sert? et comment on le fait? merci par avance! :)



On ne peut pas vraiment dire ça, mais il doit afficher les compteurs des deux roues.
Ok merci beaucoup pour cette info au moins je suis sur du fonctionnement du programme!! :)

Ce qui ne va pas:
- On essaie de faire des routines d'interruption le plus courtes possibles et en particulier on n'affiche pas dans les routines d'interruption
- comme l'a dit 3Sigma ça sert à quoi ce qu'il y a dans la loop?
- le nom des variables laisse à désirer. Tu as deux capteurs et tu appelles le premier capteur capteur et le deuxième capt ?????, même chose pour les autres variables. Quelqu'un qui aurait réfléchi un peu un peu les aurait appelé par exemple capteur1 et capteur2 ou capteurGauche et capteurDroit.
- la sémantique des noms laisse à désirer: appeler une routine d'interruption rpm, c'est quand même moyen.
Effectivement, les noms des variables et des routines laissent à désirer mais c'était un test de fonctionnement des capteurs avec les routines d'interruptions, je vais arranger ça, merci :)

dfgh

croise les fils de retour des capteurs ( entre 2 et 3 de l'arduino)
si lors du test de fonctionnement suivant tu as déplacé le problème, c'est que ton capteur est hs ou mal alimenté ou....

antoine974

croise les fils de retour des capteurs ( entre 2 et 3 de l'arduino)
si lors du test de fonctionnement suivant tu as déplacé le problème, c'est que ton capteur est hs ou mal alimenté ou....
je teste ça demain matin (je n'ai pas les capteurs avec moi aujourd'hui) et je vous tiens au courant :)

dfgh

tu testeras aussi ce code
Code: [Select]
volatile int roue_1;
volatile int roue_2;
int old_roue_1=0;
int old_roue_2=0;
int capteur_roue_1 = 2;
int capteur_roue_2 = 3;


void isr_roue_1()
{
  roue_1++;
}
void isr_roue_2()
{
  roue_2++;
}

void setup()
{
  pinMode(capteur_roue_1, INPUT);
  pinMode(capteur_roue_2, INPUT);
  Serial.begin(9600);
  attachInterrupt(0, isr_roue_1, RISING);
  attachInterrupt(1, isr_roue_2, RISING);
  sei();
}

void loop()
{
 if (old_roue_1<roue_1){Serial.println(roue_1);old_roue_1=roue_1;}
 if (old_roue_2<roue_2){Serial.println(roue_2);old_roue_2=roue_2;}
}

antoine974

tu testeras aussi ce code

Quote
volatile int roue_1;
volatile int roue_2;
int old_roue_1=0;
int old_roue_2=0;
int capteur_roue_1 = 2;
int capteur_roue_2 = 3;


void isr_roue_1()
{
  roue_1++;
}
void isr_roue_2()
{
  roue_2++;
}

void setup()
{
  pinMode(capteur_roue_1, INPUT);
  pinMode(capteur_roue_2, INPUT);
  Serial.begin(9600);
  attachInterrupt(0, isr_roue_1, RISING);
  attachInterrupt(1, isr_roue_2, RISING);
  sei();
}

void loop()
{
 if (old_roue_1<roue_1){Serial.println(roue_1);old_roue_1=roue_1;}
 if (old_roue_2<roue_2){Serial.println(roue_2);old_roue_2=roue_2;}
}
je le testerais :) Merci beaucoup de ton aide dfgh!!

antoine974

J'ai essayé les codes, et après analyse à l'oscillo, j'ai trouvé le problème: un mauvais câblage d'un des capteurs effet-hall. Maintenant ça marche nickel! Merci à vous tous pour votre aide!! :)

Go Up