Programm 1 (Testprogramm Mega 8)

$regfile = "m8def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32

'Variablen
Dim Ws As Integer
Dim Cny1 As Integer
Dim Cny2 As Integer
Dim Cny3 As Integer
Dim Taste As Byte
Dim Fahren As Byte
Dim I As Integer
Dim Los As Byte
Dim Taste1 As Bit
Dim Taste2 As Bit
Dim Speedli As Integer
Dim Speedre As Integer
Dim Fall As Byte
Dim M20 As Bit

'Unterprogramme
Declare Sub 2motvorw()                                      'Subs anmelden
Declare Sub Rechtskurve()
Declare Sub Linkskurve()
Declare Sub Rueckwaerts()
Declare Sub Bremsen()
Declare Sub Sensorabfrage()
Declare Sub Tastenabfrage()
Declare Sub Motorregelung()

$crystal = 16000000
$baud = 9600

'Motore
'Ports für linken Motor
Config Pind.6 = Output                                      'Linker Motor Kanal 1
Config Pind.7 = Output                                      'Linker Motor Kanal 2
Config Pinb.1 = Output                                      'Linker Motor PWM
'Ports für rechten Motor
Config Pind.5 = Output                                      'Rechter Motor Kanal 1
Config Pind.4 = Output                                      'Rechter Motor Kanal 2
Config Pinb.2 = Output                                      'Rechter Motor PWM
'Sensoren
Config Pinc.0 = Input                                       'CNY1
Portc.0 = 1
Config Pinc.1 = Input                                       'CNY2
Portc.1 = 1
Config Pinc.2 = Input                                       'CNY3
Portc.2 = 1
'Tasten
Config Pind.2 = Input                                       'Taste1
Config Pind.3 = Input                                       'Taste2
Config Pinb.0 = Output                                      'LED

'PWM
Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8


Pwm1a = 0
Pwm1b = 0

M20 = 1
'Hauptprogramm
Do

Call Tastenabfrage

If Taste1 = 0 Then
M20 = Taste1                                                'Taste1 Abfragen
Weiter:
Taste2 = 1
'Programmschleife
For I = 100 To 1000 Step 50                                 'Beide Mots vorw.
Speedli = I
Speedre = I
Call 2motvorw
Waitms 1000
Next I

Call Bremsen                                                'Bremsen

For I = 1 To 30                                             'Led blinken lassen
Portb.0 = 0
Waitms 200
Portb.0 = 1
Waitms 100
Next I

For I = 1000 To 100 Step -50                                'Beide Mots rueckw.
Speedli = I
Speedre = I
Call Rueckwaerts
Waitms 1000
Next I

Call Bremsen                                                'Bremsen hier unnötig
'aber immer gut fürs IC
End If                                                      'End If für Taste1
'Ende Schleife Taste2 abfragen
Call Tastenabfrage                                          'Taste2 Abfragen

If Taste2 = 0 Then                                          'Taste2 gedrückt
Taste1 = 1                                                  'Dann stehen bleiben
M20 = 1
End If

If M20 = 0 Then                                             'Weiter machen
Goto Weiter                                                'Hin u. her fahren
End If

Loop
End

'Subs
Sub 2motvorw()                                              'Motoren Ein 70%
'Linker Motor ein
Portd.6 = 1                                              'Richtung vorw.
Portd.7 = 0                                              'Richtung vorw.
Portb.1 = 1                                              'Linker Motor EIN

'Rechter Motor ein
Portd.5 = 1                                              'Richtung vorw.
Portd.4 = 0                                              'Richtung vorw.
Portb.2 = 1                                              'rechter Motor Ein

Pwm1a = Speedli                                       '1000=Maxspeed  :  330=Minspeed
Pwm1b = Speedre

End Sub

Sub Rechtskurve()                                           'Rechtsdrehung
'Linker Motor ein
Portd.6 = 1                                              'Richtung vorw.
Portd.7 = 0                                              'Richtung vorw.
Portb.1 = 1                                              'Linker Motor EIN

'Rechter Motor ein
Portd.5 = 0                                              'Richtung rück.
Portd.4 = 1                                              'Richtung rück.
Portb.2 = 1                                              'rechter Motor Ein

Pwm1a = Speedli                                       '1000=Maxspeed  :  330=Minspeed
Pwm1b = Speedre
End Sub

Sub Linkskurve()                                            'linkssdrehung
'Linker Motor ein
Portd.6 = 0                                              'Richtung rück.
Portd.7 = 1                                              'Richtung rück.
Portb.1 = 1                                              'Linker Motor EIN

'Rechter Motor ein
Portd.5 = 1                                              'Richtung vorw.
Portd.4 = 0                                              'Richtung vorw.
Portb.2 = 1                                              'rechter Motor Ein

Pwm1a = Speedli                                       '1000=Maxspeed  :  330=Minspeed
Pwm1b = Speedre
End Sub

Sub Bremsen()                                               'Anhalten
'Linker Motor ein
Portd.6 = 1                                              'Richtung stop.
Portd.7 = 1                                              'Richtung stop.
Portb.1 = 1                                              'Linker Motor EIN

'Rechter Motor ein
Portd.5 = 1                                              'Richtung stop.
Portd.4 = 1                                              'Richtung stop.
Portb.2 = 1                                              'rechter Motor Ein

Pwm1a = 1000
Pwm1b = 1000
Waitms 40
End Sub

Sub Rueckwaerts()                                           '200 ms Rückwärts
'Linker Motor ein
Portd.6 = 0                                              'Richtung vorw.
Portd.7 = 1                                              'Richtung vorw.
Portb.1 = 1                                              'Linker Motor EIN

'Rechter Motor ein
Portd.5 = 0                                              'Richtung vorw.
Portd.4 = 1                                              'Richtung vorw.
Portb.2 = 1                                              'rechter Motor Ein

Pwm1a = Speedli                                       '1000=Maxspeed  :  330=Minspeed
Pwm1b = Speedre
End Sub

Sub Sensorabfrage()

Start Adc
Cny1 = Getadc(0)
Cny2 = Getadc(1)
Cny3 = Getadc(2)

End Sub

Sub Motorregelung()

If Cny1 > 300 Then
Speedli = 550
Speedre = 1020
Fall = 2
End If

If Cny3 > 300 Then
Speedli = 1020
Speedre = 550
Fall = 3
End If

If Cny1 > 500 Then
Speedli = 380
Speedre = 1020
Fall = 4
End If

If Cny3 > 500 Then
Speedli = 1020
Speedre = 380
Fall = 5
End If

If Cny2 > 750 Then
Speedli = 1020
Speedre = 1020
Fall = 1
End If
End Sub

Sub Tastenabfrage()                                         'Diese Unterfunktion fragt die 2 Tasten An D3&D4 ab

Taste1 = Pind.2
Taste2 = Pind.3

End Sub

Die Robotik & Arduino Seite