Go Down

Topic: [résolu] affichage du rapport engagé sur une moto (Read 1 time) previous topic - next topic

spoush

Bonjour,

je souhaiterai mettre des LED derrière mon tableau de bord pour afficher le rapport engagé.
j'ai pour cela 3 fils qui me donnent une masse et avec le tableau ci-dessous j'ai l'information du rapport engagé:



             fil_1  fil_2   fil_3
neutre     1      1      1
 la 1            1      1      0
 la 2           1      0      1
 la 3           1      0      0
 la 4           0      1      1
 la 5           0      1      0

le "1" signifie présence de 0V, ou masse
le "0" signifie fil rien ou fil débranché

malheureusement j'ai un BUG car rien ne ce passe sauf quand avec mon doigt je touche les fils en entrée de l'arduino, je pense que j'ai donc mal configuré mes entrées, mais comment les faire passer en tout ou rien comme pour un bouton ?

voilà mon programme sur un UNO :
Code: [Select]
//déclaration des entrées/sorties

const int neutre_c = 13;
const int la_1 = 12;
const int neutre = 11;
const int la_2 = 10;
const int la_3 = 9;
const int la_4 = 8;
const int la_5 = 7;
const int erreur = 6;

const int fil_1 = 5;
const int fil_2 = 4;
const int fil_3 = 3;

int etat_fil_1 = LOW;
int etat_fil_2 = LOW;
int etat_fil_3 = LOW;

void setup()  
{
   pinMode(neutre_c, OUTPUT);  // le neutre est une sortie
   pinMode(la_1, OUTPUT);      
   pinMode(neutre, OUTPUT);  
   pinMode(la_2, OUTPUT);
   pinMode(la_3, OUTPUT);
   pinMode(la_4, OUTPUT);
   pinMode(la_5, OUTPUT);
   pinMode(erreur, OUTPUT);
  
   pinMode(fil_1, INPUT);  // le fil 1 est une entrée
   pinMode(fil_2, INPUT);
   pinMode(fil_3, INPUT);
  
   etat_fil_1 = LOW;  // vrai ou faux état bas
   etat_fil_2 = LOW;
   etat_fil_3 = LOW;
}

void loop()   {
  // etat des sorties avant de commencer
    digitalWrite(neutre_c, LOW);  // Neutre éteint
    digitalWrite(la_1, LOW);    
    digitalWrite(neutre, LOW);  
    digitalWrite(la_2, LOW);
    digitalWrite(la_3, LOW);
    digitalWrite(la_4, LOW);
    digitalWrite(la_5, LOW);
    digitalWrite(erreur, LOW);
    
     etat_fil_1 = digitalRead(fil_1);
     etat_fil_2 = digitalRead(fil_2);
     etat_fil_3 = digitalRead(fil_3);
    
    if ((etat_fil_1 == HIGH) && (etat_fil_2 == HIGH) && (etat_fil_3 == HIGH))
    {
     digitalWrite((neutre_c, HIGH), (neutre, HIGH));
     }
    
    if ((etat_fil_1 == HIGH) && (etat_fil_2 == HIGH) && (etat_fil_3 == LOW))
    {
     digitalWrite(la_1, HIGH);
     }
    
    if ((etat_fil_1 == HIGH) && (etat_fil_2 == LOW) && (etat_fil_3 == HIGH))
    {
     digitalWrite(la_2, HIGH);
      }
      
    if ((etat_fil_1 == HIGH) && (etat_fil_2 == LOW) && (etat_fil_3 == LOW))
    {
     digitalWrite(la_3, HIGH);
      }
      
    if ((etat_fil_1 == LOW) && (etat_fil_2 == HIGH) && (etat_fil_3 == HIGH))
    {
     digitalWrite(la_4, HIGH);
      }
      
    if ((etat_fil_1 == LOW) && (etat_fil_2 == HIGH) && (etat_fil_3 == LOW))
    {
     digitalWrite(la_5, HIGH);
      }
      
    else
    {
     digitalWrite(erreur, HIGH);
      }
 }






Celui qui abandonne une fois, abandonnera toute sa vie...

Christian_R

Je présume que les résistances de pull up ont été oubliées.
Christian

