Seite 2 von 4

Verfasst: 06.03.2006 13:55
von Sylvia
@crossroads
Einwandfrei ! So ist gut. :allright:

Verfasst: 06.03.2006 14:13
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:

Verfasst: 06.03.2006 15:08
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?

Verfasst: 06.03.2006 19:47
von freedimension
@AND51: Nimm eine Tastatur, die kann alles was du da gerade aufgezählt hast :allright: ;)


Naja, bis auf Kaffeekochen jedenfalls <)

Verfasst: 06.03.2006 19:53
von Batze
würde mich aber auch mal interressieren, wie man selbstgebaute Elektronik mit dem PC steuern (auswerten kann) kann.

Verfasst: 06.03.2006 19:56
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... :-)

Verfasst: 06.03.2006 20:02
von Batze
ich hätte schon gerne das mit der Lichschranke :wink:

Verfasst: 06.03.2006 20:21
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! :-) ;-)

Verfasst: 07.03.2006 12:57
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.

Verfasst: 07.03.2006 14:23
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)