Dim port$(3) ;4 Vorgaben für Serialportnamen (von 0 bis 3 nummeriert) für die Liste CompilerIf #PB_Compiler_OS = #PB_OS_Windows ;Compilation unter Windoof Port$(0)="COM1": Port$(1)="COM2": Port$(2)="COM3": Port$(3)="COM4" #startordner="e:\PB\Lokpara\" CompilerEndIf CompilerIf #PB_Compiler_OS = #PB_OS_Linux ;Compilation unter Linux Port$(0)="/dev/ttyS0": Port$(1)="/dev/ttyS1": Port$(2)="/dev/ttyUSB0": Port$(3)="/dev/ttyUSB1" #startordner="/" ;Hier Startordner des Linux-Systems eintragen CompilerEndIf CompilerIf #PB_Compiler_OS = #PB_OS_MacOS ;Compilation unter MAC-OS Port$(0)="/dev/tty.PL2303-00001004": Port$(1)="/dev/tty.Trude-COM1": Port$(2)="/dev/tty.MSsMacBookAir-Bluetooth": Port$(3)="/dev/tty.Axels-SerialServer" #startordner="/" ;Hier Startordner des Äppel-Systems eintragen CompilerEndIf If OpenWindow(0, 0, 0, 700, 600, "Lokparameter", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) PanelGadget(1,0,0,700,600) AddGadgetItem(1,0,"PC-Dateien") ;ExplorerTreeGadget(2, 10, 10, 490, 530, #pt) ButtonGadget(2,510,250,180,40,"CV-Liste laden") TextGadget(3, 10, 550, 490, 20, "",#PB_Text_Border) ListViewGadget(4,10,10,400,530):GadgetToolTip(4,"Zuletzt eingelesene CVs") ListViewGadget(5,420,10,80,530):GadgetToolTip(5,"Tatsächlicher Inhalt der CVs") ButtonGadget(6,510,300,180,40,"CV-Liste speichern") CanvasGadget(7,521,35,157,132,#PB_Canvas_Border) ;Voransicht Kurve TextGadget(8,510,10,180,200,"Voransicht",#PB_Text_Border|#PB_Text_Center) TextGadget(9,520,180,160,20,"Lok",#PB_Text_Center) AddGadgetItem(1,1,"Lokfahrtregler") ButtonGadget(20, 480, 100, 200, 40, "Schnittstelle testen") ButtonGadget(21, 480, 150, 200, 40, "Lokfahrtregler auslesen") ButtonGadget(22, 480, 200, 200, 40, "Lokfahrtregler beschreiben") TextGadget(23,10,10,460,500,"Report...",#PB_Text_Border|#PB_Text_Center) ListViewGadget(24,10,30,460,530) ;Report ButtonGadget(25,480,10,200,20,"Reportliste speichern") ProgressBarGadget(26,0,565,698,10,0,127) ;Fortschritt ButtonGadget(27,480,40,200,20,"Reportliste löschen") ComboBoxGadget(28,480,80,200,20,#PB_ComboBox_Editable) For i=0 To 3: AddGadgetItem(28,i,port$(i)):Next: SetGadgetText(28,port$(0)) AddGadgetItem(1,2,"Motor-Einstellungen") TextGadget(40,535,360,150,50,"Loknummer",#PB_Text_Border|#PB_Text_Center) TextGadget(41,535,420,150,50,"Trägheit",#PB_Text_Border|#PB_Text_Center) TextGadget(42,535,480,150,50,"PWM-Frequenz",#PB_Text_Border|#PB_Text_Center) TextGadget(43,535,10,150,280,"Motorkennlinie"+Chr(13)+"Fahrstufe | Fahrwert",#PB_Text_Center|#PB_Text_Border) ButtonGadget(51, 545, 230, 130, 50, "Kurve berechnen",#PB_Button_MultiLine) CanvasGadget(50,10,10,514,520,#PB_Canvas_Border) ;Hauptansicht Kurve SpinGadget(60,545,50,60,20,50,50) ;Eckpunkte der Motorkurve SpinGadget(61,615,50,60,20,0,255) SpinGadget(62,545,80,60,20,0,50) SpinGadget(63,615,80,60,20,0,255) SpinGadget(64,545,110,60,20,0,50) SpinGadget(65,615,110,60,20,0,255) SpinGadget(66,545,140,60,20,0,50) SpinGadget(67,615,140,60,20,0,255) SpinGadget(68,545,170,60,20,0,50) SpinGadget(69,615,170,60,20,0,255) SpinGadget(70,545,200,60,20,0,0) SpinGadget(71,615,200,60,20,0,255) SpinGadget(80,585,380,60,20,0,99) ;Loknummer SpinGadget(81,585,440,60,20,5,50) ;Trägheit SpinGadget(82,565,500,100,20,1,4) ;PWM-Frequenz AddGadgetItem(1,3,"Einstellungen Licht und Schaltfunktionen") TextGadget(44,580,5,110,70,"Start mit "+Chr(13)+"Lichtmodus",#PB_Text_Border|#PB_Text_Center) SpinGadget(100,610,50,70,20,1,4) ;Startmodus Licht ;4 Gruppen für Lichtmodi TextGadget(101,5,5,565,135,"Lichtmodus 1 (Taste 8, Schalter nach vorn)",#PB_Text_Border|#PB_Text_Center) TextGadget(102,5,145,565,135,"Lichtmodus 2 (Taste 8, Schalter nach hinten)",#PB_Text_Border|#PB_Text_Center) TextGadget(103,5,285,565,135,"Lichtmodus 3 (Taste 9, Schalter nach vorn)",#PB_Text_Border|#PB_Text_Center) TextGadget(104,5,425,565,135,"Lichtmodus 4 (Taste 9, Schalter nach hinten)",#PB_Text_Border|#PB_Text_Center) If CreateImage(105,165,112,24) ganu=105:Gosub malelok ImageGadget(110,65,25,165,112,ImageID(105)) ImageGadget(111,65,165,165,112,ImageID(105)) ImageGadget(112,65,305,165,112,ImageID(105)) ImageGadget(113,65,445,165,112,ImageID(105)) EndIf If CreateImage(106,165,112,24) ganu=106:Gosub malelok ImageGadget(114,345,25,165,112,ImageID(106)) ImageGadget(115,345,165,165,112,ImageID(106)) ImageGadget(116,345,305,165,112,ImageID(106)) ImageGadget(117,345,445,165,112,ImageID(106)) EndIf CheckBoxGadget(120, 15, 50, 40, 20, "W") ;Lichtmode 1 CheckBoxGadget(121, 15, 70, 40, 20, "R") CheckBoxGadget(122, 240, 50, 40, 20, "W") CheckBoxGadget(123, 240, 70, 40, 20, "R") CheckBoxGadget(124, 305, 50, 40, 20, "W") CheckBoxGadget(125, 305, 70, 40, 20, "R") CheckBoxGadget(126, 520, 50, 40, 20, "W") CheckBoxGadget(127, 520, 70, 40, 20, "R") CheckBoxGadget(130, 15, 140+50, 40, 20, "W") ;Lichtmode 2 CheckBoxGadget(131, 15, 140+70, 40, 20, "R") CheckBoxGadget(132, 240, 140+50, 40, 20, "W") CheckBoxGadget(133, 240, 140+70, 40, 20, "R") CheckBoxGadget(134, 305, 140+50, 40, 20, "W") CheckBoxGadget(135, 305, 140+70, 40, 20, "R") CheckBoxGadget(136, 520, 140+50, 40, 20, "W") CheckBoxGadget(137, 520, 140+70, 40, 20, "R") CheckBoxGadget(140, 15, 280+50, 40, 20, "W") ;Lichtmode 3 CheckBoxGadget(141, 15, 280+70, 40, 20, "R") CheckBoxGadget(142, 240, 280+50, 40, 20, "W") CheckBoxGadget(143, 240, 280+70, 40, 20, "R") CheckBoxGadget(144, 305, 280+50, 40, 20, "W") CheckBoxGadget(145, 305, 280+70, 40, 20, "R") CheckBoxGadget(146, 520, 280+50, 40, 20, "W") CheckBoxGadget(147, 520, 280+70, 40, 20, "R") CheckBoxGadget(150, 15, 420+50, 40, 20, "W") ;Lichtmode 4 CheckBoxGadget(151, 15, 420+70, 40, 20, "R") CheckBoxGadget(152, 240, 420+50, 40, 20, "W") CheckBoxGadget(153, 240, 420+70, 40, 20, "R") CheckBoxGadget(154, 305, 420+50, 40, 20, "W") CheckBoxGadget(155, 305, 420+70, 40, 20, "R") CheckBoxGadget(156, 520, 420+50, 40, 20, "W") CheckBoxGadget(157, 520, 420+70, 40, 20, "R") For j=120 To 157 Step 10 For i=0 To 7 Step 2 GadgetToolTip(i+j,"weißes Licht") GadgetToolTip(i+j+1,"rotes Licht") Next i Next j ;Schaltfunktionen TextGadget(161,580,270,110,90,"Funktion 1"+Chr(13)+"in ms"+Chr(13)+"Aus"+Chr(13)+Chr(13)+"Ein",#PB_Text_Border) TextGadget(162,580,370,110,90,"Funktion 2"+Chr(13)+"in ms"+Chr(13)+"Aus"+Chr(13)+Chr(13)+"Ein",#PB_Text_Border) TextGadget(163,580,470,110,90,"Funktion 3"+Chr(13)+"in ms"+Chr(13)+"Aus"+Chr(13)+Chr(13)+"Ein",#PB_Text_Border) SpinGadget(170,610,300,70,20,0,255) ;CV# 10, Ausschalt-Dauer SF 1 SpinGadget(171,610,330,70,20,0,255) ;CV# 11, Einschalt-Dauer SF 1 SpinGadget(172,610,400,70,20,0,255) ;CV# 12, Ausschalt-Dauer SF 2 SpinGadget(173,610,430,70,20,0,255) ;CV# 13, Einschalt-Dauer SF 2 SpinGadget(174,610,500,70,20,0,255) ;CV# 14, Ausschalt-Dauer SF 3 SpinGadget(175,610,530,70,20,0,255) ;CV# 15, Einschalt-Dauer SF 3 Dim cv.a(127) Dim pwm$(4): pwm$(1)="28,8 kHz":pwm$(2)="3,6 kHz":pwm$(3)="450 Hz":pwm$(4)="112 Hz" SetGadgetState(1,1) Gosub spinit ;Spins initialisieren Gosub kurve ;Motorkennlinie zeichnen Repeat ;Hauptschleife... Event = WaitWindowEvent(20) ;Ereignis (Benutzerhandlung) sichern evnu=EventGadget() ;Nummer des bedienten Schaltelements sichern If Event =#PB_Event_Gadget ;wurde eine Schaltfläche betätigt? Select evnu ;ja, welche Schaltfläche wurde betätigt? Case 2 ;CV-Liste laden dana$=OpenFileRequester("CV-Liste vom PC laden...",#startordner,"*.txt",0) If dana$ ;Dateiname ist vorhanden SetGadgetText(3, dana$) ;Dateiname anzeigen If ReadFile(0,dana$) ;Datei zum Lesen öffnen ClearGadgetItems(4) While Eof(0)=0 ;Daten einlesen t$=ReadString(0) AddGadgetItem(4,-1,t$) l=Len(t$) k=FindString(t$,",",1) k1=FindString(t$,",",k+1) If k1=0 k1=l EndIf cn=Val(Trim(Left(t$,k-1)))&255 cw=Val(Trim(Mid(t$,k+1,l-k))) cv(cn)=cw Wend ;Ende Daten einlesen CloseFile(0) GadgetToolTip(4,"Vom PC eingelesene Datei") Gosub spinit ;Spins initialisieren Gosub kurve ;Motorkennlinie zeichnen Else SetGadgetText(3, "Fehler beim Laden: "+dana$) ;Fehler anzeigen EndIf ;Ende Datei zum Lesen öffnen Else SetGadgetText(3, "Keine Datei geladen "+dana$) ;Fehler anzeigen EndIf ;Ende Dateiname vorhanden Case 5 ;CV-Liste aktualisieren Gosub zeigcv Case 6 ;CV-Liste speichern dana$=SaveFileRequester("CV-Liste in Datei speichern","CV-Liste_"+Str(cv(2)*10+cv(1))+".txt","*.txt",0) If Len(dana$) OpenFile(1,dana$) For i=0 To 127 t$=" "+Str(i)+" , "+Str(cv(i))+" " WriteStringN(1,t$,#PB_Ascii) Next CloseFile(1) EndIf Case 20 ;serielle Schnittstelle suchen Gosub suchlok:CloseSerialPort(sepo) Case 21 ;Lok auslesen ClearGadgetItems(24) ;Reportliste löschen Gosub suchlok AddGadgetItem(24,-1,"----- Lokfahrtregler auslesen -----") AddGadgetItem(24,-1,"Portname: >"+Pona$+"<, Zugriffsnummer "+Str(sepo)) If IsSerialPort(sepo) AddGadgetItem(24,-1,"") AddGadgetItem(24,-1,"Zugriff erfolgt auf "+pona$+":"+Str(sepo)) AddGadgetItem(24,-1,"") fehler=0 If lok ;nur wenn Lok gefunden wurde For i=0 To 127 SetGadgetState(26,i) cmd$=Right(Str(1000+i),3)+Chr(13):Gosub lieslok If p*p1 cn=Val(Mid(text$,p+3,3)) cw=Val(Mid(text$,p1+4,3)) If cn=i cv(cn)=cw Else fehler=fehler+1 EndIf Else fehler=fehler+1 EndIf Next Gosub spinit ;Spins initialisieren Gosub kurve ;Kurve neu zeichnen ClearGadgetItems(4) For i=0 To 127 AddGadgetItem(4,-1,Str(i)+","+Str(cv(i))) Next i SetGadgetText(3,"Vom Lokfahrtregler eingelesene CVs") GadgetToolTip(4,"Vom Lokfahrtregler eingelesene CVs") Else ;keine Lok gefunden fm$="Achtung, an Serialport "+pona$+" wurde keine Lok gefunden..." fehler=1 EndIf Else fm$="Achtung, Serialport "+pona$+" wurde nicht gefunden..." fehler=1 EndIf Gosub zeigfehler Case 22 ;Lok beschreiben ClearGadgetItems(24) ;Reportliste löschen fehler=0 Gosub suchlok AddGadgetItem(24,-1,"Portname: >"+Pona$+"<, Zugriffsnummer "+Str(sepo)) If IsSerialPort(sepo) AddGadgetItem(24,-1,"") AddGadgetItem(24,-1,"Zugriff erfolgt auf "+pona$+":"+Str(sepo)) AddGadgetItem(24,-1,"") fehler=0 If lok For i=0 To 127 SetGadgetState(26,i) cmd$=Right(Str(1000+i),3)+Chr(13):Gosub lieslok cmd$="d":Gosub lieslok cmd$=Right(Str(1000+cv(i)),3)+Chr(13):Gosub lieslok cn=Val(Mid(text$,FindString(text$,"CV:",1)+3,3)) cw=Val(Mid(text$,FindString(text$,"Dez:",1)+4,3)) If cn=i And cw=cv(i) AddGadgetItem(24,-1,"............................Verify ok...") Else fehler=fehler+1 AddGadgetItem(24,-1,"............................Verify Error...") AddGadgetItem(24,-1,Str(i)+" , "+Str(cn)) AddGadgetItem(24,-1,Str(cv(i))+" , "+Str(cw)) EndIf AddGadgetItem(24,-1,"") Next Else fm$="Achtung, an Serialport "+sepo$+" wurde keine Lok gefunden..." fehler=1 EndIf Else fm$="Achtung, Serialport "+sepo$+" wurde nicht gefunden..." fehler=1 EndIf Gosub zeigfehler Case 25 ;RS232-Report speichern dana$=SaveFileRequester("RS232-Report-Liste in Datei speichern","Report_"+".txt","*.txt",0) If Len(dana$) OpenFile(1,dana$) n=CountGadgetItems(24) For i=0 To n-1 t$=GetGadgetItemText(24,i)+Chr(13) WriteString(1,t$,#PB_Ascii) Next CloseFile(1) EndIf Case 27 ClearGadgetItems(24) Case 60,62,64,66,68,70 ;Verschieben der Eckpunkte SetGadgetText(evnu,Str(GetGadgetState(evnu))) SetGadgetState(evnu+1,cv(64+GetGadgetState(evnu))) Gosub kurve Case 61,63,65,67,69,71 ;Ändern der Fahrwerte SetGadgetText(evnu,Str(GetGadgetState(evnu))) Gosub kurve Case 51 ;Kurve neu berechnen For i=60 To 68 Step 2 e=GetGadgetState(i):a=GetGadgetState(i+2) max=GetGadgetState(i+1):min=GetGadgetState(i+3) diw=max-min:din=e-a:schritt.d=diw/din For j=0 To din cv(64+a+j)=min+Int(j*schritt) Next j Next i For j=0 To 3 cv(115+j)=cv(114) Next j cv(63)=cv(64) Gosub kurve Case 80 ;CVs für Loknummer eingestellt cw=GetGadgetState(80) SetGadgetText(80,Str(cw)) cv(2)=Int(cw/10):cv(1)=cw-cv(2)*10 Gosub kurve Case 81 ;CV für Trägheit eingestellt cw=GetGadgetState(81) SetGadgetText(81,Str(cw)) cv(3)=cw Gosub kurve Case 82 ;CV für PWM-Mode eingestellt cw=GetGadgetState(82) SetGadgetText(82,pwm$(cw)) cv(4)=cw Gosub kurve Case 100 ;CV für Startwert Lichtmode eingestellt cw=GetGadgetState(100) SetGadgetText(100,Str(cw)) cv(5)=cw Gosub kurve Case 120 To 127 ;Checkbox Lichtmodus 1 betätigt cn=6:ganu=127:Gosub limo Case 130 To 137 ;Checkbox Lichtmodus 2 betätigt cn=7:ganu=137:Gosub limo Case 140 To 147 ;Checkbox Lichtmodus 3 betätigt cn=8:ganu=147:Gosub limo Case 150 To 157 ;Checkbox Lichtmodus 4 betätigt cn=9:ganu=157:Gosub limo Case 170 To 175 ;Blinkwerte Schaltfunktionen cw=GetGadgetState(evnu) cv(evnu-160)=cw SetGadgetText(evnu,Str(cw*10)) Gosub zeigcv EndSelect EndIf Until Event = #PB_Event_CloseWindow ;Ende Hauptschleife EndIf ;Programm-Fenster wurde geschlossen End ;Programmende zeigcv: ;zeigt aktuelle CVs in rechter Liste ClearGadgetItems(5) For i=0 To 127 AddGadgetItem(5,-1,Str(i)+" "+Str(cv(i))) Next i SetGadgetText(9,"Loknummer "+Str(cv(2)*10+cv(1))) Return kurve: ;Motorkennlinie zeichnen Gosub zeigcv If StartDrawing(CanvasOutput(50)) ;großes Kennlinienfenster zeichnen Box(0,0,515,520,RGB(0,0,50)) For i=1 To 50 ;Gitternetz X LineXY(i*10,0,i*10,518,RGB(0,0,250)) Next i For i=1 To 31 ;Gitternetz Y LineXY(0,i*16,515,i*16,RGB(0,0,250)) Next i LineXY(0,i*16,515,i*16,RGB(250,250,250)) For i=60 To 70 Step 2 If i>60 LineXY(GetGadgetState(i-2)*10+5,511-2*GetGadgetState(i-1),GetGadgetState(i)*10+5,511-2*GetGadgetState(i+1),RGB(200,0,0)) EndIf Circle(GetGadgetState(i)*10+5,511-2*GetGadgetState(i+1),6,RGB(250,0,0)) Next i For i=0 To 50 LineXY(i*10+5,511-2*cv(i+64),(i+1)*10+5,511-2*cv(i+65),RGB(0,200,0)) Circle(i*10+5,511-2*cv(i+64),3,RGB(0,200,0)) Next i StopDrawing() EndIf If StartDrawing(CanvasOutput(7)) ;kleines Kennlinienfenster (Voransicht) zeichnen Box(0,0,515,518,RGB(230,230,210)) For i=0 To 50 LineXY(i*3,128-cv(i+64)/2,(i+1)*3,128-cv(i+65)/2,RGB(0,200,0)) Next i StopDrawing() EndIf Return ;Ende Motorkennlinie zeichnen spinit: ;Initialisierung der Eckpunkt-Positionen SetGadgetState(60,50):SetGadgetText(60,"50"):SetGadgetState(61,cv(64+50)) SetGadgetState(62,42):SetGadgetText(62,"42"):SetGadgetState(61,cv(64+42)) SetGadgetState(64,35):SetGadgetText(64,"35"):SetGadgetState(61,cv(64+35)) SetGadgetState(66,28):SetGadgetText(66,"28"):SetGadgetState(61,cv(64+28)) SetGadgetState(68,20):SetGadgetText(68,"20"):SetGadgetState(61,cv(64+20)) SetGadgetState(70,0):SetGadgetText(70,"0"):SetGadgetState(61,cv(64+0)) ;Code geht weiter... eckpunkte: ;Eckpunkte der Motorkurve übernehmen SetGadgetState(61,cv(GetGadgetState(60)+64)):SetGadgetText(61,Str(GetGadgetState(61))) SetGadgetState(63,cv(GetGadgetState(62)+64)):SetGadgetText(63,Str(GetGadgetState(63))) SetGadgetState(65,cv(GetGadgetState(64)+64)):SetGadgetText(65,Str(GetGadgetState(65))) SetGadgetState(67,cv(GetGadgetState(66)+64)):SetGadgetText(67,Str(GetGadgetState(67))) SetGadgetState(69,cv(GetGadgetState(68)+64)):SetGadgetText(69,Str(GetGadgetState(69))) SetGadgetState(71,cv(GetGadgetState(70)+64)):SetGadgetText(71,Str(GetGadgetState(71))) SetGadgetState(80,cv(1)+10*(cv(2))):SetGadgetText(80,Str(GetGadgetState(80))) SetGadgetState(81,cv(3)):SetGadgetText(81,Str(GetGadgetState(81))) ;Loknummer SetGadgetState(82,cv(4)):SetGadgetText(82,pwm$(cv(4))) ;Trägheit SetGadgetState(100,cv(5)):SetGadgetText(100,Str(GetGadgetState(100))) ;Lichtmodus For j=0 To 3 ;CV# 6 bis 9 (Lichtmodi) in Bits aufdröseln und Checkboxen einstellen cw=cv(j+6):ganu=127+j*10 For i=0 To 7 bs=cw & 1<0 If ReadSerialPortData(sepo,@Byte,1) text$=text$+Chr(Byte) EndIf Wend EndIf AddGadgetItem(24,-1,text$) p=FindString(text$,"CV:",1):p1=FindString(text$,"Dez:",p+1) Return malelok: ;erstellt die Lokskizzen für Lichtmodusanzeige StartDrawing(ImageOutput(ganu)) Box(0,0,165,112,RGB(230,230,210)) DrawingMode(#PB_2DDrawing_Outlined) Circle(60,90,13,RGB(255,0,0)):Circle(60,90,2,RGB(0,0,0)):Circle(60,98,2,RGB(0,0,0)) ;Räder Circle(90,90,13,RGB(255,0,0)):Circle(90,90,2,RGB(0,0,0)):Circle(90,98,2,RGB(0,0,0)) Circle(120,90,13,RGB(255,0,0)):Circle(120,90,2,RGB(0,0,0)):Circle(120,98,2,RGB(0,0,0)) Box(20,45,80,30,RGB(0,0,0)) ;Kessel Box(100,25,45,50,RGB(0,0,0)) ;Führerhaus Box(90,24,65,2,RGB(0,0,0)) ;Dach Führerhaus Box(140,75,5,20,RGB(0,0,0)) ;Schürze hinten Box(25,20,10,25,RGB(0,0,0)) ;Schornstein Box(50,40,15,5,RGB(0,0,0)) ;Dampfdom Box(75,40,15,5,RGB(0,0,0)) ;Sandkasten Box(104,30,15,20,RGB(0,0,0)) ;Fenster Box(125,30,15,45,RGB(0,0,0)) ;Tür Box(127,32,11,18,RGB(0,0,0)) ;Fenster der Tür Box(21,75,20,20,RGB(0,0,0)) ;Zylinder Box(12,75,9,9,RGB(0,0,0)) ;Puffer vorn Box(11,70,2,19,RGB(0,0,0)) ;Pufferplatte vorn Box(144,75,9,9,RGB(0,0,0)) ;Puffer hinten Box(153,70,2,19,RGB(0,0,0)) ;Pufferplatte hinten LineXY(41,85,50,85,RGB(0,0,0)) ;Kolbenstange LineXY(50,85,120,98,RGB(0,0,0)) ;Treibstange Circle(50,85,3,RGB(0,0,0)) ;Kreuzkopf LineXY(60,98,120,98,RGB(0,0,0)) ;Kuppelstange LineXY(30,60,90,60,RGB(255,0,0)) ;Hauptstrich Richtungspfeil For w=0 To 350 Step 36 ;Radspeichen LineXY(60, 90, 60+Cos(Radian(w))*12, 90+Sin(Radian(w))*12, RGB(255,0,0)) LineXY(90, 90, 90+Cos(Radian(w))*12, 90+Sin(Radian(w))*12, RGB(255,0,0)) LineXY(120, 90, 120+Cos(Radian(w))*12, 90+Sin(Radian(w))*12, RGB(255,0,0)) Next w If ganu=105 ;Vorwärtsfahrt LineXY(30,60,40,55,RGB(255,0,0)) ;Richtungspfeil vorwärts LineXY(30,60,40,65,RGB(255,0,0)) ;Richtungspfeil vorwärts Circle(33,15,2,RGB(100,100,100)):Circle(40,7,5,RGB(100,100,100)) Else ;Rückwärtsfahrt LineXY(90,60,80,55,RGB(255,0,0)) ;Richtungspfeil rückwärts LineXY(90,60,80,65,RGB(255,0,0)) ;Richtungspfeil rückwärts Circle(27,15,2,RGB(100,100,100)):Circle(20,7,5,RGB(100,100,100)) EndIf StopDrawing() Return ; IDE Options = PureBasic 4.60 (Windows - x86) ; CursorPosition = 12 ; Executable = Lokpara003a.exe ; DisableDebugger