Go Down

Topic: Suite de mon projet avec encodeur rotatif et affichage sur 5x 7segments led (Read 866 times) previous topic - next topic

fsxonarduino

Bonjour à tous
Je vais m'arracher les cheveux  :smiley-eek-blue:
J'utilise des 74HC595 en cascade pour n'occuper que 3 sorties de mon arduino Uno
J'ai donc un code qui fonctionne pour lire l'encodeur avec les bornes de 118.00 à 136.00 par incrément de 0.5

J'ai un deuxième code qui affiche les valeurs voulues (valeurs fixes)

J'essaye alors de combiné ces deux codes pour lire mon encodeur et afficher le resultat sur les 5x 7 digit
Il se passe bien quelque chose, mais il ne  m'affiche pas les bonnes valeurs
Code: [Select]
#include <PString.h>
#include <Stdio.h>


const int verrou = 11; //pin 12 du 75HC595
const int donnee = 10; //pin 14 du 75HC595
const int horloge = 12;//pin 11 du 75HC595

char premier = 0;
char deuxieme = 0;
char troisieme = 0;
char quatrieme = 0;
char cinquieme = 0;

float nVal=0;
char buffer[7];

void setup()
{
  //on déclare les broches en sortie
  pinMode(verrou, OUTPUT);
  pinMode(donnee, OUTPUT);
  pinMode(horloge, OUTPUT);
  pinMode(2, INPUT); //A from encoder
  pinMode(3, INPUT); //SW from encoder
  pinMode(4, INPUT); //B from encoder
  attachInterrupt(0, nAnalyse, CHANGE);
  attachInterrupt(1, pushSW, CHANGE);
  digitalWrite(2, HIGH);
  digitalWrite(3, HIGH);
  digitalWrite(4, HIGH);
  Serial.begin(9600);
  Serial.println("Start");
}

void loop()
{  
  //on commence par mettre le verrou
  digitalWrite(verrou, LOW);
  shiftOut(donnee, horloge, LSBFIRST, ~conversionCinquieme(cinquieme)); //cinquieme afficheur
  shiftOut(donnee, horloge, LSBFIRST, ~conversionQuatrieme(quatrieme)); //quatrieme afficheur
  shiftOut(donnee, horloge, LSBFIRST, ~conversionTroisieme(troisieme)); //troisieme afficheur
  shiftOut(donnee, horloge, LSBFIRST, ~conversionDeuxieme(deuxieme)); //deuxieme afficheur
  shiftOut(donnee, horloge, LSBFIRST, ~conversionPremier(premier)); //premier afficheur
  //et on relache le verrou pour mettre à jour les données
  digitalWrite(verrou, HIGH);
}

//Fonctions qui récupère les valeurs à afficher et les convertie
char conversionPremier(char premier){
char resultatPremier = 0;
switch (buffer[0]){
 case 0:
 resultatPremier=250;
 return resultatPremier;
 break;
 case 1:
 resultatPremier=40;
 return resultatPremier;
 break;
 case 2:
 resultatPremier=217;
 return resultatPremier;
 break;
 case 3:
 resultatPremier=121;
 return resultatPremier;
 break;
 case 4:
 resultatPremier=43;
 return resultatPremier;
 break;
 case 5:
 resultatPremier=115;
 return resultatPremier;
 break;
 case 6:
 resultatPremier=243;
 return resultatPremier;
 break;
 case 7:
 resultatPremier=56;
 return resultatPremier;
 break;
 case 8:
 resultatPremier=251;
 return resultatPremier;
 break;
 case 9:
 resultatPremier=123;
 return resultatPremier;
 break;
}
}

