Binäre Uhr
Verfasst: 10.10.2005 01:05
Hallo!
Mir hat vorhin einer 'ne coole Uhr gezeigt, die gibt's bei ThinkGeek.com zu kaufen. Da die mir aber ein wenig zu teuer ist, begnüge ich mich nun einfach mit der Software-Lösung
Hier erstmal der Link zu der Hardware-Uhr:
http://www.thinkgeek.com/cubegoodies/lights/59e0/
Und hier nun der Code:
Wenn euch die Größe der Uhr nicht paßt, einfach oben Size und Radius entsprechend anpassen!
Ein Klick auf das Fenster ändert übrigens das Farbschema. Auch hier ist es natürlich leicht, neue hinzuzufügen bzw. die alten zu ändern...
Das Lesen der Uhr ist auch nicht allzu schwer. Man muß es sich so vorstellen: Die Uhrzeit wird in 6 Stellen angegeben, z.B. 15:30:42, und jede dieser Stellen bekommt eine vertikale Binär-Säule von max. 4 Bit. Diese werden ganz einfach von unten nach oben gelesen. Auf der ThinkGeek-Homepage ist ein Bild, da wird das ebenfalls erklärt.
Ach, noch was... ich weiß, der Code ist nich grad super optimal geschrieben (besonders wenn die b$-Strings ermittelt werden
), aber darauf kam's mir jetzt auch nicht an 
Viel Spaß!
Mir hat vorhin einer 'ne coole Uhr gezeigt, die gibt's bei ThinkGeek.com zu kaufen. Da die mir aber ein wenig zu teuer ist, begnüge ich mich nun einfach mit der Software-Lösung

Hier erstmal der Link zu der Hardware-Uhr:
http://www.thinkgeek.com/cubegoodies/lights/59e0/
Und hier nun der Code:
Code: Alles auswählen
Dim b$(6)
Global hell, dunkel, hintergrund
Global size, radius
size = 16
radius = 6
Procedure ChangeColor(farbe.b)
Select farbe
Case 0
hell = RGB(255,0,0)
dunkel = RGB(96,0,0)
hintergrund = RGB(0,0,0)
Case 1
hell = RGB(0,96,255)
dunkel = RGB(0,32,96)
hintergrund = RGB(192,192,192)
Case 2
hell = RGB(0,255,0)
dunkel = RGB(0,128,0)
hintergrund = RGB(0,96,0)
EndSelect
EndProcedure
ChangeColor(0)
If OpenWindow(0,0,0,size*9,size*7,#PB_Window_ScreenCentered | #PB_Window_SystemMenu,"Binary Clock")
CreateImage(0,size*9,size*7)
If CreateGadgetList(WindowID(0))
ImageGadget(0,0,0,size*9,size*7,UseImage(0))
Repeat
Event = WindowEvent()
Delay(50)
b$(1) = RSet(Bin(Val(Left(RSet(Str(Hour(Date())),2,"0"),1))),2,"0")
b$(2) = RSet(Bin(Val(Right(RSet(Str(Hour(Date())),2,"0"),1))),4,"0")
b$(3) = RSet(Bin(Val(Left(RSet(Str(Minute(Date())),2,"0"),1))),3,"0")
b$(4) = RSet(Bin(Val(Right(RSet(Str(Minute(Date())),2,"0"),1))),4,"0")
b$(5) = RSet(Bin(Val(Left(RSet(Str(Second(Date())),2,"0"),1))),3,"0")
b$(6) = RSet(Bin(Val(Right(RSet(Str(Second(Date())),2,"0"),1))),4,"0")
StartDrawing(ImageOutput())
Box(0,0,size*9,size*7,hintergrund)
For j = 1 To 6
For i = 1 To Len(b$(j))
If Val(Mid(b$(j),i,1))
Circle(j*size+size,i*size+(4-Len(b$(j)))*size+size,radius,hell)
Else
Circle(j*size+size,i*size+(4-Len(b$(j)))*size+size,radius,dunkel)
EndIf
Next i
Next j
StopDrawing()
SetGadgetState(0,UseImage(0))
If Event = #PB_Event_Gadget
farbe+1
If farbe=3
farbe=0
EndIf
ChangeColor(farbe)
EndIf
Until Event = #PB_Event_CloseWindow
EndIf
EndIf
Ein Klick auf das Fenster ändert übrigens das Farbschema. Auch hier ist es natürlich leicht, neue hinzuzufügen bzw. die alten zu ändern...
Das Lesen der Uhr ist auch nicht allzu schwer. Man muß es sich so vorstellen: Die Uhrzeit wird in 6 Stellen angegeben, z.B. 15:30:42, und jede dieser Stellen bekommt eine vertikale Binär-Säule von max. 4 Bit. Diese werden ganz einfach von unten nach oben gelesen. Auf der ThinkGeek-Homepage ist ein Bild, da wird das ebenfalls erklärt.
Ach, noch was... ich weiß, der Code ist nich grad super optimal geschrieben (besonders wenn die b$-Strings ermittelt werden


Viel Spaß!