PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hindernis ausweichen Problem



Stallion
04.11.2007, 23:04
Ich seh den Wald vor lauter Bäumen nicht mehr. Ich sitze jetzt seit Zwei Tagen an dem Programm und es kommt nix gescheites raus.

Was soll passieren: Asuro fährt, knallt gegen die Wand, stoppt, fährt zurück, dreht sich, abhängig von Tasterkontakt und fährt weiter... Standardablauf

Was passiert: er fährt dauernd Rückwärts. :(

Das Programm lautet:

#include "asuro.h"



int main(void)

{

Init();
EncoderInit();

PollSwitch();

while (1)
{
StartSwitch();
switched = FALSE;
while (!switched)
{
Go(10,120);
}

if (PollSwitch() < 7)
{
Go(-50,120);
Turn(-30,100);
}
else
{
Go(-50,120);
Turn(30,100);
}
}
return 0;
}
Wo liegt mein Denkfehler?

radbruch
04.11.2007, 23:19
Wo liegt mein Denkfehler?
In der Annahme, PollSwitch() liefert immer korrekte Werte. Deine
while (!switched)-Schleife wird bei der geringsten Fehllesung der Taster beendet! Zur Fehlersuche kannst du ja mal den Wert speichern (und zum Terminal senden) der zum Abbruch der Schleife führte. Abhilfe schafft vielleicht eine Mehrfachabfrage und Prüfung auf Gleichheit mehrerer PollSwitch()-Werte.

damaltor
04.11.2007, 23:26
hmm bis jetzt war die interrupt-funktion immer sehr zuverlässig.
startswitch() würde ich evtl aus der while-schleife rausnehmen, auch wenn das denke ich keine störung hervoruft. in welche richtung fährt er denn rückwärts? so dass pollswitch größer oder kleiner als 7 ist?

Stallion
04.11.2007, 23:38
Die Tasten alleine und die Go-Funktion laufen zuverlässig, das habe ich in separaten Programmen getestet.

Mir scheints eher, dass sich irgendwie die Interrupts in die Quere kommen.

Er fährt andauernd zurück (kein Turn). Er nimmt das if, also PollSwitch < 7.

damaltor
04.11.2007, 23:41
das ist ja eigenartig. wenn er nur zurückfährt, dann stimmt was grundlegendes nicht. ich könnte mir evtl einen überlauf der encodervariable vorstellen. setz doch die beiden mal zurück (war das nicht Encoder_Ser(0,0) oder so?) bevor du die go-und turn funktionen nutzt. oder passiert das bereits in deisen funktionen?

Stallion
04.11.2007, 23:46
Ach, ich Hirni, ich glaub ich habs. ](*,) Ich hab in dem Programm noch was mit den BackLEDs rumgemacht, das habe ich der Übersicht halber hier nicht gepostet. Da aber Odometrie und BackLEDs zusammenhängen, kann das ganze gar nichtmehr sinnvoll funktionieren. Ich geh jetzt pennen und probiere morgen weiter, hoffentlich klappts dann.

damaltor
05.11.2007, 00:03
das klingt sonnvoll... viel glück =)