-         

Ergebnis 1 bis 2 von 2

Thema: Problem im Programm zur Ansteuerung meines Bots mit RP5 Chas

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    18.04.2010
    Beiträge
    53

    Problem im Programm zur Ansteuerung meines Bots mit RP5 Chas

    Anzeige

    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:

    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
    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.

    Hat jemand ne Idee warum?


    Edit:
    Hab den Fehler nach langem überlegen selber gefunden, mal wieder total banal ...

    Code:
          Tmp = Split(new_command , Command_array(1) , ":")
    
          Select Case Command_array(1)
             Case "DRIVE"
             Tmp = Split(command_array(2) , Command_array(1) , "-")
    Und zwar wird da beim zweiten splitten das command_array wieder überschrieben.

    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]

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    12.02.2010
    Beiträge
    167
    Und was soll das Programm machen....???

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •