PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ASURO LineData



Jul-ian
20.04.2006, 19:17
Hallo zusammen,

Ich bin seit gestern stolzer Besitzer eines ASURO. Echt super der Kleine.
In der Dokumentation steht, dass die Funktion LineData für rechts und links jeweils Werte von 0 bis 1023 zurückgeben kann.
Für ein Linienfolgeprogramm wollte ich jetzt mal nachschauen welche Werte dort zurückgegeben werden, wenn ich ein Stück Papier unter dem ASURO hin und herschiebe.
Dafür wollte ich mit SerWrite mit dem PC kommunizieren. Ausschnitt aus dem Programm:



void CheckLine(void) {
unsigned int data[2];
FrontLED(ON);
LineData(data);
Serwrite(data[0],4);
Serwrite(data[1],4);
}


Das ergibt nur kryptische Zeichen, kann mir jemand sagen wie ich die Daten in einen vernünftige Datentyp umwandeln kann? Am besten mit Zeilenumbruch \n (geht nur bei Strings!?). Sorry, bin noch nicht so erfahren in C.

Vielen Dank =)
Gruß
Julian

linux_80
20.04.2006, 21:22
Hallo,
schaut so aus, das von LineData zweimal 16Bit zurückkommen, wenn man diese Werte direkt ausgibt, gibts komische Zeichen.
zB. das Ergebnis ist 133, dieser Wert über die Serielle Schnittstelle, wird vom PC als Zeichen erwartet, also könnte je nach Zeichensatz ein à ankommen, weil das dem Wert 133 entspricht !

Um die Werte in Klartext darzustellen musst Du die Werte erst in ASCII wandeln, zB mit itoa();
Es gibt auch schon eine erweiterte Asuro-lib, da ist ein PrintInt() dabei, einfach mal die Forum-Suche anwerfen.

Jul-ian
20.04.2006, 21:41
Ich hab mir vorhin schon nen Ast gegoogelt und bin dann irgendwann auch auf das itoa gestoßen.

Mein Script ist ja nur provisorisch um die Werte auszulesen.
Es sieht so aus:



// ** by JulianKraemer.de ** //

#include "asuro.h"

void CheckLine(void) {
char output_l[4], output_r[4];
unsigned int data[2];
FrontLED(ON);
LineData(data);
itoa(data[0], output_l, 10);
itoa(data[1], output_r, 10);
SerWrite("links:",6);
SerWrite(output_l,4);
SerWrite("rechts:",7);
SerWrite(output_r,4);
}

int main(void) {
unsigned char taste;
Init();
StatusLED(GREEN);
while(1) {
taste = Pollswitch();
if(taste > 0) {
SerWrite("\n-----\n",7);
CheckLine();
}
}
return 0;
}


Sobald man irgendeinen der Kontakttaster betätigt, werden am PC die entsprechenden Werte der beiden Fototransistoren angezeigt.
So kann man bequem den ASURO auf einer Unterlage ausrichten (oder umgekehrt) und dann zu einem beliebigen Zeitpunkt die Werte anzeigen lassen.

Ich habe bei mir die Schreibtischlampe ausgeschaltet, sodass (fast) nur noch die FrontLED für das Licht an den Fototransistoren sorgt. So habe ich recht stabile Messwerte bekommen.
Allerdings sind die Werte von T9 um ca. 50 höher als bei T10. Bei mir hatte ich jetzt sehr oft die Werte:
Links: 169
Rechts: 122

Wenn ich ein Linienfolgeprogramm schreibe, muss ich sowas natürlich berücksichtigen. Die Differenz ändert sich aber leider je nach Umgebungslicht.
Weiß da jemand weiter!?

Vogon
20.04.2006, 23:18
Schau doch mal dn:
https://www.roboternetz.de/phpBB2/zeigebeitrag.php?p=123226#123226
Da ist ein Testprogramm für die Linienfolger-Sensoren
Und da ist auch schon mal eine sehr gute Lösung von Waste zu sehen.