Probleme de code pour codeur incremental

je souhaite utiliser deux capteur incrémentaux de part et d'autre d une voiture (droite&gauche) pour calculer la vitesse en cm/s.

J'utilise donc les 2 Interruptions externes de la carte Arduino pour y parvenir . Quand j utilise une seule interruption pour mesurer la vitesse (vitesse droite) avec un seul capteur incrémental je réussis a le faire (Voir code sensor_ohne rad) je peux afficher la vitesse souhaitee (Voir Vitesse droite.PNG)

Mais quand je veux utiliser les deux capteurs simultanément je n'y arrive pas ( Voir Code sensor_ohne rad_2) , je n' arrive pas a lire la vitesse de la roue gauche , elle reste toujours a 0 cm/s (Voir Vitesse gauche.PNG)

les deux codes compilent très bien

Je ne comprends pas pourquoi ?

Merci de votre aide

sensor_ohne_rad.ino (1.83 KB)

sensor_ohne_rad.ino (1.83 KB)

Tu es sûr que ça marche ?

Je te conseille de la lecture sur les interruptions et l'Arduino. Le principe de base y est indiqué :

Il est très important que les ISR aient un temps d’exécution le plus court possible. On ne fera donc aucun calcul compliqué et aucun appel à des fonctions longues comme un affichage sur un écran LCD

Donc il faut éviter les calculs, surtout les flottants.

Au passage, PI existe en C. Tu écris "3,14" ce qui ne doit pas donner le même résultat que "3.14".
De même, je ne suis pas sûr que ceci soit correct:

pos1 = ++pos1 ;

Donc pour ton code, tu devrais restreindre les ISR à une simple incrémentation des compteurs et faire les calculs de vitesse dans la loop.

void front1()   {      // vitesse a droite
  pos1++ ;
}

void front2()   {    // vitesse a gauche
  pos2++ ; 
}

Je ne sais pas si ça marchera mieux, mais ça aura de meilleures chances à mon humble avis.

Bonjour;

Comment sont placé tes actionneurs de capteurs par rapport au roue?
Si tu les a disposé de façon identique sur les roues tu n'activera qu'une voie d'interruption en priorité sur l'autre.

Décale les aimants d'un quart de tour ou 90°. Cela pour avoir une détection de la voie A avant la voie B.
Avec cela tu pourra même déterminer le sens de rotation.

Salutations.

Bonjour ,

le problème est que je n'arrive pas également a lire la vitesse de la roue gauche (vitesse gauche) lorsque je le branche seul a une interruption

@ lesept

j' ai juste essaye de compter les impulses livrées des deux codeurs mais malheureusement je ne peux que lire sur le serial monitor les impulses d 'un seul capteur (Voir uncode.ino)
je suppose donc que le programme code n 'entre pas dans la deuxième Interruption , je ne sais pas pourquoi ?

j ai effectuer les branchements suivant la page suivante :

http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.MaterielCapteurIRoptofourcheLTH301-07

@ manumanu

les actionneurs des capteurs devraient être des roues codeuses . Mais actuellement j essaye d'abord de pouvoir lire/simuler les impulses des deux capteurs et éventuellement lire les vitesses
(Voir Essai.doc)
mais malheureusement je ne peux que lire sur le serial monitor les impulses d 'un seul capteur

uncode.ino (1.54 KB)

Essai.doc (1.51 MB)

Les variables modifiées par les ISR doivent être déclarées volatile

Ludo12:
... j' ai juste essaye de compter les impulses livrées des deux codeurs mais malheureusement je ne peux que lire sur le serial monitor les impulses d 'un seul capteur

Bonjour,

Dans un cas comme ça les trois premières choses à faire sont:

  1. Vérifier le câblage
  2. Revérifier le câblage
  3. Re revérifier le câblage