Firmware yornbot

Aus C3MAWiki

Die erste vorzeigbare Version v0.1a!

Declare Sub Go() Declare Sub Wenden() Declare Function Tastenabfrage() As Byte


$regfile = "m32def.dat"


Dim I As Integer Dim N As Integer Dim Ton As Integer Dim Wsen As Word Dim Wbump As Word


$crystal = 16000000 'Quarzfrequenz $baud = 9600

Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung

Config Pina.7 = Input 'Für Tastenabfrage Porta.7 = 1 'Pullup Widerstand ein

Dim Taste As Byte


'Ports für linken Motor Config Pinc.6 = Output 'Linker Motor Kanal 1 Config Pinc.7 = Output 'Linker Motor Kanal 2 Config Pind.4 = Output 'Linker Motor PWM 'Ports für rechten Motor Config Pinb.0 = Output 'Rechter Motor Kanal 1 Config Pinb.1 = Output 'Rechter Motor Kanal 2 Config Pind.5 = Output 'Rechter Motor PWM Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Pwm1a = 0 Pwm1b = 0 Tccr1b = Tccr1b Or &H02 'Prescaler = 8

Print Print "yornbot v-0.1a" Print

Function Tastenabfrage() As Byte Local Ws As Word

  Tastenabfrage = 0
  Ton = 600
  Start Adc
  Ws = Getadc(7)
  If Ws < 500 Then
     Select Case Ws
        Case 400 To 450
           Tastenabfrage = 1
           Ton = 550
           Call Go
        Case 330 To 380
           Tastenabfrage = 2
           Ton = 500
           Call Wenden
        Case 260 To 305
           Tastenabfrage = 3
           Ton = 450
        Case 180 To 220
           Tastenabfrage = 4
           Ton = 400
        Case 90 To 130
           Tastenabfrage = 5
            Ton = 350
     End Select
     Sound Portd.7 , 400 , Ton                             'BEEP

Waitms 100

End

  End If

End Function

Sub Go() Print "*GO*" 'Linker Motor ein

  Portc.6 = 1                                              'bestimmt Richtung
  Portc.7 = 0                                              'bestimmt Richtung
  Portd.4 = 1                                              'Linker Motor EIN
  'Rechter Motor ein
  Portb.0 = 1                                              'bestimmt Richtung rechter Motor
  Portb.1 = 0                                              'bestimmt Richtung rechter Motor
  Portd.5 = 1                                              'rechter Motor EIN


  I = 200
  Do
     Pwm1a = I
     Pwm1b = I
     Waitms 20
     I = I + 20
  Loop Until I > 281
'  Do

'Wbump = Getadc(1) 'If Wbump > 500 Then 'Print "*WENDEN - I think we hit something!*" 'Call Wenden

'End If

Do Wsen = Getadc(0) 'Print 'Print "**** Sharp Sensor Test *****" 'Print "**** ADC-Wert: " ; Wsen 'Waitms 100 If Wsen > 200 Then Print "*WENDEN - Object in range!*" Call Wenden

End If

Loop

End Sub


Sub Wenden()

  'Linker Motor ein
  Portc.6 = 0                                              'bestimmt Richtung
  Portc.7 = 1                                              'bestimmt Richtung
  Portd.4 = 1                                              'Linker Motor EIN
  'Rechter Motor ein
  Portb.0 = 0                                              'bestimmt Richtung rechter Motor
  Portb.1 = 1                                              'bestimmt Richtung rechter Motor
  Portd.5 = 1                                              'rechter Motor EIN
  I = 200
  Do
     Pwm1a = I
     Pwm1b = I
     Waitms 20
     I = I + 20
  Loop Until I > 281
     Wait 1
     Pwm1a = 0
     Pwm1b = 0

'Linker Motor ein

  Portc.6 = 0                                              'bestimmt Richtung
  Portc.7 = 1                                              'bestimmt Richtung
  Portd.4 = 1                                              'Linker Motor EIN
  'Rechter Motor ein
  Portb.0 = 1                                              'bestimmt Richtung rechter Motor
  Portb.1 = 0                                              'bestimmt Richtung rechter Motor
  Portd.5 = 1                                              'rechter Motor EIN
  I = 200
  Do
     Pwm1a = I
     Pwm1b = I
     Waitms 20
     I = I + 20
  Loop Until I > 281
     Wait 1
     Pwm1a = 0
     Pwm1b = 0
  Call Go
  End Sub

\\


Die Version mit besserer Navigation v0.2a!

'v-0.2a Declare Sub Go() Declare Sub Wenden() Declare Sub Links() Declare Sub Rechts() Declare Function Tastenabfrage() As Byte


$regfile = "m32def.dat"


Dim I As Integer Dim I2 As Integer Dim N As Integer Dim Ton As Integer Dim Wsen As Integer Dim Wre As Integer Dim Wli As Integer Dim Wr As Integer Dim Wl As Integer Dim W0 As Integer


$crystal = 16000000 'Quarzfrequenz $baud = 9600

Config Adc = Single , Prescaler = Auto 'Für Tastenabfrage und Spannungsmessung

Config Pina.7 = Input 'Für Tastenabfrage Porta.7 = 1 'Pullup Widerstand ein

Dim Taste As Byte


