Ich habe in den letzten Tagen etwas am Ausweich Algorithmus rumgebastelt.
Das kam dabei heraus:
http://video.google.com/videoplay?do...15966325617087
Wobei ich im Moment das Problem habe, dass er recht schnell abschmiert:
http://video.google.com/videoplay?do...20286733390890
Entweder reagieren die Sensoren zu langsam oder ich habe ein anderes Problem.
Das Programm dazu:
Ich gehe im Programm alle 16 Möglichkeiten durch, die es mit den vier verschiedenen Sensoren geben kann. Wobei es Situationen gibt, die nicht zustande kommen können. Deswegen habe ich bei denen nur die Anweisung "stop" drinnen.Code:$regfile = "m32def.dat" $crystal = 4000000 $baud = 19200 'I2C Config Sda = Portc.1 Config Scl = Portc.0 Const Pcf8574_i = &H70 'Motoren Config Pind.5 = Output 'Links Config Pind.4 = Output 'Rechts Config Pinc.5 = Output R_1 Alias Portc.5 Config Pinc.4 = Output R_2 Alias Portc.4 Config Pinc.3 = Output L_1 Alias Portc.3 Config Pinc.2 = Output L_2 Alias Portc.2 Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 1 'Ultraschall Dim Zeitmessung As Word Dim Entfernung As Word Config Pind.6 = Output 'Boden Config Adc = Single , Prescaler = Auto , Reference = Internal Dim Entf_vorne_l As Word Dim Entf_vorne_r As Word Dim Entf_hinten As Word ' Dim Ultraschall As Byte '1=Gegenstand : 0=Frei Dim Kante_l As Byte '2=Kante : 0=Frei Dim Kante_r As Byte '3=Kante : 0=Frei Dim Kante_m As Byte '8=Kante : 0=Frei Dim Additionsergebnis As Byte 'Additionsergebnis aus Ultraschall, Kante_l, Kante_r und Kante_m '------------------------------------------------------------------------------- Start Adc I2csend Pcf8574_i , &B11001111 Waitms 2500 I2csend Pcf8574_i , &B00111111 Waitms 2500 I2csend Pcf8574_i , &B11110000 '------------------------------------------------------------------------------- Do Gosub Sensorabfrage If Additionsergebnis = 0 Then Gosub M_vor If Additionsergebnis = 1 Then Gosub M_links If Additionsergebnis = 2 Then Gosub M_rechts If Additionsergebnis = 3 Then Gosub M_hinten_rechts If Additionsergebnis = 4 Then Gosub M_links If Additionsergebnis = 5 Then Gosub M_hinten_links If Additionsergebnis = 6 Then Gosub M_hinten_rechts If Additionsergebnis = 7 Then Gosub M_hinten_links If Additionsergebnis = 8 Then Gosub M_vor If Additionsergebnis = 9 Then Gosub M_links If Additionsergebnis = 10 Then Gosub M_vor_rechts If Additionsergebnis = 11 Then Gosub M_stop If Additionsergebnis = 12 Then Gosub M_vor_links If Additionsergebnis = 13 Then Gosub M_stop If Additionsergebnis = 14 Then Gosub M_stop If Additionsergebnis = 15 Then Gosub M_stop If Additionsergebnis > 15 Then Gosub M_stop Loop End '------------------------------------------------------------------------------- Sensorabfrage: 'Ultraschall: Portd.6 = 0 Pulseout Portd , 6 , 40 Pulsein Zeitmessung , Pind , 6 , 1 Zeitmessung = Zeitmessung * 10 Entfernung = Zeitmessung / 62.5 If Entfernung < 30 Then Ultraschall = 1 Else Ultraschall = 0 End If 'Kante_vorne_l: Entf_vorne_l = Getadc(0) If Entf_vorne_l < 710 Then Kante_l = 2 Else Kante_l = 0 End If 'Kante_vorne_r: Entf_vorne_r = Getadc(1) If Entf_vorne_r < 590 Then Kante_r = 4 Else Kante_r = 0 End If 'Kante_hinten_m: Entf_hinten = Getadc(2) If Entf_vorne_l > 635 Then Kante_m = 8 Else Kante_m = 0 End If Additionsergebnis = Ultraschall + Kante_l Additionsergebnis = Additionsergebnis + Kante_r Additionsergebnis = Additionsergebnis + Kante_m Return '------------------------------------------------------------------------------- M_stop: R_1 = 1 R_2 = 1 Pwm1b = 0 L_1 = 1 L_2 = 1 Pwm1a = 0 Return M_vor: R_1 = 0 R_2 = 1 Pwm1b = 50 L_1 = 0 L_2 = 1 Pwm1a = 50 Return M_hinter: R_1 = 1 R_2 = 0 Pwm1b = 0 L_1 = 1 L_2 = 0 Pwm1a = 0 Waitms 500 Return M_rechts: R_1 = 1 R_2 = 0 Pwm1b = 0 L_1 = 0 L_2 = 1 Pwm1a = 0 Waitms 500 Return M_links: R_1 = 0 R_2 = 1 Pwm1b = 0 L_1 = 1 L_2 = 0 Pwm1a = 0 Waitms 500 Return M_hinten_rechts: Gosub M_hinter Waitms 500 Gosub M_rechts Waitms 500 Return M_hinten_links: Gosub M_hinter Waitms 500 Gosub M_links Waitms 500 Return M_vor_rechts: Gosub M_vor Waitms 500 Gosub M_rechts Waitms 500 Return M_vor_links: Gosub M_vor Waitms 500 Gosub M_links Waitms 500 Return
Ich werde an IMADEIT jetzt nichts mehr an der Hardware ändern, nur noch an der Software. In der zweiten Hälfte der Sommerferien habe ich vor eine Version 2 von IMADEIT zu bauen, die Größer sein soll, etwas schneller und ein selbstgebaute Getriebe haben soll. Die Planungen laufen noch.
jon







Zitieren

Lesezeichen