PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Nochmal: Asuro und die Taster



ThomasC.
25.03.2006, 17:21
Hallo,

es geht um meinen Asuro. Ich hab schon das Forum durchsucht und festgestellt, dass er, wie bei mir, öfters Probleme mit den Tastern hat. Allerdings konnte ich für mich keine passende Lösung finden.

Ich habe ein Programm geschrieben, dass er dauernd vorfährt, bis mindestens ein Taster gedrückt wird. Dann soll er ein Stück zurück und stehenbleiben.

Allerdings läuft es meistens nicht so, wie geplant: Manchmal fährt er direkt nach dem Starten zurück und bleibt stehen, manchmal fährt er normal geradeaus, fährt aber beim drücken eines Schalters nicht zurück und wenn ich Glück habe, läufts normal. Letzters habe ich festgestellt, vor allem wenn ich vor dem starten lange warte, und er relativ lange fährt bis er irgendwo gegenprallt.
Ich habe gelesen, dass man PollSwitch öfters hintereinander aufrufen soll.
Wenn ich nun mal übertreibe, und PollSwitch 8 mal hintereinander aufrufe, fährt er zwar jedesmal normal los, aber die Schalter sprechen erst beim ca. 5 mal drücken an.
Andersherum (1x) PollSwitch, fährt er fast immer gleich zurück, aber sollte er dennoch einmal vorwärtsfahren, sprechen die Schalter sofort an.

Was kann ich ändern, damit das gescheit funktioniert? Kann man C7 ändern? Was würde passieren, wenn man ihn entfernt/vergrößert?



while(PollSwitch()||PollSwitch()==0)
{
MotorDir(FWD,FWD);
MotorSpeed(120,120);

}
for(i=0;i<50000;i++)
{
MotorDir(RWD,RWD);
MotorSpeed(255,255);
}

ThomasC.
26.03.2006, 23:27
Schade, weis denn keiner einen Rat? :-s

kanal28
27.03.2006, 02:21
Hallo ThomasC.,

also in der Schaltung des Asuro würde ich den Fehler eigentlich nicht suchen. Wenn Du alles richtig zusammengelötet hast, sollte das schon funktionieren. Das Hauptproblem bei den Tastern ist ja, dass nicht immer der richtige Wert zurückgegeben wird - das Problem besteht aber für Deine Aufgabe nicht. Um das richtige Ergebnis zu bekommen, muss man halt PollSwitch mehrfach aufrufen (Ich rufe PollSwitch() am Anfang des Programms ein paar mal auf, um sicher zu gehen...)

Ein Problem sehe ich aber bei dem code, den Du verwendest. Wenn meine C-Kenntnisse mich zu später Stunde nicht schon verlassen haben, dann ruft
while(PollSwitch()||PollSwitch()==0) die Funktion PollSwitch immer doppelt auf und verknüpft das als zwei Bedingungen mit einem logischen ODER. Bin nicht ganz sicher, was Du damit erreichen willst. Wenn kein Taster gedrückt ist, gibt PollSwitch 0 zurück, sonst einen Wert für die Taste. Wenn also eine Taste gedrückt ist, wird der erste Teil Deiner Bedingung 'wahr'. Ist aber keine Taste gedrückt, ist der zweite Teil der Abfrage [PollSwitch()==0] 'wahr'. Das würde erklären, dass er auf den Taster nicht reagiert. Er verlässt die while-Schleife wohl nur, wenn Du den Taster im richtigen Moment loslässt.

Schau Dir am besten nochmal Deinen Programmcode genau an. Wie auch im Asuro-Handbuch in einem Beispiel steht, sollte
while (PollSwitch()==0) schon ausreichen, um den Inhalt der while-Schleife, bis zu einer Kollission auszuführen.

Wenn Du nicht weiter kommst, kannst Du ja auch nochmal das gesamte Programm hier posten.

Viel Erfolg
kanal28

ThomasC.
27.03.2006, 15:13
Hey danke,
das hat prima geklappt. =D>
Hast natürlich Recht mit dem ODER, ich weis auch nicht wie ich darauf gekommen bin. Es hieß, dass beim ersten abfragen ein Fehler entsehen könnte und beim ODER müssten ja beide ungleich 0 sein, was bei einem Fehler nicht so ist, und er weiter in der Schleife bleibt.
Hab das nun so gelöst, dass ich erst vor der Schleife einmal abfrage, und am Ende der Schleife:

PollSwitch();
while(PollSwitch()==0)
{
MotorDir(FWD,FWD);
MotorSpeed(120,110);
PollSwitch();
}
for(i=0;i<50000;i++)
{
MotorDir(RWD,RWD);
MotorSpeed(255,255);
}

Jetzt gehts so wie geplant.