char conversionDeuxieme(char deuxieme){
char resultatDeuxieme = 0;
switch (buffer[1]){
 case 0:
 resultatDeuxieme=250;
 return resultatDeuxieme;
 break;
 case 1:
 resultatDeuxieme=40;
 return resultatDeuxieme;
 break;
 case 2:
 resultatDeuxieme=217;
 return resultatDeuxieme;
 break;
 case 3:
 resultatDeuxieme=121;
 return resultatDeuxieme;
 break;
 case 4:
 resultatDeuxieme=43;
 return resultatDeuxieme;
 break;
 case 5:
 resultatDeuxieme=115;
 return resultatDeuxieme;
 break;
 case 6:
 resultatDeuxieme=243;
 return resultatDeuxieme;
 break;
 case 7:
 resultatDeuxieme=56;
 return resultatDeuxieme;
 break;
 case 8:
 resultatDeuxieme=251;
 return resultatDeuxieme;
 break;
 case 9:
 resultatDeuxieme=123;
 return resultatDeuxieme;
 break;
}
}
//Ajout de +4 pour le point décimal
char conversionTroisieme(char troisieme){
char resultatTroisieme = 0;
switch (buffer[2]){
 case 0:
 resultatTroisieme=254; //+4 pour le point
 return resultatTroisieme;
 break;
 case 1:
 resultatTroisieme=44;
 return resultatTroisieme;
 break;
 case 2:
 resultatTroisieme=221;
 return resultatTroisieme;
 break;
 case 3:
 resultatTroisieme=125;
 return resultatTroisieme;
 break;
 case 4:
 resultatTroisieme=47;
 return resultatTroisieme;
 break;
 case 5:
 resultatTroisieme=119;
 return resultatTroisieme;
 break;
 case 6:
 resultatTroisieme=247;
 return resultatTroisieme;
 break;
 case 7:
 resultatTroisieme=60;
 return resultatTroisieme;
 break;
 case 8:
 resultatTroisieme=255;
 return resultatTroisieme;
 break;
 case 9:
 resultatTroisieme=127;
 return resultatTroisieme;
 break;
}
}

char conversionQuatrieme(char quatrieme){
char resultatQuatrieme = 0;
switch (buffer[4]){
 case 0:
 resultatQuatrieme=250;
 return resultatQuatrieme;
 break;
 case 1:
 resultatQuatrieme=40;
 return resultatQuatrieme;
 break;
 case 2:
 resultatQuatrieme=217;
 return resultatQuatrieme;
 break;
 case 3:
 resultatQuatrieme=121;
 return resultatQuatrieme;
 break;
 case 4:
 resultatQuatrieme=43;
 return resultatQuatrieme;
 break;
 case 5:
 resultatQuatrieme=115;
 return resultatQuatrieme;
 break;
 case 6:
 resultatQuatrieme=243;
 return resultatQuatrieme;
 break;
 case 7:
 resultatQuatrieme=56;
 return resultatQuatrieme;
 break;
 case 8:
 resultatQuatrieme=251;
 return resultatQuatrieme;
 break;
 case 9:
 resultatQuatrieme=123;
 return resultatQuatrieme;
 break;
}
}

char conversionCinquieme(char cinquieme){
char resultatCinquieme = 0;
switch (buffer[5]){
 case 0:
 resultatCinquieme=250;
 return resultatCinquieme;
 break;
 case 1:
 resultatCinquieme=40;
 return resultatCinquieme;
 break;
 case 2:
 resultatCinquieme=217;
 return resultatCinquieme;
 break;
 case 3:
 resultatCinquieme=121;
 return resultatCinquieme;
 break;
 case 4:
 resultatCinquieme=43;
 return resultatCinquieme;
 break;
 case 5:
 resultatCinquieme=115;
 return resultatCinquieme;
 break;
 case 6:
 resultatCinquieme=243;
 return resultatCinquieme;
 break;
 case 7:
 resultatCinquieme=56;
 return resultatCinquieme;
 break;
 case 8:
 resultatCinquieme=251;
 return resultatCinquieme;
 break;
 case 9:
 resultatCinquieme=123;
 return resultatCinquieme;
 break;

}
}
void nAnalyse(){
 if(digitalRead(2) == digitalRead(4)){
   nVal=nVal+0.05;
 }else{
   nVal=nVal-0.05;
 }
 if(nVal<118){
   nVal=118;}
 if(nVal>136){
   nVal=136;}
 PString mystring(buffer, sizeof(buffer));
 mystring.print(nVal);
 Serial.print(buffer[0]);
 Serial.print(buffer[1]);
 Serial.print(buffer[2]);
 Serial.print(buffer[4]);
 Serial.print(buffer[5]);
 Serial.println();

}

void pushSW(){
 if(digitalRead(3)){
   //rien à faire
 }
 else{
   Serial.println("Bouton");
 }
}


La sortie sur la console serie est bonne, mais pas l'affichage
A votre bon coeur


Go Up