C# Zahl vom Array Abbilden?
Hallo,
ich versuche momentan eine Digital Uhr in C# zu programmieren.
Folgende Idee:
Ich habe für jede Zahl ein Array hier beispiel die Zahl Null:
int[,] zahlNull = new int[5,5]
{
{ 1,1,1,1,1 },
{ 1,0,0,0,1 },
{ 1,0,0,0,1 },
{ 1,0,0,0,1 },
{ 1,1,1,1,1 },
};
Ich bilde die Zahlen 1 bis 9 im Array ab und anhand DateTime hole ich mir die Zeit.
Je nachdem welche Uhrzeit es momentan ist soll er das richtige Array nehmen und die 1er als Punkte abbilden.
Das so eine Uhr mit Punkten ensteht ähnlich dem auf dem Bild.
Ich habe dieses Modell schon oft gesehen leider finde ich keine wirklichen Informationen im Internet dazu.
3 Antworten
Schau dir mal die Eigenschaften von DateTime an, siehe DateTime Struct (Microsoft Documentation). Dort findest du Hour und Minute. Damit hast du schon deine Zahl für die Stunde und die Minuten.
Die Punkte bekommst du dahin, indem du das Ganze in eine Zeichenkette, also einen String, umbaust. Das könnte zum Beispiel so aussehen:
DateTime now = DateTime.Now;
string anzeige = $"{now.Hour}:{now.Minute}";
In dem Beispiel benutze ich $ - string interpolation (Microsoft C# Referenz), um die Zeichenkette zu formatieren.
wenn du Anzeigen wie hier gezeigt hast, dann sollte das Array anders aussehen. Du zeigst ja in Balken an, nicht in Punkten also eine Ziffer besteht aus maximal 7 Balken. Dafür brauchst du kein Array sondern eine normale 7 Bit Zahl.
Definiere ich die Balken so {Bit0; .. ; Bit6} = {mitte,oben,unten,linksoben,linksunten,rechtsoben,rechtsunten}, dann habe ich für
0 = x1111110 (dez = 126)
1 = x1100000 (dez = 96)
2 = x0110111 (dez = 55)
... usw.
Beim Zugreifen auf die einzelnen Bits dann AND Operatoren nehmen um rauszufinden ob Bit gesetzt ist.
Ich würde meinen, dass du das zusammenbauen kannst, wie du das möchtest. Je mehr Punkte du nimmst, desto besser aufgelöst wirkt es.
Beispiel: Jeder Strich 4 Pixel. Dann hat jede Ziffer die Dimension 8x4 (zwei Striche hoch, einen breit). Du kannst zwischen den beiden senkrechten auch ein Pixel immer auf 0 lassen, dann kommt die Trennung besser rüber.
Und dann hinterlegst du eben, bei welcher Zahl welche Striche auf 1 gesetzt werden (immer alle Pixel gleichzeitig)