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
Lesezeichen