Bahnhofsuhr

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Sylvia
verheiratet<br>1. PureGolf-Gewinner
Beiträge: 487
Registriert: 29.08.2004 09:42
Wohnort: Old Europe

Beitrag von Sylvia »

@crossroads
Einwandfrei ! So ist gut. :allright:
Basic Pur = PureBasic
chromax
Beiträge: 20
Registriert: 26.09.2004 10:13
Kontaktdaten:

Beitrag von chromax »

KeyKon hat geschrieben:Komisch, bei mir zeigt dir Uhr nur dann richtig wenn ich sie nach 9 Uhr drehe...

KeyKon
Das ist wirklich merkwürdig. Bei einer vollen Stunde wird doch der Minutenzeiger um 0° gedreht, also das Originalbild angezeigt. Der Minutenzeiger zeigt bei einer vollen Stunde auf 12, also auch im Originalbild... :freak:
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Hallo Sylvia, danke für die Links!

Ich wollte mich aus Langeweile auch mal erkundigen, ob und wenn ja, es möglich ist, sich irgendeine eigene Hardware zu bauen und diese dann mit Pb zu steuern.

Ich dachte da beispielsweise an einen simplen Taster/Knopf, der wie eine haustürklingel funktioniert, wenn ich den drücke, bekommt mein PC, an dem die Knlingel angeschlossen ist ein Signal, das ich mit PB abfangen und auswerten kann. Dann kann PB mir zum Beispiel einen Sound abspielen oder gleich schon mal Kaffee vorbereiten, Licht einschalten, den Tisch decken...

Nee, aber mal im Ernst: Findest du, das könnte man (relativ billig und einfach) bewerkstelligen oder sollte ich lieber die Finger davon lassen?
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

@AND51: Nimm eine Tastatur, die kann alles was du da gerade aufgezählt hast :allright: ;)


Naja, bis auf Kaffeekochen jedenfalls <)
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

würde mich aber auch mal interressieren, wie man selbstgebaute Elektronik mit dem PC steuern (auswerten kann) kann.
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Aber einen Tisch decken kann die auch nicht, höchstens den Tisch bedecken.. :-D

Aber mal im Ernst, gibts da keine Möglichkeit? Es muss ja nicht gleich eine Infrarotschranke sein, die den Bildschirm blinken, blitzen und Sound aus vollem Rohr abspielen muss, wenn jemand durch diese Schranke geht.

Ich dachte eher an soetwas wie ein Fernbedienung, an ein Teil, das mir irgendein Licht bzw. ein gerät an einer Steckdose ein- und ausschaltet oder an etwas noch einfacheres, wie zum beispiel eine Klingel.

@ freedi: Ich kann ja wohl schlecht ne tastatur draußen ans HJaus hängen oder? Obwohl, ich könnte ne Passwortabfrage so einbauen, dass man ohne PW nicht ins Haus kommt... :-)
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

ich hätte schon gerne das mit der Lichschranke :wink:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Mir wäre es zumindest für den Anfang egal, ahuptsache, ich muss nicht 100 EUR in irgendwelche Gerätschaften investieren.

Und zum Beispiel würd ich schon gern wissen, zum Beispiel über welchen Anschluss das ganze am besten geschieht. Zur Auswahl stehen ja im Prinzip Serieller Port (COM-Ports), LTP, USB und zumindest bei mir: Bluetooth bis Version 1.2.

Eine Traumvorstellung wäre natürlich noch W-LAN, um trotz Kabelfreiheit einen großen Aktionsraidus zu haben, aber das sind alles nur Träumereien.

Hol' mich mal einer auf den Boden der tatsachen zurück! :-) ;-)
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Sylvia
verheiratet<br>1. PureGolf-Gewinner
Beiträge: 487
Registriert: 29.08.2004 09:42
Wohnort: Old Europe

Beitrag von Sylvia »

Taster? Einfacher gehts kaum noch...

Pin1 mittels Taster an Pin4 verbinden

Schaltplan:
Bild

Code: Alles auswählen

; MVCom vorher in UserLibraries kopieren

ID=ComOpen("Com1:38400,n,8,1",1,1024,1024)

Repeat
	If ComGetDCD(ID)
		Beep_(1000,100); Kaffee machen...
	EndIf

	Delay(200)
ForEver
Nur mal um zu zeigen, dass es einfach ist Kontakt mit der Aussenwelt
aufzunehmen. Die meisten haben computertechnisch noch nie den
virtuellen Raum verlassen.

