PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : MSleep bei richtungswechsel?



Fabulous84
21.04.2011, 12:31
Hallo allerseits,

ich habe mein ASURO so programmiert das er dem Licht einer Taschenlampe hinterherfährt, wenn die Kollisionstaster betätigt werden fährt er ein sekunde lang zurück und macht dann mit der Verfolgung des Lichts weiter.
Bei dem Richtungswechsel habe ich eine Wartezeit eingebaut. Das heisst wenn er Rückwärtsfährt und dann wieder vorwärtsfahren soll brauch er eine kurze "bedenkzeit". Ohne diese Bedenkzeit vor dem Befehl zum Vorwärts fahren funktioniert das Programm nicht, denn dann würde er immer Rückwärts fahren.
Nun Endlich meine Frage. Warum brauch er diese Bedenkzeit??? Warum funktioniert das ganze nicht ohne MSleep vor dem Vorwärtsfahren?

Ich bin dankbar für eure Antworten.


P.S. Bin neu hier und weiss nicht wie das mit dem einfügen der Quellcodes geht... wenn ihr mir sagt wie das geht, Danke!

Valen
21.04.2011, 13:37
Keine Ahnung noch wieso er nur Zurückfahrt, aber deine Code stimmt nicht ganz. Bist du sicher die geflashte Hex Datei ist gleich and diese Code? Das Kompilieren darf nicht gelungen sein.


#include "asuro.h"

int main(void)
{
unsigned int data[2];
Init();
while(1)
{
if (PollSwitch()>0))
{
MotorDir(RWD,RWD);
MotorSpeed(200,200);
Msleep(1000);
}
else
{
Msleep(200); // Warum muss das hier stehen? Ohne gehts anscheinend nicht!
MotorDir(FWD,FWD);
LineData(data);
if (data[0]>data[1])
{
MotorSpeed(80,200);
}
else
{
MotorSpeed(200,80);
}
}
// Valen: Hier soll noch ein "}" zwischen reinkommen! Sonnst ist "main" nicht abgeschlossen.

retourn(0); //Valen: Schreibfehler!
}

Valen
21.04.2011, 13:45
...

P.S. Bin neu hier und weiss nicht wie das mit dem einfügen der Quellcodes geht... wenn ihr mir sagt wie das geht, Danke!Fuge die Code ein zwischen:


... Code hier! Dann werden bestimmte Befehlen (Offiziell nur PHP Code, aber C ist ähnlich) in Farben angezeigt.


... Code hier! Dann bekommt Mann den Code ohne Farbe.

Das Leerzeichen nach "php" und "code" sollst du nicht übernehmen. Das habe ich dort gesetzt sonnst wird das gleich interpretiert durch das Forum Software.

Versuch mal meine Beitrag oben zu zitieren. Du wird es gleich sehen.

Fabulous84
21.04.2011, 13:59
Ok von den Schreibfehlern mal abgesehen (hab den Code eben schnell nur abgeschrieben längere Geschichte), es geht mir aber eigentlich um dieses Msleep. Warum geht es nicht ohne? Habe jetzt schon mehrmals Beiträge gelesen in denen solche Probleme auf die Tasterabfrage zurückzuführen ist. Das könnte ja hier auch der Fall sein. Wenn dies so ist ist es dann auch möglich das diese Bedenkzeit dafür sorgt das die Taster erst verzögert abgefragt werden und diese dann den richtigen Wert "0" haben?

Fabulous84
21.04.2011, 14:05
Mein Original Programm sieht so aus...
18636

Valen
21.04.2011, 14:22
Ich verstehe es geht dich nur um das MSleep. Aber ich will nicht Kommentare geben über den (mögliche) Code-fehlern, wann es nicht sicher ist das die Symptomen auch dazu gehören. Das soll man erst ausschließen, sonnst wird man sich selbst verwirren. Aber dein letztes Bild zeigt an es ist Gleich außer den Schreibfehlern.

