-
Der Code von radbruch war als Funktion gedacht und wird so verwendet:
Code:
#include "asuro.h"
void PrintChar(unsigned char x) //Funktion wird vor main(void) definier
//und kann später an jeder Stelle des Programms
//aufgerufen werden, wobei der entsprchende char-Wert
//in die Klammern eingetragen wird
{
unsigned char einer, zehner, huni;
char s[3]="hze";
einer=x%10;
zehner=(x-einer)/10;
huni=(x-(zehner*10+einer))/100;
s[0]=huni+'0';
s[1]=zehner+'0';
s[2]=einer+'0';
SerWrite(s,3);
return 0;
}
int main (void)
{
char odo[2];
Init();
FrontLED(ON);
while(1)
{
OdometrieData(odo); //einlesen der odo-Werte
PrintChar(odo[0]); //Ausgeben über die Funktion
PrintChar(odo[1]);
}
return 0;
}
ich hoffe es funktionier, da ich es selber noch nicht probiert habe
über Funktionen müsste aber auch etwas in der Anleitung stehen
-
Der Fehler ist, dass es eine Funktion zur Ausgabe von Zahlenwerten ist und noch ein richtiges Programm dazu fehlt dass diese Funktion nutzt. (Und die Funktion blöderweise auch nicht richtig funktioniert :(
Hier ein funktionierendes Beispiel zu Anwendung (mit der entsprechenden PrintChar-Funktionsvariante von izaseba):
Code:
#include "asuro.h"
unsigned int daten[2], i;
// PrintChar-Funktion nach izaseba (mit int-Parameter)
void PrintChar(unsigned int x)
{
char ergebnis[] = {'0','0','0'};
while (x >=100){
ergebnis[0]++;
x -=100;
}
while (x >= 10) {
ergebnis[1]++;
x -=10;
}
ergebnis[2] +=x;
SerWrite(ergebnis,3);
}
int main(void)
{
Init();
SerWrite("\r\nOdometrietest\r\n",17); // Begrüßung
while (1)
{
OdometrieData(daten); // Daten einlesen
PrintChar(daten[0]); // Wert links senden
SerWrite("-",1); // Trennzeichen
PrintChar(daten[1]); // Wert rechts senden
SerWrite("\r\n",2); // zwei Steuerzeichen senden
for(i=0; i<50; i++) Sleep(255);
}
return(0);
}
Nach dem Start langsam direkt am Codescheibenritzel drehen...
Gruß
mic
[Edit]
@hai1991:
ne, funzt auch nicht, weil 1.: void kein return braucht und 2:.odo[] ein int sein muss. Und weil eben meine PrintChar()-Funktion überhaupt nicht funktioniert, keine Ahnung warum.
-
es geht, aber ich blick nicht, wiso da 3Stellige Zahlen ausgegeben werden...
meiner meinung nach sind die auch völlig ungeordnet, selbst wenn das rad still steht kommen verschiedene zahlen...^^
-
... weil der String so definiert ist: char ergebnis[] = {'0','0','0'};
Wenn der Wert nicht dreistellig ist werden trotzdem die führenden Nullen ausgegeben. Wenn du das ändern willst - nur zu :)
Die Werte schwanken vermutlich weil es ein asuro ist. Minimale Hardware erfordert eben pfiffige Software. Wenn du die Funktion testen willst:
unsigned int x;
for(x=0;x<1000;x++) PrintChar(x);