'Ports für linken Motor Config Pinc.6 = Output 'Linker Motor Kanal 1 Config Pinc.7 = Output 'Linker Motor Kanal 2 Config Pind.4 = Output 'Linker Motor PWM 'Ports für rechten Motor Config Pinb.0 = Output 'Rechter Motor Kanal 1 Config Pinb.1 = Output 'Rechter Motor Kanal 2 Config Pind.5 = Output 'Rechter Motor PWM Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down Pwm1a = 0 Pwm1b = 0 Tccr1b = Tccr1b Or &H02 'Prescaler = 8

Print "yornbot v-0.2a" Print

Function Tastenabfrage() As Byte Local Ws As Word

  Tastenabfrage = 0
  Ton = 600
  Start Adc
  Ws = Getadc(7)
  If Ws < 500 Then
     Select Case Ws
        Case 400 To 450
           Tastenabfrage = 1
           Ton = 550
           Call Go
        Case 330 To 380
           Tastenabfrage = 2
           Ton = 500
           Call Wenden
        Case 260 To 305
           Tastenabfrage = 3
           Ton = 450
        Case 180 To 220
           Tastenabfrage = 4
           Ton = 400
        Case 90 To 130
           Tastenabfrage = 5
            Ton = 350
     End Select
     Sound Portd.7 , 400 , Ton                             'BEEP

Waitms 100

End

  End If

End Function

Sub Go() Print "*GO*" 'Linker Motor ein

  Portc.6 = 1                                              'bestimmt Richtung
  Portc.7 = 0                                              'bestimmt Richtung
  Portd.4 = 1                                              'Linker Motor EIN

  'Rechter Motor ein
  Portb.0 = 1                                              'bestimmt Richtung rechter Motor
  Portb.1 = 0                                              'bestimmt Richtung rechter Motor
  Portd.5 = 1                                              'rechter Motor EIN


  I = 200
  Do
     Pwm1a = I
     Pwm1b = I
     Waitms 20
     I = I + 20
  Loop Until I > 281



Do

W0 = Getadc(0) Wr = Getadc(1) Wl = Getadc(2) Wsen = W0 + Wr Wsen = Wsen + Wl Wre = W0 + Wr Wli = W0 + Wl If Wsen > 1000 Then Print "*WENDEN - Blocked!*" Call Wenden End If If Wre > 400 Then Print "*HINDERNISS RECHTS- Ausweichen nach links!*" Call Links End If If Wli > 400 Then Print "*HINDERNISS LINKS- Ausweichen nach rechts!*" Call Rechts End If

Loop End Sub


Sub Links()

        'Linker Motor ein
  Portc.6 = 1                                              'bestimmt Richtung
  Portc.7 = 0                                              'bestimmt Richtung
  Portd.4 = 1                                              'Linker Motor EIN

  'Rechter Motor ein
  Portb.0 = 1                                              'bestimmt Richtung rechter Motor
  Portb.1 = 0                                              'bestimmt Richtung rechter Motor
  Portd.5 = 1                                              'rechter Motor EIN

  I = 281
  I2 = 101
     Pwm1a = I2
     Pwm1b = I
     Waitms 20

     Wait 1
     Pwm1a = 0
     Pwm1b = 0
  Call Go
  End Sub


Sub Rechts()

        'Linker Motor ein
  Portc.6 = 1                                              'bestimmt Richtung
  Portc.7 = 0                                              'bestimmt Richtung
  Portd.4 = 1                                              'Linker Motor EIN

  'Rechter Motor ein
  Portb.0 = 1                                              'bestimmt Richtung rechter Motor
  Portb.1 = 0                                              'bestimmt Richtung rechter Motor
  Portd.5 = 1                                              'rechter Motor EIN

  I = 101
  I2 = 281
     Pwm1a = I2
     Pwm1b = I
     Waitms 20

     Wait 1
     Pwm1a = 0
     Pwm1b = 0
  Call Go
  End Sub


Sub Wenden()

  'Linker Motor ein
  Portc.6 = 0                                              'bestimmt Richtung
  Portc.7 = 1                                              'bestimmt Richtung
  Portd.4 = 1                                              'Linker Motor EIN

  'Rechter Motor ein
  Portb.0 = 0                                              'bestimmt Richtung rechter Motor
  Portb.1 = 1                                              'bestimmt Richtung rechter Motor
  Portd.5 = 1                                              'rechter Motor EIN

  I = 200
  Do
     Pwm1a = I
     Pwm1b = I
     Waitms 20
     I = I + 20
  Loop Until I > 281
     Wait 1
     Pwm1a = 0
     Pwm1b = 0

'Linker Motor ein

  Portc.6 = 0                                              'bestimmt Richtung
  Portc.7 = 1                                              'bestimmt Richtung
  Portd.4 = 1                                              'Linker Motor EIN

  'Rechter Motor ein
  Portb.0 = 1                                              'bestimmt Richtung rechter Motor
  Portb.1 = 0                                              'bestimmt Richtung rechter Motor
  Portd.5 = 1                                              'rechter Motor EIN
  I = 200
  Do
     Pwm1a = I
     Pwm1b = I
     Waitms 20
     I = I + 20
  Loop Until I > 281
     Wait 1
     Pwm1a = 0
     Pwm1b = 0
  Call Go
  End Sub