Ich will eine multigeplexte 7segmentanzeige mit millis steuern, jedoch habe ich das Problem, das beide Segmentanzeigen den Wert von der ersten Anzeigen.
#include <Wire.h>
const int Elemente[] = { 8, 7, 6, 5, 4, 3, 2 };
const int Anzeige1 = 9;
const int Anzeige2 = 10;
int score1 = 2;
int score2 = 0;
int pause = 3;
unsigned long aktuell = 0;
int endmillis = 0;
int endmillis2 = 0;
// x: 0 1 2 3 4 5 6 7 8 9
const int Status_a[] = {1, 0, 1, 1, 0, 1, 1, 1, 1, 1};
const int Status_b[] = {1, 1, 1, 1, 1, 0, 0, 1, 1, 1};
const int Status_c[] = {1, 1, 0, 1, 1, 1, 1, 1, 1, 1};
const int Status_d[] = {1, 0, 1, 1, 0, 1, 1, 0, 1, 1};
const int Status_e[] = {1, 0, 1, 0, 0, 0, 1, 0, 1, 0};
const int Status_f[] = {1, 0, 0, 0, 1, 1, 1, 0, 1, 1};
const int Status_g[] = {0, 0, 1, 1, 1, 1, 1, 0, 1, 1};
void setup() {
Wire.begin(8);
Wire.onReceive(receiveEvent);
Serial.begin(9600);
for (int x = 0; x < 7; x++) {
pinMode(Elemente[x], OUTPUT);
}
pinMode(Anzeige1, OUTPUT);
pinMode(Anzeige2, OUTPUT);
}
void loop() {
unsigned long aktuell = millis();
while ((aktuell - endmillis) >= pause) {
aktuell = endmillis;
Anzeige(score1);
digitalWrite(Anzeige2, LOW);
digitalWrite(Anzeige1, HIGH);
Serial.println(score1);
Serial.println(score2);
while ((aktuell - endmillis) >= pause) {
aktuell = endmillis;
Anzeige(score2);
digitalWrite(Anzeige2, HIGH);
digitalWrite (Anzeige1, LOW);
Serial.println(score1);
Serial.println(score2);
}
}
}
void receiveEvent(int howMany) {
score1 = Wire.read();
score2 = Wire.read();
}
void Anzeige(int Ziffer) {
digitalWrite(Elemente[0], Status_a[Ziffer]);
digitalWrite(Elemente[1], Status_b[Ziffer]);
digitalWrite(Elemente[2], Status_c[Ziffer]);
digitalWrite(Elemente[3], Status_d[Ziffer]);
digitalWrite(Elemente[4], Status_e[Ziffer]);
digitalWrite(Elemente[5], Status_f[Ziffer]);
digitalWrite(Elemente[6], Status_g[Ziffer]);
}