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







Zitieren

Lesezeichen