Die Ausgänge der RS-232 Schnittstelle sind normalerweise
kurzschlussfest und bis 10mA belastbar. Aber trotzdem: Alles was du
machst geschieht auf deine eigene Verantwortung. Ich will damit nichts zu
tun haben. Führe solche Versuche lieber an einem alten Rechner durch
und nicht gleich an deinem Hyperultra-5GHz-QuadPumped-HardCore-Laptop.
Wenn du dir unsicher bist was du tust, dann tu es lieber nicht.
Zuletzt geändert von Sylvia am 11.03.2006 11:00, insgesamt 1-mal geändert.
Basic Pur = PureBasic
Benutzeravatar
Lebostein
Beiträge: 674
Registriert: 13.09.2004 11:31
Wohnort: Erzgebirge

Beitrag von Lebostein »

Hi,

also für eine Heizungssteuerung (sollte klein und ressourcenschonend sein) würde ich auf 3D-Sprites verzichten, da man dafür eine 3D-Grafikkarte und DirectX voraussetzen muss. Warum nimmst du nicht das Beispiel aus dem Codearchiv? Lässt sich noch ne Menge überflüssiger Code rausschmeißen. Ich habs mal für PB4.0 umgeschrieben:

Code: Alles auswählen

; www.purearea.net (Sourcecode collection by cnesm)
; Author: oppi
; Date: 22. November 2003
; OS: Windows
; Demo: No


; Variablen und Konstanten initialisieren

#version="(c) oppi 2003, V1.61"
#appname="ANACLOX"
#ininame="anaclox.ini"

Global width, height, winx, winy
Global box.l,s, PI2.f, PI.f, xm, ym, radius
Global tickcol.l, seccol.l, mincol.l, hcol.l, backcol.l, boxcol.l, jewcol.l, txtcol.l 
Global tid.l, info$, font.l,s.l,os.l
Global flagShowDay.l, flagShowInfo.l, flagOnTop.l

info$="ANACLOX V1.5"

PI2=ATan(1)*8
PI=ATan(1)*4

Structure xy
  xa.l
  ya.l
  xe.l
  ye.l
  xb.l
  yb.l
  xc.l
  yc.l
  xf.l
  yf.l
EndStructure

Global Dim ticks.xy(60)
Global Dim secs.xy(60)
Global Dim mins.xy(60)
Global Dim hrs.xy(60)

;- GUI Konstanten

#win=0
#clock=0

#set=0
#OnTop=0
#ShowDay=1
#ShowInfo=2
#setInfo=3
#default=8
#ver=9

#seccol=11
#mincol=12
#hrscol=13
#jewcol=14
#txtcol=15
#backcol=16
#boxcol=17
#tickcol=18


