N'abend!
Learning by doing hat sich wieder einmal bewährt! Habe das jetzt hinbekommen und weiß auch woran es lag! Ich habe als Endlosschleife eine For Schleife genutzt die nie Endet. Das mag er anscheind nicht. Mit Do Loop gehts ohne Probleme. Außerdem habe ich die Sache mit den Sub's hinbekommen. Alles eigentlich nicht schwer.

Hier mein kleines Programm zum Fahren mit 2 Motoren. Wird ein Hinderniss erfasst, wird kurz zurück gesetzt, etwas nach rechts gedreht und weiter gefahren... Ob die Zeiten in der Praxis OK sind kann ich nicht sagen, aber das ist ja egal.

Was meint ihr, kann man da etwas besser machen? Wie lasst ihr den Bot ausweichen?

Code:
Code:
$crystal = 16000000
$baud = 9600
$regfile = "m32def.dat"

Declare Sub Fahren()



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


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

Config Portc = Output
Config Portb = Output


Dim Taster As Word


Ddrc = &B00000001                                           'Zu Beginn eine LED an

Do


   Start Adc
   Taster = Getadc(7)


   If Taster < 1010 Then

      Select Case Taster

         Case 410 To 450                                    'Taste 1: Fahren bis Hindernis

            Call Fahren()


         'Case 340 To 380                                    'Taste 2:



         'Case 265 To 305                                    'Taste 3:



         'Case 180 To 220                                    'Taste 4:



         'Case 80 To 150                                     'Taste 5:



      End Select

   End If

Loop

End

'#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#+#

Sub Fahren()
   Dim Sensor As Word

   Sensor = Getadc(2)                                       'Sensor 1 aktivieren
   Config Pina.2 = Input                                    'Port als Input
   Porta.2 = 1                                              'Port hoch setzen



   Ddrc = &B10000000                                        'Motor 1 Vorwärts
   Ddrb = &B00000010                                        'Motor 2 Vorwärts

   Do                                                       'Endlosschleife
         If Getadc(2) < 1010 Then                           'Wenn Port runter gesetzt wird (Low)

                     Ddrc = &B01000000                      'Motor 1 Rückwärts
                     Ddrb = &B00000001                      'Motor 2 Rückwärts

                     Print "Hindernis, setze zurueck!"

                     Waitms 100

                     'Rechtsdrehung
                     Ddrc = &B10000000                      'Motor 1 Vorwärts
                     Ddrb = &B00000001                      'Motor 2 Rückwärts

                     Waitms 50

                     'Geradeaus
                     Ddrb = &B00000010                      'Motor 2 Vorwärts

                     Print "Setze Fahrt fort!"

         End If
   Loop

End Sub