hello world,
voila j'ai un problème je doit absolument afficher des nombres a centaine (reçu par le serial) en 7seg mais avec une seul arduino (pas de méga ca doit être petit) j'ai eu l'idée de faire comme beaucoup de monde allumer le 7seg-1 afficher le nombre qui va bien quelque ms on allume le deuxième on affiche la dizaine sur le 7seg-2 et ainsi de suite mais la j'ai beau faire ce que je veux mon code ne fonctionne pas quand je veux afficher des nombre supérieur a 99 il m'affiche n'importre quoi et quand c'est un nombre en dessou de 100 il n'y a pas de problème ... j'ai supprimer les delay et ca ne marche toujours pas. voila que je m’arrache les cheveux depuis 2 semaines
/*
_______
| A |
F| |B
|______|
| G |
E| |C
|______|
D
A a la pin 3
B a la pin 4
C a la pin 5
D a la pin 6
E a la pin 7
F a la pin 8
G a la pin 9
*/
#define A 2
#define B 3
#define C 4
#define D 5
#define E 6
#define f 7
#define G 8
#define alim_1 11
#define alim_2 12
#define alim_3 13
char afficheur;
char data[3];
unsigned int nombre;
void setup()
{
pinMode(A, OUTPUT);
pinMode(B, OUTPUT);
pinMode(C, OUTPUT);
pinMode(D, OUTPUT);
pinMode(E, OUTPUT);
pinMode(f, OUTPUT);
pinMode(G, OUTPUT);
pinMode(alim_1, OUTPUT);
pinMode(alim_2, OUTPUT);
pinMode(alim_3, OUTPUT);
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(C, HIGH);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(f, HIGH);
digitalWrite(G, HIGH);
digitalWrite(alim_1, LOW);
digitalWrite(alim_2, LOW);
digitalWrite(alim_3, LOW);
Serial.begin(9600);
}
void loop()
{
if (Serial.available() == 3)
{
Serial.readBytes(data, 3);
nombre = atoi(data);
}
afficher(nombre);
}
void afficher(int chrono)
{
int unite, dizaine, centaine;
if (chrono >= 100)
{
centaine = chrono / 100;
}
dizaine = chrono - (centaine * 100);
dizaine = dizaine / 10;
unite = chrono - (dizaine * 10) - (centaine * 100);
afficheur = (millis() % 15)/5;
if(afficheur = 0)
{
digitalWrite(alim_1, HIGH);
digitalWrite(alim_2, LOW);
digitalWrite(alim_3, LOW);
printchiffre(centaine);
}
if (afficheur = 1)
{
digitalWrite(alim_1, LOW);
digitalWrite(alim_2, HIGH);
digitalWrite(alim_3, LOW);
printchiffre(dizaine);
}
if (afficheur = 2)
{
digitalWrite(alim_1, LOW);
digitalWrite(alim_2, LOW);
digitalWrite(alim_3, HIGH);
printchiffre(unite);
}
}
void printchiffre(char chiffre)
{
switch(chiffre)
{
case 0:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(f, LOW);
digitalWrite(G, HIGH);
break;
case 1:
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(f, HIGH);
digitalWrite(G, HIGH);
break;
case 2:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, HIGH);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(f, HIGH);
digitalWrite(G, LOW);
break;
case 3:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(f, HIGH);
digitalWrite(G, LOW);
break;
case 4:
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(f, LOW);
digitalWrite(G, LOW);
break;
case 5:
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(f, LOW);
digitalWrite(G, LOW);
break;
case 6:
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(f, LOW);
digitalWrite(G, LOW);
break;
case 7:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, HIGH);
digitalWrite(E, HIGH);
digitalWrite(f, HIGH);
digitalWrite(G, HIGH);
break;
case 8:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, LOW);
digitalWrite(f, LOW);
digitalWrite(G, LOW);
break;
case 9:
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(C, LOW);
digitalWrite(D, LOW);
digitalWrite(E, HIGH);
digitalWrite(f, LOW);
digitalWrite(G, LOW);
break;
}
}
merci d'avance de votre aide ivanutsu