7 Led Gadget

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
DROOPY
Beiträge: 52
Registriert: 05.03.2005 00:20

7 Led Gadget

Beitrag von DROOPY »

Easyly create a seven led gadget

Code: Alles auswählen

; PureBasic 3.93 
; Idea from Localmotion34 

; De préférence utilisez un gadget ayant un rapport de 11 * 13 ex 110 / 130

Structure SevenSegmentLed 
  x.l 
  y.l 
  width.l 
  height.l 
  Image.l 
  Gadget.l 
  value.l
  point.l
  color1.l 
  color2.l 
  BackgroundColor.l
EndStructure 

;{ Datasection
DataSection
Led:
; Segment a
Data.l 1,1,1,-1,6,0,1,1,-1,1,-6,0,-1,-1,0,0
; Segment g
Data.l 1,6,1,-1,6,0,1,1,-1,1,-6,0,-1,-1,0,0
; Segment d
Data.l 1,11,1,-1,6,0,1,1,-1,1,-6,0,-1,-1,0,0
; Segment f
Data.l 1,1,1,1,0,3,-1,1,-1,-1,0,-3,1,-1,0,0
; Segment b
Data.l 9,1,1,1,0,3,-1,1,-1,-1,0,-3,1,-1,0,0
; Segment e
Data.l 1,6,1,1,0,3,-1,1,-1,-1,0,-3,1,-1,0,0
; Segment c
Data.l 9,6,1,1,0,3,-1,1,-1,-1,0,-3,1,-1,0,0
; Point
Data.l 10,11,1,1,-1,1,-1,-1,1,-1,0,0
; Fin dessin Leds
Data.l 0,0

SegmentA:
Data.l 5,1
SegmentB:
Data.l 9,3
SegmentC:
Data.l 9,8
SegmentD:
Data.l 5,11
SegmentE:
Data.l 1,9
SegmentF:
Data.l 1,4
SegmentG:
Data.l 5,6
SegmentP:
Data.l 10,12

EndDataSection
;}

