Hallo allerseits,
ich hab ein kleines problemchen mit meinem code. mein robby hat vorne 3 taster un soll bei kollision erst ein stück zurückfahren, sich dann um ca. 90 grad (bei kollision am mittleren taster etwas mehr) drehen und dann weiterfahren. Dass das drücken eines anderen tasters bei dem ausweichvorgang auch wahrgenommen werden kann, hab ich versucht, das ganze mit timer0 zu ralisieren, was auch eigentlich ganz gut funktioniert.
Jetzt aber zum problem: es kommt von zeit zu zeit vor, dass sich der controller einfach "neu startet" also wieder von ganz am anfang anfängt. das kann allerdings nicht an den timern liegen, da ich dieses problem auch schon mit einem anderen code hatte. und ein neues problem ist dazugekommen: es kommt vor, dass der timer auf einmal aufhört zu zählen (an unterschiedlichen werten vom zaehler).Beide motoren drehen sich dann endlos rückwärts, bis man den strom aus und wieder einschaltet. könnte es enventuell daran liegen, dass ich keine diode vor den relais habe, die den motor schalten? oder liegts an was ganz anderem?
mfg Markus
Code:$regfile = "2313def.dat" $crystal = 3686400 $baud = 9600 Dim Zaehler As Byte Ddrd.2 = 1 'motor links vorwärts Ddrd.3 = 1 'motor links rückwärts Ddrd.4 = 1 'motor rechts vorwärts Ddrd.5 = 1 'motor rechts rückwärts Ddrb.0 = 0 'taster links vorne Ddrb.1 = 0 'taster mitte vorne Ddrb.2 = 0 'taster rechts vorne Portb.0 = 1 Portb.1 = 1 Portb.2 = 1 Mlinksvor Alias Portd.2 Mlinksrueck Alias Portd.3 Mrechtsvor Alias Portd.4 Mrechtsrueck Alias Portd.5 Schalterlinks Alias Pinb.0 Schaltermitte Alias Pinb.1 Schalterrechts Alias Pinb.2 Config Timer0 = Timer , Prescale = 1024 Enable Timer0 Start Timer0 Enable Interrupts On Timer0 Ontimer Main: Mlinksvor = 1 Mlinksrueck = 0 Mrechtsvor = 1 Mrechtsrueck = 0 If Schalterlinks = 0 Then Zaehler = 0 Gosub Links End If If Schaltermitte = 0 Then Zaehler = 0 Gosub Mitte End If If Schalterrechts = 0 Then Zaehler = 0 Gosub Rechts End If Goto Main Links: If Schaltermitte = 0 Then Zaehler = 0 Gosub Mitte End If If Schalterrechts = 0 Then Zaehler = 0 Gosub Rechts End If If Zaehler < 33 Then Mlinksvor = 0 Mlinksrueck = 1 Mrechtsvor = 0 Mrechtsrueck = 1 End If If Zaehler > 33 Or Zaehler = 33 Then Mlinksvor = 1 Mlinksrueck = 0 Mrechtsvor = 0 Mrechtsrueck = 1 End If If Zaehler = 83 Then Gosub Main End If Goto Links Mitte: If Schalterlinks = 0 Then Zaehler = 0 Gosub Links End If If Schalterrechts = 0 Then Zaehler = 0 Gosub Rechts End If If Zaehler < 33 Then Mlinksvor = 0 Mlinksrueck = 1 Mrechtsvor = 0 Mrechtsrueck = 1 End If If Zaehler > 33 Or Zaehler = 33 Then Mlinksvor = 1 Mlinksrueck = 0 Mrechtsvor = 0 Mrechtsrueck = 1 End If If Zaehler = 101 Then Gosub Main End If Goto Mitte Rechts: If Schalterlinks = 0 Then Zaehler = 0 Gosub Links End If If Schaltermitte = 0 Then Zaehler = 0 Gosub Mitte End If If Zaehler < 33 Then Mlinksvor = 0 Mlinksrueck = 1 Mrechtsvor = 0 Mrechtsrueck = 1 End If If Zaehler > 33 Or Zaehler = 33 Then Mlinksvor = 0 Mlinksrueck = 1 Mrechtsvor = 1 Mrechtsrueck = 0 End If If Zaehler = 83 Then Gosub Main End If Goto Rechts Ontimer: Incr Zaehler Print Zaehler Return
Lesezeichen