Hi,
ich habe aus nem alten Radiowecker folgendes geschlachtet:
Habs jetzt soweit das es mit zwei 74HC595 jedes LED schalten kann.
Ich hab ein wenig rumprobiert wie ich jetzt sinnvoll meine Code schreibe damit ich jede der vier Zahlen per Variable anzeigen kann.
=> Ich möchte die Segmente 1 bis 4 jeweils alle 10 Ziffern darstellen können.
Leider glaube ich, dass ich das viel zu kompliziert mache. Mir fällt aber keine Systematik ein wie ich die jeweiligen Segmente und Zahlen definiere und per Multiplexing abarbeite.
Mein erster Ansatz war:
Ich arbeite ohne Delay und lasse erst die Variable auf der ersten Ziffer, dann der zweiten usw per Multiplexing ablaufen.
- Ich definiere für jedes der 4 Ziffern welche Pins für welche Zahl geschaltet werden müssen und welche Werte ich dem shiftout geben muss.
- Ich arbeite dann halt für jede Ziffer die möglichen Werte durch.
Mal als Beispiel wie ich auf der ersten der 4 Ziffern eine 1 darstelle:
if (segment1 = 1){
// rechts oben wird angezeigt
digitalWrite(a,LOW);
digitalWrite(b,HIGH);
shift11 = B0000010;
shift12 = B0000000;
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, shift12);
shiftOut(dataPin, clockPin, MSBFIRST, shift11);
digitalWrite(latchPin, HIGH);
// rechts unten wird angezeigt
digitalWrite(a,HIGH);
digitalWrite(b,LOW);
shift11 = B0010000;
shift12 = B0000000;
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, shift12);
shiftOut(dataPin, clockPin, MSBFIRST, shift11);
digitalWrite(latchPin, HIGH);
.
.
. und so alle 4 Segmente nacheinander abarbeiten
}
Das ist aber 1 if abfrage für 1 Ziffer und gerade mal 1 Segment. Der Code wird riesig und hat doch viel zu viele if abfragen wenn ich das für jede Ziffer mache.
Also wie fasse ich das am besten zusammen?