Lenox
30.05.2007, 21:26
Hallo Zusammen,
ich habe ein Problem in Bascom.
Und zwar soll ein PC Terminal Befehle an einen Mega8 schicken, und dann von diesem aus über SoftUART an einen Mega32.
Die Verbindung zwischen PC & Mega8 funktioniert.
Allerdings funktioniert das SoftUART zum Mega32 nicht richtig.
Hier das Programm des Mega8:
'//////////Ports Konfigurieren\\\\\\\\\\
Config Serialin = Buffered , Size = 40 'RS232 per Interrupt buffern
Config Serialout = Buffered , Size = 40
Open "COMC.3:9600,8,n,1" For Output As #1 'Txd zum M32
Enable Interrupts
'//////////Aliasnamen <Start>\\\\\\\\\\
Dim Serinput As Byte
Dim Command As String * 24
Dim Items As Byte
Dim Arr(2) As String * 10
'//////////Hauptprogramm <Start>\\\\\\\\\\
Do
Gosub Communicate 'Bluetooth PC Kommunikation
Loop
Communicate:
If Ischarwaiting() = 1 Then
Serinput = Inkey() 'Ein Zeichen holen
While Serinput > 0 ' Solange noch Zeichen in der Warteschleife sind
If Serinput = 13 Then ' Zeile ende
Items = Split(command , Arr(1) , " ")
If Command = "move forward" Then
Print "forward"
Print #1 , "forward"
Print #1 , 13
End If
If Command = "move stop" Then
Print "stop"
Print #1 , "stop"
Print #1 , 13
End If
Command = "" ' Neu initialisieren
Else
Command = Command + Chr(serinput)
End If
Serinput = Inkey()
Wend
End If
Return
Close #1
End
Und hier das des Mega32:
Do
If Ischarwaiting() = 1 Then
Serinput = Inkey() 'Ein Zeichen holen
While Serinput > 0 ' Solange noch Zeichen in der Warteschleife sind
If Serinput = 13 Then ' Zeile ende
'Commands Abfragen
If Command = "forward" Then
Speed_left = 200
End If
If Command = "stop" Then
Speed_left = 1
End If
Command = "" ' Neu initialisieren
Else
Command = Command + Chr(serinput)
End If
Serinput = Inkey()
Wend
End If
Loop
Es wird nur der 1. Befehl ausgeführt.
Also wenn ich am PC forward printe spring der Motor am M32 an.
Wenn ich dann stop printe passiert aber nichts mehr.
ABER: Wenn ich den M32 direkt mit dem PC verbinde geht es.
Es muss also am SoftUART liegen, ich weiß nur überhaupt nicht warum das net geht, bzw nur einmal.
SEROUT hab ich auch schon probiert.
Ich hoffe das Problem ist noch relativ übersichtlich.
Gruß
Lenox
ich habe ein Problem in Bascom.
Und zwar soll ein PC Terminal Befehle an einen Mega8 schicken, und dann von diesem aus über SoftUART an einen Mega32.
Die Verbindung zwischen PC & Mega8 funktioniert.
Allerdings funktioniert das SoftUART zum Mega32 nicht richtig.
Hier das Programm des Mega8:
'//////////Ports Konfigurieren\\\\\\\\\\
Config Serialin = Buffered , Size = 40 'RS232 per Interrupt buffern
Config Serialout = Buffered , Size = 40
Open "COMC.3:9600,8,n,1" For Output As #1 'Txd zum M32
Enable Interrupts
'//////////Aliasnamen <Start>\\\\\\\\\\
Dim Serinput As Byte
Dim Command As String * 24
Dim Items As Byte
Dim Arr(2) As String * 10
'//////////Hauptprogramm <Start>\\\\\\\\\\
Do
Gosub Communicate 'Bluetooth PC Kommunikation
Loop
Communicate:
If Ischarwaiting() = 1 Then
Serinput = Inkey() 'Ein Zeichen holen
While Serinput > 0 ' Solange noch Zeichen in der Warteschleife sind
If Serinput = 13 Then ' Zeile ende
Items = Split(command , Arr(1) , " ")
If Command = "move forward" Then
Print "forward"
Print #1 , "forward"
Print #1 , 13
End If
If Command = "move stop" Then
Print "stop"
Print #1 , "stop"
Print #1 , 13
End If
Command = "" ' Neu initialisieren
Else
Command = Command + Chr(serinput)
End If
Serinput = Inkey()
Wend
End If
Return
Close #1
End
Und hier das des Mega32:
Do
If Ischarwaiting() = 1 Then
Serinput = Inkey() 'Ein Zeichen holen
While Serinput > 0 ' Solange noch Zeichen in der Warteschleife sind
If Serinput = 13 Then ' Zeile ende
'Commands Abfragen
If Command = "forward" Then
Speed_left = 200
End If
If Command = "stop" Then
Speed_left = 1
End If
Command = "" ' Neu initialisieren
Else
Command = Command + Chr(serinput)
End If
Serinput = Inkey()
Wend
End If
Loop
Es wird nur der 1. Befehl ausgeführt.
Also wenn ich am PC forward printe spring der Motor am M32 an.
Wenn ich dann stop printe passiert aber nichts mehr.
ABER: Wenn ich den M32 direkt mit dem PC verbinde geht es.
Es muss also am SoftUART liegen, ich weiß nur überhaupt nicht warum das net geht, bzw nur einmal.
SEROUT hab ich auch schon probiert.
Ich hoffe das Problem ist noch relativ übersichtlich.
Gruß
Lenox