Hi
Ich bin gerade dabei einen Tacho zu basteln. Das Selfmade-Shield dazu habe ich schon fast fertig. Man kann schon eine 2-stellige 7-Segment-anzeige ansteuern. Pin-Belegung sieht so aus:
Digital 0: Segmente A (TX und RX brauche ich sowieso nicht, deswegen kann ich die Pins ruhig belegen)
Digital 1: Segmente B
Digital 2: Segmente C
Digital 3: Segmente D
Digital 4: Segmente E
Digital 5: Segmente F
Digital 6: Segmente G
PWM 9: Reed-Kontakt
Digital 10: Anzeige 4 gemeinsame Anode
Digital 11: Anzeige 3 gemeinsame Anode
Digital 12: Anzeige 2 gemeinsame Anode
Digital 13: Anzeige 1 gemeinsame Anode
Bei einer Anzeige funktioniert natürlich alles wunderbar. Wenn ich jetzt jedoch auch eine andere Zahl auf der anderen 7-Segment-Anzeige anzeigen will, klappt es nicht. Will ich auf Anzeige 1 eine 9 anzeigen, und auf Anzeige 2 eine 2, wird auf beiden Anzeigen eine 8 angezeigt. Obwohl ich meiner meinung nach alles richtig gemacht habe. Will ich was auf anzeige 1 anzeigen, Pin 13 auf HIGH, Pin 12 auf LOW, und dann mit pinMode die Segmente auf INPUT. Das selbe dann umgekehrt mit der 2. anzeige, und das ganze dann ganz schnell hintereinnander.
Hier mein Code:
int za[] = {1,2,3,4,5,6,7};
int z0[] = {1,2,3,4,5,6};
int z1[] = {2,3};
int z2[] = {1,2,4,5,7};
int z3[] = {1,2,3,4,7};
int z4[] = {2,3,6,7};
int z5[] = {1,3,4,6,7};
int z6[] = {1,3,4,5,6,7};
int z7[] = {1,2,3};
int z8[] = {1,2,3,4,5,6,7};
int z9[] = {1,2,3,4,6,7};
int anzeige[] = {13,12,11,10};
void setup()
{
pinMode(13, OUTPUT);
pinMode(12, OUTPUT);
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
}
void loop()
{
ZeigeAn(9, 0);
ZeigeAn(2, 1);
}
void ZeigeAn(int w, int a)
{
digitalWrite(anzeige[a], HIGH);
for(int i=0;i<7;i++)
{
pinMode(za[i]-1, INPUT);
}
switch(w)
{
case 0:
for(int i = 0; i < 6; i++)
{
pinMode(z0[i]-1, OUTPUT);
}
break;
case 1:
for(int i = 0; i < 2; i++)
{
pinMode(z1[i]-1, OUTPUT);
}
break;
case 2:
for(int i = 0; i < 5; i++)
{
pinMode(z2[i]-1, OUTPUT);
}
break;
case 3:
for(int i = 0; i < 5; i++)
{
pinMode(z3[i]-1, OUTPUT);
}
break;
case 4:
for(int i = 0; i < 4; i++)
{
pinMode(z4[i]-1, OUTPUT);
}
break;
case 5:
for(int i = 0; i < 5; i++)
{
pinMode(z5[i]-1, OUTPUT);
}
break;
case 6:
for(int i = 0; i < 6; i++)
{
pinMode(z6[i]-1, OUTPUT);
}
break;
case 7:
for(int i = 0; i < 3; i++)
{
pinMode(z7[i]-1, OUTPUT);
}
break;
case 8:
for(int i = 0; i < 7; i++)
{
pinMode(z8[i]-1, OUTPUT);
}
break;
case 9:
for(int i = 0; i < 6; i++)
{
pinMode(z9[i]-1, OUTPUT);
}
break;
}
digitalWrite(anzeige[a],LOW);
}
Könnte mir pls einer sagen was ich falsch mache?
Schonmal danke im Vorraus
MFG, Robdeflop®