Hallo,
Ich hab mir gestern die Teile für meinen ersten Bot bestellt, und zwar das Fahrgestell des RP5 und lauter kleinkrams, angesteuert wird das ganze von meiner eigenen Steuerung gesteuert, bestehend vorerst aus nem Mega 16 und nem L293 als Hauptsteuerung, der rest is ersmal uninterresant.
Hab mir folgenden Code geschrieben:
Theoretisch sollte also wenn ich übern UART "drive:1-130-1-120" eingeb auf PWM1a 130 stehen und bei PWM1b 120 im Simulator, tuts aber nich, da steht immer null.Code:'Uart Protokoll: 'Drive : R_l -pwm_l -r_r -pwm_r 'drive:1-120-1-130 $regfile = "m16def.dat" $crystal = 16000000 $baud = 9600 Config Serialin = Buffered , Size = 30 , Bytematch = 13 Declare Sub Serial0charmatch() 'Config Outputs Config Portc.4 = Output 'M_left1a M_left1a Alias Portc.4 Config Portc.5 = Output 'M_left2a M_left2a Alias Portc.5 Config Portc.6 = Output 'M_left3a M_left3a Alias Portc.6 Config Portc.7 = Output 'M_left4a M_left4a Alias Portc.7 'Declare Motor-PWM Config Portb.0 = Output 'm-left-enable M_left_e Alias Portb.0 Config Portb.1 = Output 'm-right-enable M_right_e Alias Portb.1 'Config Inputs Config Portd.2 = Input 'emergency-out Em_out Alias Portc.0 Em_out = 1 'enable pullup 'Config Interrupts Config Int0 = Falling 'fallende Flanke On Int0 On_em_out Enable Int0 Enable Interrupts 'Config Var's Dim Tmp As Byte Dim New_command As String * 30 Dim Incoming_array(5) As String * 30 Dim Command_array(5) As String * 30 Dim New_status As Bit Dim Pwm_1 As Integer Dim Pwm_2 As Integer Dim Drive_command(4) As String * 15 Do If New_command <> "" Then New_command = Ucase(new_command) 'Anweisung aufteilen Tmp = Split(new_command , Command_array(1) , ":") Select Case Command_array(1) Case "DRIVE" Tmp = Split(command_array(2) , Command_array(1) , "-") Drive_command(1) = Command_array(1) Drive_command(2) = Command_array(2) Drive_command(3) = Command_array(3) Drive_command(4) = Command_array(4) Gosub Exc_drive Case Else Print "ERROR: unknown command" End Select New_command = "" End If Loop End Sub Serial0charmatch() Input New_command Noecho Print New_command End Sub Exc_drive: If Drive_command(1) = "1" Then Gosub Forward_left 'drive forward If Drive_command(1) = "0" Then Gosub Backward_left 'drive backward If Drive_command(3) = "1" Then Gosub Forward_right 'drive forward If Drive_command(3) = "0" Then Gosub Backward_right 'drive backward Pwm_1 = Val(drive_command(2)) Pwm_2 = Val(drive_command(4)) Pwm1a = Pwm_1 Pwm1b = Pwm_2 Print "exc_drive " ; Drive_command(1) ; " " ; Drive_command(2) ; " " ; Drive_command(3) ; " " ; Drive_command(4) Return Forward_left: M_left1a = 1 M_left2a = 0 Return Backward_left: M_left1a = 0 M_left2a = 1 Return Forward_right: M_left4a = 1 M_left3a = 0 Return Backward_right: M_left4a = 0 M_left3a = 1 Return
Hat jemand ne Idee warum?
Edit:
Hab den Fehler nach langem überlegen selber gefunden, mal wieder total banal ...
Und zwar wird da beim zweiten splitten das command_array wieder überschrieben.Code:Tmp = Split(new_command , Command_array(1) , ":") Select Case Command_array(1) Case "DRIVE" Tmp = Split(command_array(2) , Command_array(1) , "-")
Hab das ganze nun so gelöst:
Code:Tmp = Split(new_command , Incoming_array(1) , ":") Select Case Incoming_array(1) Case "DRIVE" Tmp = Split(incoming_array(2) , Command_array(1) , "-")
Gruß
David[/code]








Zitieren

Lesezeichen