Hallo,
mir ist aufgefallen, daß mit den mitgelieferten Funktionen in asuro.h es schwer ist, gerade für Anfänger, gute Programme zu schreiben. Eine erweiterte Bibliothek kann da hilfreich sein. Natürlich muss dabei auf den kleinen Speicher geachtet werden. Ich würde mich freuen, wenn hier Verbesserungen zusammengetragen werden. Ich hab schon mal einen Anfang gemacht und 3 hilfreiche Funktionen in der angefügten Datei zusammengestellt.
1. Encoder_Init()
initialisiert einen Hintergrund Odometrie-Zähler
2. Encoder Signal(Interrupt) routine
setzt ständig die neuen Werte.
In der globolen Variable encoder(LEFT) und encoder(RIGHT) steht immer der aktuelle Zählerwert. Zurückgesetz wird mit z.B. encoder(LEFT)=0
3. Msleep(int Dauer) wartet die angegebene Zeit in ms.
als weitere Funktionen wünsche ich mr z.B. eine einfache formatierte Ausgabe und ein simples Multitasking oder watchdog-handling. Eine Verbesserung von PollSwitch() mit einer Rückgabe als BitFeld.......
Übrigens: Kann mir jemand StartSwitch(), StopSwitch() aus asuro.c erklären ?
Ich hoffe auf rege Beteiligung (was hälst Du davon Henk?)
Gruß
Weja
schätze mal, ich hab nicht genau genug erklärt was ich mir vorstelle oder der Sinn der obigen Funktionen ist nicht klar.
Ich programmiere den Asuro mit Kindern ab 11 Jahren, und die sollen sich nicht mit dem Innenleben des Controllers herumschlagen.
Wir möchten eine Bibliothek benutzen, die auch andere verwenden, damit man Ideen besser austauschen kann ("Roboternetz Asuro Bib"). Arexx bezieht sich in seiner Dokumentation auf diese Forum, daher hoffe ich auf Mitarbeit. Eine Idee hab ich schon im Thema "Asuro eure Programme"
gefunden (Prozentangabe für Speed).
Man kann mit den Funktionen aus der Bibliothek von oben den Asuro dynamisch geradeaus fahren lassen, da stören auch keine Teppichkanten oder das kurze Bremsen eines Rades. Das geht z.B.so:
________________________________________________
#include "asuro.h"
#include "aslib.c"
int main(void)
{ int diff;
Init();
Encoder_Init();
MotorDir(FWD,FWD);
MotorSpeed(175,175);
while(1){
div=encoder[RIGHT]-encoder[LEFT];
MotorSpeed(175+diff,175-diff);}
while(1);
return 0;
}
__________________________________________________ _
Ich danke hier schonmal allen die sich beteiligen.
Weja
Leider haben wir z.Z.nur 1 Asuro zur Verfügung, aber unsere neuen Befehle sollen natürlich allgemeingültig sein. Deshalb kopiere bitte die Datei aslib.c in dein Asuro-Arbeitsverzeichnis und probiere einmal das Programm zum geradeausfahren aus und teile mit, ob es einwandfrei funktioniert.
Schreib auch, wenn Du sonst wo auf Probleme bei der Programmierung stösst. Vielleicht passt das Problem ja hier mit rein.
Gruß, Weja
hab das Progrämmchen gerade ausprobiert! Hatte 200x soviel Codezeilen und es NICHT hinbekommen, was mal wieder beweist, daß die einfachsten Lösungen meistens die besseren sind... *g*.
Vielen Dank für die Rückmeldung. Es freut mich sehr, zu lesen, dass das Programm auch mit min. einem anderem Asuro funktioniert. (Was ist mit den anderen 38 Downloads?)
Ich teste gerade verbesserte Zeitfunktionen und Tastenabfrage. Wie man das alles gleichzeitig und einfach nutzen kann stelle ich wohl morgen hier vor.
in dem Int-Auswertung: SIGNAL (SIG_ADC)
vergleichst du den ADCH mit dem dez-Wert "160".
Woher kommt dieser Wert? Habe lange drann rumgerechnet aber es macht für mich einfach keinen Sinn. Ich hätte wohl mit "128" verglichen.
Hallo Chris,
den Wert habe ich nicht errechnet, sondern experientell ermittelt.
Durch immer vorhandenes Umgebungslicht liegt der Mittelwert eben etwas höher. Du kannst ja mal 128 einsetzen und prüfen, ob es einen Unterschied macht. Bei einer Abschirmung der Odometrie Sensoren ist 128 bestimmt besser.
Gruß
Weja
Lesezeichen