Mein erstes PureBasic Programm
Verfasst: 23.11.2012 12:34
Hallo,
Ich bin neu hier und nicht nur ein PureBasic sonder generell ein Programmier- Anfänger.
Das Programm habe ich mit Hilfe von Tutorials und viel Lesen hier im Forum zusammen geschustert,
jetzt komme ich allerdings nicht weiter und hoffe auf eure Hilfe.
Das Programm soll einen Mikrocontroller der über die Serielle Schnittelle am PC angeschlossen ist steuern.
Erstmal soll ein Relais umgeschaltet werden.
Die Zielschaltung Reagiert momentan auf folgende über die Serielle empfangenen werte
49 = Schaltet Relais 1 Ein
50 = Schaltet Relais 1 Aus
51 = Schaltet Relais 2 Ein
52 = Schaltet Relais 2 Aus
Problem:
Nach einem Klick auf den Button "Relais Umschalten" wird im Hauptprogramm die Select Case Anweisung min. drei mal ausgeführt,
sie sollte aber nur ein mal ausgeführt werden.
Ich verstehe einfach nicht wieso kann mir das einer erklären und helfen den Fehler zu beseitigen?
Grüße, Sven9
Ich bin neu hier und nicht nur ein PureBasic sonder generell ein Programmier- Anfänger.
Das Programm habe ich mit Hilfe von Tutorials und viel Lesen hier im Forum zusammen geschustert,
jetzt komme ich allerdings nicht weiter und hoffe auf eure Hilfe.
Das Programm soll einen Mikrocontroller der über die Serielle Schnittelle am PC angeschlossen ist steuern.
Erstmal soll ein Relais umgeschaltet werden.
Die Zielschaltung Reagiert momentan auf folgende über die Serielle empfangenen werte
49 = Schaltet Relais 1 Ein
50 = Schaltet Relais 1 Aus
51 = Schaltet Relais 2 Ein
52 = Schaltet Relais 2 Aus
Problem:
Nach einem Klick auf den Button "Relais Umschalten" wird im Hauptprogramm die Select Case Anweisung min. drei mal ausgeführt,
sie sollte aber nur ein mal ausgeführt werden.
Ich verstehe einfach nicht wieso kann mir das einer erklären und helfen den Fehler zu beseitigen?
Grüße, Sven9
Code: Alles auswählen
If OpenWindow(0,0,0,1224,324,"Com Port Auswahl Test",#PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget) = 0
MessageRequester("Fehler","Fehler konnte kein Fenster oeffnen",0)
EndIf
;Gadget
ButtonGadget(1,22,25,120,30,"Relais Umschalten")
EditorGadget(3,250,170,200,100, #PB_String_ReadOnly)
EditorGadget(4,8,170,200,100, #PB_String_ReadOnly)
TextGadget(5,250,150,200,20,"Eingang")
TextGadget(6,8,150,200,20,"Ausgang")
ComboBoxGadget(11, 24, 120, 118, 20)
;{;Konstanten Deklarieren
#Ein = 49
#Aus = 50
;}
;Variablen Deklarieren
EventID.l
status_relais_1.b
status_relais_2.b
relais_1.b
relais_2.b
Serial_out.s
;{;Suche verfügbare COM-Port's
;Variabeln
Port.s
port_nr.i
res.i
AddGadgetItem(11, -1,"COM-Port Wählen ")
For Port_nr =1 To 16
Port = "COM"+Str(port_nr)
res= OpenSerialPort(#PB_Any, Port , 9600,#PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1, 1)
If IsSerialPort(res)<>0
AddGadgetItem(11, -1,Port)
CloseSerialPort(res)
EndIf
Next
SetGadgetState(11, 0)
;}
;{;Hauptprogramm
port_nr=0
Repeat ; In dieser Schleife werden die Aktionen durchgefuehrt.
EventID = WaitWindowEvent() ; Die Variable EventID wird der Funktion WaitWindowEvent (WarteAufAktion) zugewiesen.
If EventID = #PB_Event_Gadget
If EventGadget() = 11
port_nr = GetGadgetState(11)
Debug port_nr
Port = "COM"+Str(port_nr)
Debug Port
If OpenSerialPort(port_nr, Port , 9600,#PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 1, 1)
Else
MessageRequester("Information", "Konnte Port nicht öffnen")
EndIf
EndIf
EndIf
Select EventGadget()
Case 1 :
If port_nr > 0
If status_relais_1 = 0
status_relais_1 = 1
relais_1 = 49
Else
status_relais_1 = 0
relais_1 = 50
EndIf
serial_out=Str(relais_1)
Gosub Befehl_Senden
Else
MessageRequester("Fehler", "Bitte COM-Port auswählen")
EndIf
EndSelect
If EventID = #PB_Event_CloseWindow ; Wenn der Benutzer die Aktion schliessen drueckt,
Quit = 1 ; wird die Quit Variable aktiviert.
EndIf ; Ende der Abfrage
Until Quit = 1 ; Wenn die Quit Variable aktiviert ist, schliesse das Programm.
CloseSerialPort(port_nr)
End
;}
Befehl_Senden:
z +1
Debug"z" +Str(z)
Debug "Serial_out = " +serial_out
AddGadgetItem(4,0,serial_out)
WriteSerialPortString(port_nr, serial_out+Chr(13))
Delay(1000)
If z>=6
ClearGadgetItems(4)
z=0
EndIf
Return