Procedure LoadPrefs(ininame.s)
  OpenPreferences(ininame)
  info$  =ReadPreferenceString("info",#version)
  width  =ReadPreferenceLong("width",300)  
  height =ReadPreferenceLong("height",300+30)  
  winx   =ReadPreferenceLong("winx",GetSystemMetrics_(#SM_CXSCREEN)/2-width/2) 
  winy   =ReadPreferenceLong("winy",GetSystemMetrics_(#SM_CYSCREEN)/2-height/2)
  boxcol =ReadPreferenceLong("boxcol",$ffffff)
  backcol=ReadPreferenceLong("backcol",$ffffff)
  tickcol=ReadPreferenceLong("tickcol",$aaaaaa)
  jewcol =ReadPreferenceLong("jewcol",$00ffff)
  seccol =ReadPreferenceLong("seccol",$0000ff)
  mincol =ReadPreferenceLong("mincol",$00ff00)
  hcol   =ReadPreferenceLong("hcol",$ff0000)
  txtcol =ReadPreferenceLong("txtcol",$111111)
  flagOnTop=ReadPreferenceLong("ontop",1)
  flagShowDay=ReadPreferenceLong("showday",1)
  flagShowInfo=ReadPreferenceLong("showinfo",1)
  ClosePreferences()
EndProcedure

Procedure savePrefs(ininame.s)
  CreatePreferences(ininame)
  WritePreferenceString("info",info$)
  WritePreferenceLong("width",WindowWidth(#win))  
  WritePreferenceLong("height",WindowHeight(#win))  
  WritePreferenceLong("winx",WindowX(#win)) 
  WritePreferenceLong("winy",WindowY(#win))
  WritePreferenceLong("boxcol",boxcol)
  WritePreferenceLong("backcol",backcol)
  WritePreferenceLong("tickcol",tickcol)
  WritePreferenceLong("jewcol",jewcol)
  WritePreferenceLong("seccol",seccol)
  WritePreferenceLong("mincol",mincol)
  WritePreferenceLong("hcol",hcol)
  WritePreferenceLong("txtcol",txtcol)
  WritePreferenceLong("ontop",flagOnTop)
  WritePreferenceLong("showday",flagShowDay)
  WritePreferenceLong("showinfo",flagShowInfo)
  ClosePreferences()
EndProcedure

Procedure resetPrefs(ininame.s)
  CreatePreferences(ininame)
  ClosePreferences()
  loadPrefs(ininame)  
EndProcedure

Procedure DrawClock()
  xm=WindowWidth(#win)/2 : ym=WindowHeight(#win)/2
  If ym<xm : radius=ym*0.98 : Else : radius=xm*0.98 : EndIf 
  font = LoadFont(0, "comic sans ms", radius*0.06) 
  ;- Koordinaten berechnen
  a.f=PI2 : t=0
  While a >= 0
   ticks(t)\xa=Sin(a+PI)*(radius*0.91)+xm
   ticks(t)\ya=Cos(a+PI)*(radius*0.91)+ym
   ticks(t)\xb=Sin(a+PI+PI/40)*(radius*0.89)+xm
   ticks(t)\yb=Cos(a+PI+PI/40)*(radius*0.89)+ym
   ticks(t)\xc=Sin(a+PI-PI/40)*(radius*0.89)+xm
   ticks(t)\yc=Cos(a+PI-PI/40)*(radius*0.89)+ym
   ticks(t)\xf=Sin(a+PI)*(radius*0.89)+xm
   ticks(t)\yf=Cos(a+PI)*(radius*0.89)+ym
   ticks(t)\xe=Sin(a+PI)*(radius*0.87)+xm
   ticks(t)\ye=Cos(a+PI)*(radius*0.87)+ym

   secs(t)\xa=Sin(a+PI)*(radius*0.10)+xm
   secs(t)\ya=Cos(a+PI)*(radius*0.10)+ym
   secs(t)\xe=Sin(a+PI)*(radius*0.84)+xm
   secs(t)\ye=Cos(a+PI)*(radius*0.84)+ym
   secs(t)\xf=Sin(a+PI)*(radius*0.75)+xm
   secs(t)\yf=Cos(a+PI)*(radius*0.75)+ym

   mins(t)\xa=Sin(a+PI)*(radius*0.10)+xm
   mins(t)\ya=Cos(a+PI)*(radius*0.10)+ym
   mins(t)\xb=Sin(a+PI+PI/40)*(radius*0.60)+xm
   mins(t)\yb=Cos(a+PI+PI/40)*(radius*0.60)+ym
   mins(t)\xc=Sin(a+PI-PI/40)*(radius*0.60)+xm
   mins(t)\yc=Cos(a+PI-PI/40)*(radius*0.60)+ym
   mins(t)\xf=Sin(a+PI)*(radius*0.60)+xm
   mins(t)\yf=Cos(a+PI)*(radius*0.60)+ym
   mins(t)\xe=Sin(a+PI)*(radius*0.80)+xm
   mins(t)\ye=Cos(a+PI)*(radius*0.80)+ym

   hrs(t)\xa=Sin(a+PI)*(radius*0.10)+xm
   hrs(t)\ya=Cos(a+PI)*(radius*0.10)+ym
   hrs(t)\xb=Sin(a+PI+PI/20)*(radius*0.50)+xm
   hrs(t)\yb=Cos(a+PI+PI/20)*(radius*0.50)+ym
   hrs(t)\xc=Sin(a+PI-PI/20)*(radius*0.50)+xm
   hrs(t)\yc=Cos(a+PI-PI/20)*(radius*0.50)+ym
   hrs(t)\xf=Sin(a+PI)*(radius*0.50)+xm
   hrs(t)\yf=Cos(a+PI)*(radius*0.50)+ym
   hrs(t)\xe=Sin(a+PI)*(radius*0.70)+xm
   hrs(t)\ye=Cos(a+PI)*(radius*0.70)+ym

   a-PI2/60
   t+1
  Wend

  ;- Ziffernblatt
  box = CreateImage(0, 2*xm,2*ym) 
  StartDrawing(ImageOutput(0)) 
  Box(0, 0,2*xm, 2*ym,boxcol) 
  Circle(xm,ym,radius,tickcol)
  Circle(xm,ym,radius*0.95,backcol)
  Circle(xm,ym,radius*0.09,tickcol)
  For t=0 To 59
    If t=0 Or t=15 Or t=30 Or t=45
      LineXY(ticks(t)\xa,ticks(t)\ya,ticks(t)\xb,ticks(t)\yb,tickcol)
      LineXY(ticks(t)\xb,ticks(t)\yb,ticks(t)\xe,ticks(t)\ye,tickcol)
      LineXY(ticks(t)\xe,ticks(t)\ye,ticks(t)\xc,ticks(t)\yc,tickcol)
      LineXY(ticks(t)\xc,ticks(t)\yc,ticks(t)\xa,ticks(t)\ya,tickcol)
      FillArea(ticks(t)\xf,ticks(t)\yf,tickcol,jewcol) 
    ElseIf t=5 Or t=10 Or t=20 Or t=25 Or t=35 Or t=40 Or t=50 Or t=55
      Circle(ticks(t)\xf,ticks(t)\yf,radius*0.02,jewcol)
      DrawingMode(4)
      Circle(ticks(t)\xf,ticks(t)\yf,radius*0.02,tickcol)
      DrawingMode(0)
    Else
     LineXY(ticks(t)\xa,ticks(t)\ya,ticks(t)\xe,ticks(t)\ye,tickcol)
    EndIf 
  Next
  StopDrawing()
EndProcedure

Procedure tick(value.l)
  Repeat
    s=Second(Date())
    If s<>os
      m=Minute(Date())
      h=Hour(Date())
      d$=Str(Day(Date()))
      If h > 12 : h=h-12 : EndIf
      h=h*5+m/12
      If h > 60 : h=h-60 : EndIf
     Debug h
      StartDrawing(ImageOutput(0)) 
      DrawingMode(0)

      Circle(xm,ym,radius*0.85,backcol)
      Circle(xm,ym,radius*0.09,tickcol)
      
      If flagShowInfo=#True
      FrontColor(txtcol)
      BackColor(backcol)
      DrawingFont(font)
      l=TextWidth(info$)
      DrawText(xm-l/2,ym+radius*0.40, info$)
      EndIf


      If flagShowDay=#True
      DrawingFont(font)
      l=TextWidth(d$)
      Box(xm-l/2*1.5,ym-radius*0.62,l*1.5,l*1.5,jewcol)
      DrawingMode(4)
      Box(xm-l/2*1.5,ym-radius*0.62,l*1.5,l*1.5,tickcol)

      DrawingMode(0)
      FrontColor(txtcol)
      BackColor(jewcol)
      DrawText(xm-l/2,ym-radius*0.60, d$)
      EndIf


      
;       ;- neue Zeiger malen
      LineXY(mins(m)\xa,mins(m)\ya,mins(m)\xb,mins(m)\yb,mincol)
      LineXY(mins(m)\xb,mins(m)\yb,mins(m)\xe,mins(m)\ye,mincol)
      LineXY(mins(m)\xe,mins(m)\ye,mins(m)\xc,mins(m)\yc,mincol)
      LineXY(mins(m)\xc,mins(m)\yc,mins(m)\xa,mins(m)\ya,mincol)
      FillArea(mins(m)\xf,mins(m)\yf,mincol,mincol) 

      LineXY(hrs(h)\xa,hrs(h)\ya,hrs(h)\xb,hrs(h)\yb,hcol)
      LineXY(hrs(h)\xb,hrs(h)\yb,hrs(h)\xe,hrs(h)\ye,hcol)
      LineXY(hrs(h)\xe,hrs(h)\ye,hrs(h)\xc,hrs(h)\yc,hcol)
      LineXY(hrs(h)\xc,hrs(h)\yc,hrs(h)\xa,hrs(h)\ya,hcol)
      FillArea(hrs(h)\xf,hrs(h)\yf,hcol,hcol) 

      LineXY(secs(s)\xa,secs(s)\ya,secs(s)\xe,secs(s)\ye,seccol)
      Circle(secs(s)\xf,secs(s)\yf,radius*0.03,seccol)

 
      StopDrawing()
      SetGadgetState(0,box)
      os=s
 ;     Delay(800); ein bischen warten, damit repeat until nicht soviel loopt
    EndIf
    Delay(1)  
  ForEver
EndProcedure

Procedure ToggleOnTop()
          If GetMenuItemState(#set,#onTop) = 1
            SetWindowPos_(WindowID(#win),#HWND_TOPMOST,0,0,0,0,#SWP_SHOWWINDOW|#SWP_NOMOVE|#SWP_NOSIZE) 
            flagOnTop=1
          Else
            SetWindowPos_(WindowID(#win),#HWND_NOTOPMOST,0,0,0,0,#SWP_SHOWWINDOW|#SWP_NOMOVE|#SWP_NOSIZE) 
            flagOnTop=0
          EndIf  
EndProcedure

;-main
LoadPrefs(#ininame)
box = CreateImage(0, width,height) 

;-create window
OpenWindow(#win,winx,winy,width,height,#PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget|#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar,#appname)
CreateGadgetList(WindowID(0))
ImageGadget(#clock,0,0,width,height,box)
CreatePopupMenu(#set)
 MenuTitle(#appname+" settings")
 MenuItem(#OnTop,"always on top")
  SetMenuItemState(#set,#onTop,flagOnTop) 
  ToggleOnTop()
 MenuItem(#ShowDay,"show day")
  SetMenuItemState(#set,#Showday,flagShowDay)
 MenuItem(#ShowInfo,"show info")
  SetMenuItemState(#set,#ShowInfo,flagShowInfo)
 OpenSubMenu("change colors")
  MenuItem(#seccol,"seconds")
  MenuItem(#mincol,"minutes")
  MenuItem(#hrscol,"hours")
  MenuItem(#jewcol,"jewels")
  MenuItem(#txtcol,"text")
  MenuItem(#tickcol,"border")
  MenuItem(#backcol,"background")
  MenuItem(#boxcol,"box")
 CloseSubMenu()
 MenuItem(#setInfo,"change info")
 MenuBar()
 MenuItem(#default,"set defaults")
 MenuBar()
 MenuItem(#ver,#version)
  DisableMenuItem(#set,#ver,1)
 

;-draw clock
DrawClock()
tid=CreateThread(@tick(),0)
;SetWindowCallback(@SizeCallback())

;event loop
Repeat
  EventID = WaitWindowEvent()
  Select EventID
    Case #WM_SIZE 
      PauseThread(tid) : os=s-1 : DrawClock() : ResumeThread(tid) 
    Case #WM_RBUTTONDOWN 
      popx.l=WindowX(#win)+WindowMouseX(#win)
      popy.l=WindowY(#win)+WindowMouseY(#win)
      DisplayPopupMenu(0,WindowID(0),popx,popy) 
;      Case #PB_EventGadget
;        GadgetID = EventGadgetID()
;        Select GadgetID
;     
;        EndSelect
    Case #PB_Event_Menu
      MenuID = EventMenu()
      Select MenuID
        Case #onTop
          SetMenuItemState(#set,#onTop,GetMenuItemState(#set,#onTop)!1) 
          ToggleOnTop()  
        Case #ShowDay
          SetMenuItemState(#set,#Showday,GetMenuItemState(#set,#ShowDay)!1) 
          If GetMenuItemState(#set,#ShowDay) = 1 
             flagShowday=#True 
          Else 
            flagShowDay=#False
          EndIf  
        Case #ShowInfo
          SetMenuItemState(#set,#ShowInfo,GetMenuItemState(#set,#ShowInfo)!1) 
          If GetMenuItemState(#set,#ShowInfo) = 1 
             flagShowInfo=#True 
          Else 
            flagShowInfo=#False
          EndIf  
        Case #setInfo
          Repeat
          info$=InputRequester(#appname+" info text edit","your text has: "+Str(Len(info$))+" chars, max. 30 chars are allowed",info$)
          Until Len(info$)<30
          
        Case #default
          ResetPrefs(#ininame)  
          SetWindowPos_(WindowID(#win),#HWND_TOP,winx,winy,width,height,#SWP_SHOWWINDOW) 
          PauseThread(tid) : os=s-1 : DrawClock() : ResumeThread(tid) 
          ToggleOnTop()
        Case #seccol
          seccol=ColorRequester()
        Case #mincol
          mincol=ColorRequester()
        Case #hrscol
          hcol=ColorRequester()
        Case #jewcol
          jewcol=ColorRequester()
          PauseThread(tid) : os=s-1 : DrawClock() : ResumeThread(tid) 
        Case #txtcol
          txtcol=ColorRequester()
        Case #tickcol
          tickcol=ColorRequester()
          PauseThread(tid) : os=s-1 : DrawClock() : ResumeThread(tid) 
        Case #backcol
          backcol=ColorRequester()
          PauseThread(tid) : os=s-1 : DrawClock() : ResumeThread(tid) 
        Case #boxcol
          boxcol=ColorRequester()
          PauseThread(tid) : os=s-1 : DrawClock() : ResumeThread(tid) 
      EndSelect
  EndSelect
Until EventID = #PB_Event_CloseWindow
SavePrefs(#ininame)
CloseWindow(0)
Antworten