icare

Bonjour,

Pour faire un essai remplace :
Code: [Select]

   pinMode(fil_1, INPUT);  // le fil 1 est une entrée
   pinMode(fil_2, INPUT);
   pinMode(fil_3, INPUT);


par :
Code: [Select]

   pinMode(fil_1, INPUT_PULLUP);  // le fil 1 est une entrée
   pinMode(fil_2, INPUT_PULLUP);
   pinMode(fil_3, INPUT_PULLUP);

@+
2B OR NOT(2B) = FF
Arduino 1.0.5 à 1.8.5 + gEdit + Ubuntu 18.04 LTS

spoush

#3
Mar 10, 2015, 01:16 pm Last Edit: Mar 10, 2015, 01:30 pm by spoush
@ Icare ;  j'ai remplacé, ce qui varie c'est que maintenant il n'y a plus aucuns changement même en touchant les fils d'entrées.

@ Christian_R ; une résistance ? entre le GND et l'entrée ?

ce n'est pas exactement comme cela car j'utilise un shield LED RGB mais bon ...

Celui qui abandonne une fois, abandonnera toute sa vie...

Artouste

@ Icare ;  j'ai remplacé, ce qui varie c'est que maintenant il n'y a plus aucuns changement même en touchant les fils d'entrées.

@ Christian_R ; une résistance ? entre le GND et l'entrée ?

je vous fait un petit dessin avec Fritzing

bonjour
ta "masse" BDV moto est bien reliée à GND arduino ?

spoush

#5
Mar 10, 2015, 01:33 pm Last Edit: Mar 10, 2015, 02:00 pm by spoush
@ artouste : pour le moment c'est juste sur platine d'essais, mais oui plus tard la masse sera commune

@ christian : les résistances de pull up c'est bien pour l'anti-rebond ? si oui ici c'est pas grave non ?
Celui qui abandonne une fois, abandonnera toute sa vie...

vohu

#6
Mar 10, 2015, 01:53 pm Last Edit: Mar 10, 2015, 01:58 pm by vohu
Hmmm, je retire ce que j'ai dit, j'ai pas vu que t'avais activé le pull-up interne

Artouste

#7
Mar 10, 2015, 01:58 pm Last Edit: Mar 10, 2015, 01:58 pm by Artouste
Hmmm, d'après ton schémas, tu n'as pas bien compris ce qu'est le pull-up/pull-down


Pour lire une entrée, il faut qu'elle soit lié au 5v de l'arduino. Seulement, lorsque l'interrupteur n'est pas pressé, le fil en sur la pin en input est "en l'air" il faut donc la relier à la masse avec une resistance 10k


Donc, ton fil à gauche des interrupteurs (le 2ème à partir de la gauche), doit être relié au 5v
Chaque broche en input doit être reliées à la masse au travers d'une resistance 10k
bonjour vohu
attention , icare lui a conseillé de travailler en input_pullup
donc c'est le contact/GND qui transporte l'info
si contact en l'air pin==HIGH (tiré a pullup)
si contact appuyé pin==LOW

vohu

#8
Mar 10, 2015, 01:58 pm Last Edit: Mar 10, 2015, 02:12 pm by vohu
grillé, je venais de voir et corrigé ma réponse.


Par contre son interreupteur n'est pas monté à l'envers par hasard ? 1/4 de tour ?
Par rapport au schémas, il me semble que le contact se fait entre coté droit et gauche, pas haut et bas


spoush

@ vohu c'est la première fois que j'utilise frizting en vérité je plug directement une des entrées dans la masse de la platine .. à l'arrache quoi :-p
Celui qui abandonne une fois, abandonnera toute sa vie...

spoush

#10
Mar 13, 2015, 10:35 am Last Edit: Mar 13, 2015, 10:47 am by spoush
Merci pour l'info sur PULLUP, je ne connaissais pas encore son existance.
J'avais aussi des inversions entre HIGH et LOW mais vous m'aviez donné la bonne direction encore Merci

j'ai encore un couac sur la fonction else ( la LED reste toujours allumé ) mais c'est pas grave je m'en passerai ^_^
Celui qui abandonne une fois, abandonnera toute sa vie...

Go Up