PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : ASURO Serwrite Problem



Zehplusplus
14.05.2010, 22:49
Ich würde gerne zum besseren Verständnis meine momentanen Temperaturwerte (Snake Vision) auf dem Hyperterminal angezeigt bekommen. Funzt aber nicht so ganz. Habe allerdings mit Serwrite keinerlei Erfahrung, deshalb hier den Block mit dem Teil, aus dem wahrscheinlich der Fehler stammt. Die Temperaturwerte sind bei mir unsigned int.

SerWrite("\r\nWäremwert links:",19);
Sleep(250);
SerWrite(temps[0],9);
SerWrite("\r\nWäremwert rechts:",18);
Sleep(250);
SerWrite("temps[1]",9);

Die Werte 9 sind mal willkürlich, da ich noch nicht weiß, welche Zahlen ankommen werden. Ich arbeite mit der alten Library (nicht die 2.8).

Zehplusplus
16.05.2010, 11:54
Leute, warum schreibt keiner? NIemand ne Idee?

syn_error
16.05.2010, 13:34
Habe allerdings mit Serwrite keinerlei Erfahrung
dann verschaff dir welche.
lies die anleitung zu der funktion oder schau nach wie sie programmiert ist.

Zehplusplus
16.05.2010, 13:54
wahnsinn, auf welche ideen du kommst. Musst ja nicht gleich ausfallend werden. Bist bestimmt nicht als Meister vom Himmel gefallen.

Könnt mir jemand nen Tip geben, der wirklich Ahnung hat und nicht seine (wenigen) Posting-stats in der Youtube-Ecke gesammelt hat?

ASUR0
16.05.2010, 16:32
Hallo,




SerWrite("\r\nWäremwert links:",19);
Sleep(250);
SerWrite(temps[0],9);
SerWrite("\r\nWäremwert rechts:",18);
Sleep(250);
SerWrite("temps[1]",9);



Also, Zehplusplus, erstmal, was für ein bizarre Code...

Die Definition von SerWrite lautet:

void SerWrite(unsigned char *data,unsigned char length);

D.h. *data ist der String, den du ausgeben und lenght dessen Länge.
z.B. Wenn du Hallo ausgeben willst schreibst du SerWrite("Hallo",5);

Soweit so gut, aber damit kannst du keine Zahlen ausgeben!

Wenn du zum Beispiel int meineZahl = 50; ausgeben willst, brauchst du etwa so eine Funktion (aus der AsuroLib2.7, leicht modifiziert):



void PrintInt (
int wert)
{
char text [7]; // "-12345"

itoa (wert, text, 10);
SerPrint (text);
}

void SerPrint (
char *data)
{
unsigned char i = 0;

while (data [i] != 0x00)
UartPutc (data [i++]);
}

void UartPutc (
unsigned char zeichen)
{
UCSRB = 0x08; // enable transmitter
UCSRA |= 0x40; // clear transmitter flag
while (!(UCSRA & 0x20)) // wait for empty transmit buffer
;
UDR = zeichen;
while (!(UCSRA & 0x40)) // Wait for transmit complete flag (TXC)
;
UCSRB = 0x00; // disable transmitter / powersave
}



Erklärung: die Funktion itoa in PrintInt wandelt die Zahl in einen String um, UartPutc() ist eine Methode um einzelne Zeichen zu senden, der Rest müsste klar sein

Dann musst du noch

int temperaturLinks = 50;
int temperaturRechts = 100;
SerWrite("Links:",6);
PrintInt(temperaturLinks);
SerWrite(""\n\rRechts:,9);
PrintInt(temperaturRechts);


schreiben und es erscheint

Links:50
Rechts:100

im Terminal.


ASUR0

P.S. zugegeben, deine Frage wirkt schon sehr unqualifiziert und du hast Glück dass mir gerade langweilig war...

Zehplusplus
16.05.2010, 19:22
Danke dir vielmals. Es geht bei meinem Kameraden, vlt hätte ich auch die neue Bibliothek nehmen sollen. Meine ist jetzt ergänzt, und der Asuro spuckt sogar die richtigen Werte aus :) Ich danke dir vielmals.