hallo leute,
ich bin gerade dabei mir einen robi zu bauen, der rechts und links einen motor besitzt und vorne sitzt ein us-sensor auf einem servo, welcher ganz vorne befestigt ist.
der servo soll sich drehen (in best. großen schritten) und wenn der us-sensor etwas ortet, soll der robi mit einer dementsprechenden richtungsänderung darauf reagieren. ansonsten soll der robi immer geradeausfahren.
im prinzip ist es also ein roboter, der sich mit nur einem sensor in einem raum bewegen kann, ohne anzuecken.
hier aber mein problem:
ich habe die hardware schon komplett fertig, nur die software fehlt noch.
ich habe einen atmega32, einen l293 als motortreiber und einen billigen bausatz vom großen blauen c als us-sensor.
[shadow=red:033799863b]hier mein code:[/shadow:033799863b]
pwm1a und pwm1b sind für die geschwindigkeitsregelung der motoren.Code:'header $regfile = "m32def.dat" $crystal = 16000000 $framesize = 64 $hwstack = 32 $swstack = 10 '\header 'subs declarieren Declare Sub Abfrage() Declare Sub Berechnung() Declare Sub Servo() '\subs declarieren 'configurieren Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up , Prescale = 8 Config Adc = Single , Prescaler = Auto Config Servos = 1 , Servo1 = Portb.0 , Reload = 10 , Timer = Timer0 Config Portb.0 = Output Config Portc.5 = Output Config Porta.0 = Input '\configurieren 'Motoren Config Portb.0 = Output Config Portb.1 = Output Config Portc.6 = Output Config Portc.7 = Output '\Motoren 'alias-befehle Ml1 Alias Portb.0 Ml2 Alias Portb.1 Mr1 Alias Portc.6 Mr2 Alias Portc.7 '\alias-befehle '( Pwm1a = Geschw. - - > Rechter Motor Pwm1b = Geschw. - - > Linker Motor ') 'variablen deklarieren Dim X As Word Dim J As Word Dim S As Word Dim Pos As Word Dim Nega As Word '\variablen deklarieren 'hauptschleife Do Call Abfrage Call Servo 'Call Berechnung Loop '\hauptschleife 'subs Sub Abfrage X = Getadc(0) If X < 200 Then 'ultraschall-sensor ortet nichts Portc.5 = 0 'alles ok - kein hinderrniss Ml1 = 1 Ml2 = 0 Mr1 = 1 Mr2 = 0 Elseif X > 200 Then 'ultraschall-sensor ortet etwas Call Berechnung Portc.5 = 1 'hinderniss geortet Ml1 = 0 Ml2 = 1 Mr1 = 0 Mr2 = 1 Waitms 800 End If End Sub Sub Berechnung Pos = J - 20 'j = 20 to 170 Pwm1a = Pos + 50 'pwm1a & pwm1b = 50 to 200 Nega = Pos + 50 Pwm1b = 250 - Nega 'pwm1a & pwm1b = geschw. der motoren End Sub Sub Servo If J < 170 Then S = S + 30 Elseif J >= 170 Then S = 20 End If Servo(1) = J Waitms 300 End Sub '\subs End
ich weis, dass noch viele fehler drin sind, hab manches einfach so ohne zu überlegen hineingeschrieben, ich hoffe, ihr könnt mich auf ein paar fehler aufmerksammachen, und ggbf. sogar eine lösung mit mir bearbeiten?!
mein größtes problem ist allerdings, dass wenn ich das ganze complimieren will, eine fehlermeldung kommt:
assignment error (servo(1) .......) blablabla
anscheinend habe ich einen fehler beim servo-config gemacht, mir fällt er aber nicht auf!
könntet ihr mir sagen, wo der fehler liegt?!?!
ich bedanke mich jetzt schon für eure beiträge und freue mich auf anregungen/feststellungen.
mfg
chris







					
					
					
						
Zitieren

Lesezeichen