ProcedureDLL SevenSegmentLed(x,y,width,height,color1,color2,BackgroundColor) 
  
  ; Initialise the LinkedList the first call 
  Static Init 
  If Init=0 
    NewList SevenSegmentLedLList.SevenSegmentLed() 
  EndIf 
  Init=1 
  
  ; Fill the Structure 
  AddElement(SevenSegmentLedLList()) 
  SevenSegmentLedLList()\x=x 
  SevenSegmentLedLList()\y=y 
  SevenSegmentLedLList()\width=width 
  SevenSegmentLedLList()\height=height 
  SevenSegmentLedLList()\color1=color1 
  SevenSegmentLedLList()\color2=color2 
  SevenSegmentLedLList()\BackgroundColor=BackgroundColor
  SevenSegmentLedLList()\Image=CreateImage(#PB_Any,width,height) 
  
  PWidth.f=SevenSegmentLedLList()\width/11
  PHeight.f=SevenSegmentLedLList()\height/13
  
  
  ;/ Dessine les Leds
  UseImage(SevenSegmentLedLList()\Image)
  StartDrawing(ImageOutput())
  Box(0,0,SevenSegmentLedLList()\width,SevenSegmentLedLList()\height,SevenSegmentLedLList()\BackgroundColor)
  Restore  Led
  Repeat
    Read x
    Read y
    If x=0 And y=0 : Break : EndIf
    Repeat
      Read a
      Read b
      If a=0 And b=0 : Break : EndIf
      Line(x*PWidth,y*PHeight,a*PWidth,b*PHeight,color1)
      x=x+a : y=y+b
    ForEver
  ForEver
  StopDrawing()
  
  ; create the gadget & show the image 
  SevenSegmentLedLList()\Gadget=ImageGadget(#PB_Any,SevenSegmentLedLList()\x,SevenSegmentLedLList()\y,width,height,UseImage(SevenSegmentLedLList()\Image),#PB_Image_Border) 
  
  ; Return the gadget id 
  ProcedureReturn ListIndex(SevenSegmentLedLList()) 
  
EndProcedure 

ProcedureDLL SevenSegmentLedSet(id,value) 
  
  SelectElement(SevenSegmentLedLList(),id) 
  
  SevenSegmentLedLList()\value=value 
  
  PWidth.f=SevenSegmentLedLList()\width/11
  PHeight.f=SevenSegmentLedLList()\height/13
  
  ;/ Allume les Segments
  UseImage(SevenSegmentLedLList()\Image)
  StartDrawing(ImageOutput())
  
  ; Eteind les segments
  Restore SegmentA
  For n=1 To 8
    Read a
    Read b
    FillArea(a*PWidth,b*PHeight,SevenSegmentLedLList()\color1,SevenSegmentLedLList()\BackgroundColor)
  Next
  
  Select value
    Case 0
      temp.s="abcdef"
    Case 1
      temp="bc"
    Case 2
      temp="abged"
    Case 3
      temp="abgcd"
    Case 4
      temp="fbgc"
    Case 5
      temp="afgcd"
    Case 6
      temp="afedgc"
    Case 7
      temp="abc"
    Case 8
      temp="abcdefg"
    Case 9
      temp="abcdfg"
  EndSelect
  
  ; Gestion du point
  If SevenSegmentLedLList()\point=1
    temp+"p"
  EndIf
  
  
  For n=1 To Len(temp)
    Select Mid(temp,n,1)
      Case "a"
        Restore SegmentA
      Case "b"
        Restore SegmentB
      Case "c"
        Restore SegmentC
      Case "d"
        Restore SegmentD
      Case "e"
        Restore SegmentE
      Case "f"
        Restore SegmentF
      Case "g"
        Restore SegmentG
      Case "p"
        Restore SegmentP
     
    EndSelect
    
    
    Read a
    Read b
    
    FillArea(a*PWidth,b*PHeight,SevenSegmentLedLList()\color1,SevenSegmentLedLList()\color2)
  Next
  
    StopDrawing()
      
  SetGadgetState(SevenSegmentLedLList()\Gadget,UseImage(SevenSegmentLedLList()\Image)) 
  
EndProcedure 

ProcedureDLL SevenSegmentLedGet(id) 
  SelectElement(SevenSegmentLedLList(),id) 
  ProcedureReturn SevenSegmentLedLList()\value 
EndProcedure 

Procedure SevenSegmentLedEvent(id) 
  SelectElement(SevenSegmentLedLList(),id) 
  ProcedureReturn SevenSegmentLedLList()\Gadget 
EndProcedure  

Procedure SevenSegmentLedPoint(id,light)
  SelectElement(SevenSegmentLedLList(),id) 
  SevenSegmentLedLList()\point=light
EndProcedure



;/ Test 
OpenWindow(0,0,0,580,290,#PB_Window_SystemMenu|#PB_Window_ScreenCentered ,"7 Segment Led")
CreateGadgetList(WindowID(0))
SevenSegmentLed(10,10,220,260,8404992,16776960,10485760)
SevenSegmentLed(250,10,110,130,4227072,65280,4210688)
SevenSegmentLed(400,10,55,65,1118481,255,0)
SevenSegmentLed(455,10,55,65,1118481,255,0)
SevenSegmentLed(510,10,55,65,1118481,255,0)

For n= 0 To 9
  For i=1 To 4
    SevenSegmentLedSet(i,Random(9))
    SevenSegmentLedPoint(i,Random(1))
  Next i 
  
  SevenSegmentLedSet(0,n)
  
  Beep_(1000,25)
  Delay(500)
Next n
Kekskiller
Beiträge: 752
Registriert: 14.09.2004 21:39
Kontaktdaten:

Beitrag von Kekskiller »

Nice.
walker
Beiträge: 278
Registriert: 29.08.2004 18:39
Wohnort: Bayern

Beitrag von walker »

Hi,

damit es auch unter Linux läuft, muß der Beep_ (dritt-letzte Zeile = Win-Api) entfernt und ein While Windowevent():Wend hinzugefügt werden. Siehe auch http://forums.purebasic.com/english/vie ... 1099#91099

cu
Ulf
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

7 LED :? Didn't hear of that before, you mean the 7 segment liquid crystal display ;) .
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
DROOPY
Beiträge: 52
Registriert: 05.03.2005 00:20

Beitrag von DROOPY »

No led was used in electronic before LCD

http://www.aaroncake.net/circuits/counter.htm
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

sure, but I don't know any tall LED O_o. Never seen a LED Display looking like an 7 segment display.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
traumatic
Beiträge: 478
Registriert: 27.11.2004 15:42

Beitrag von traumatic »

DarkDragon: /:->

Droopy: Nice code, thanks for sharing! :D
RaVeN99
Beiträge: 310
Registriert: 29.08.2004 15:26
Wohnort: Weiden i.d.OPF
Kontaktdaten:

Beitrag von RaVeN99 »

@DarkDragon: http://www.electronic-kits-and-projects ... /q3129.jpg
Hier nochmal n Bild wo son Bauteil verbaut iss...

@Droopy:
Good job!
Thx for sharing it ^^


Greetz
RaVeN
AMD Athlon64 3000+, 1024MB DDR-RAM, Geforce 8600GT, WinXP SP2, DirectX 9.0c, PureBasic 3.94
Benutzeravatar
mueckerich
Beiträge: 220
Registriert: 13.09.2004 11:33
Wohnort: Am schönsten Flecken der Erde, zwischen PC und Motorrad

Beitrag von mueckerich »

@DarkDragon:
Never seen a LED Display looking like an 7 segment display.
:o Die Kids, kennen halt nur den neuen Kram. :twisted:

Tja mein Junge, in der rauhen Wirklichkeit :twisted: ist es so, das die 7-Segment LED wesentlich früher auf dem Markt waren als die LCD. Hatte mitte der 70er einen der ersten Taschenrechner von TI :o (damals sauteuer ca. 200 DM, und nur die 4 Grundrechenarten. Super HighTech!) geschenkt bekommen. Da war nur einen 7-Segment LED Anzeige vorhanden und LCD waren einfach unbekannt, die kamen erst später.
"Wenn Sie glauben, mich verstanden zu haben, dann habe ich mich falsch ausgedrückt" ( Alan Greenspan)
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

mueckerich hat geschrieben:@DarkDragon:
Never seen a LED Display looking like an 7 segment display.
:o Die Kids, kennen halt nur den neuen Kram. :twisted:

Tja mein Junge, in der rauhen Wirklichkeit :twisted: ist es so, das die 7-Segment LED wesentlich früher auf dem Markt waren als die LCD. Hatte mitte der 70er einen der ersten Taschenrechner von TI :o (damals sauteuer ca. 200 DM, und nur die 4 Grundrechenarten. Super HighTech!) geschenkt bekommen. Da war nur einen 7-Segment LED Anzeige vorhanden und LCD waren einfach unbekannt, die kamen erst später.
Stimmt 1971 konnte man erst richtig gute LCD's erstellen ;) Dank Schadt und Helfrich.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Antworten