Es stimmt. Änderungen der Motorkraft und Drehrichtung haben eine starke Einfluss auf den Bordspannung. Diese Bordspannung wird auch angeschaltet an den Tastenmessung (durch Pin PD3 und R24) und deshalb soll man nicht auf nur 1 PollSwitch Messung verlassen ob die Tastern eingedrückt sind (und bleiben). Das kann einfach eine Falsche Tastenmessung geben. Man soll die PollSwitch werten in 2 Variablen speichern und danach mit einander vergleichen ob sie gleich sind und eine bestimmte wert haben worauf ein Aktion gemacht werden soll.

Eine weitere Tip für den 'Linie'-messung. Die beide Werten sind fast NICHT gleich bei gleiche Beleuchtung von den Taschenlampe. Bauteilen haben immer verschiedene Empfindlichkeiten und Widerstandswerten. Mann soll die Differenz im Ruhe-kondition erst abspeichern, und später bei jeder neue Messung davon abziehen. Sonnst wird dein Asuro immer ein Präferenz haben für eine Richtung.

Es gibt genug Beispiel Programmen für diese 2 Problemen bereits im Forum. Einfach suchen nach den PollSwitch und LineData Befehlen im Asuro abteilung.

Fabulous84
21.04.2011, 14:51
@ Valen: Vielen Dank für die Antwort.

Weitere erklärungen zu der Pollswitch abfrage und den Einfluss der Bordspannung auf diese wären hilfreich. Wer noch mehr dazu sagen kann, bitte posten.

Kann doch nicht sein das man als Anfänger an solche Probleme stößt für die, die eigene Programmierung gar nichts kann, sondern weil die Hardware nicht ausgereift ist. ärgerlich

Dispo-Gott
21.04.2011, 16:29
Kann doch nicht sein das man als Anfänger an solche Probleme stößt für die, die eigene Programmierung gar nichts kann, sondern weil die Hardware nicht ausgereift ist. ärgerlich

Ausgereift gibt es für den dreifachen Preis... . Du hast dich aber bewusst für einen günstigen Einsteiger-Bausatz entschieden. Da gehört ein wenig "Frickeln" halt mit dazu.

Valen
21.04.2011, 16:34
Ärgerlich ist es, ... für Einsteiger. Aber leider ist das die Physikalische (Dreckeiche) Realität, und das interessante an Roboter Technik. Man muss von beide etwas wissen. Programmierung und Elektronische/Mechanische Technik. Mann braucht auch eine gewissen Forschungswunsch. Wenn man etwas nicht verstehst soll man tiefer in dem Materie Untersuchungen machen. Was passiert dort wirklich???? Das heißt, den Schaltungsbild ansehen und versuchen zu verstehen. Datenblätter der verschiedene Teilen durchschauen. Und den asuro.c und asuro.h Code versuchen zu verstehen. Kennt man noch keine C-sprache? Dann soll man Tutorials im Netz suchen. Oder ein Buch kaufen. Das wird vielleicht eine weile dauern bis das Alles geht. So, Geduld soll man auch haben. ;)

Vielleicht könnte die Entwickler von Asuro dieses Problem behoben haben, aber dann wurde das Paket fast Teurer sein als 50 Euro oder so. Mann braucht auch ein bisschen Herausforderung. Sonnst wird es bald Langweilig.

markusj
21.04.2011, 17:33
Kann doch nicht sein das man als Anfänger an solche Probleme stößt für die, die eigene Programmierung gar nichts kann, sondern weil die Hardware nicht ausgereift ist. ärgerlich

Die Hardware ist ausgereift, nur eben beschränkt. Fakt ist, dass die Bordspannung (aus gutem Grund) als Spannungsreferenz für die Tasterauswertung verwendet wird. Gleichzeitig sind Motoren nun Mal eben "Großverbraucher" und haben zudem noch die Angewohnheit, diverse Störungen ins Bordspannungsnetz einzuspeisen.
Speziell Änderungen der Motorparameter (Richtung, Drehzahl, Last) können sich so auf den Analogteil auswirken.

Dieses Verhalten ist konstruktionsbedingt, man könnte die Störungen durch eine kleine Induktivität (siehe ASURO-Wiki) evtl. noch etwas reduzieren. Bei größeren Robotern gibt es aus diesem Grund übrigens oft zwei Spannungsnetze (Logik- + Leistungsteil).

mfG
Markus