Bonjour à tous
Je vais m'arracher les cheveux
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
#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