tausend = x/1000;
x = x%1000;
hunni = x/100;
x = x%100;
zehner = x/10;
x = x%10;
einer = x;
du arbeitest hier mit ganzahldivision also brauchste nachkomma net beachten
Hi leute,
ich hab mich nun an die Odometrie gewagt um gleich entäuschung zu erleben
ich steh heute mit dem gesammten prggen iwie auf dem schlauch sry xD
hier der code:
iwas passt nicht..Code:#include "asuro.h" // Linienverfolgung auf die einfachste Art unsigned int data[2]; unsigned char s[5] = "thze\0"; void PrintCharR(unsigned int x) { unsigned char einer, zehner, huni, tausend; x = data[1]; einer=x%10; zehner=(x-einer)/10; huni=(x-(zehner*10+einer))/100; //nicht mit %, da "%" zu viel speicher brauch if((x == 1000) || (x > 1000)) tausend= 1; else tausend= 0; s[0]=huni+'0'; s[1]=zehner+'0'; s[2]=einer+'0'; s[3]=tausend+'0'; SerWrite(s,5); } int main(void) { Init(); unsigned char a[4]; int i=0; while(1) { OdometrieData(data); // aktuelle Helligkeitswerte der Fototransistoren einlesen SerWrite("Rechter Fototransistor: ",24); //Wert des Rechten Fototranistors Senden PrintCharR(a); SerWrite("\r\n\n",3); for (i=0; i<2000; i++) //5 Sekunden Pause { Sleep(72); } } return 0; }
zwar: ich möchte zunächst die Odometrie von "von hand" testen. d.h. der asouro sol über serwrite alle paar sec. den odo wert über IR senden..
ich werde das rad von hand bewegen um schwarze bzw. weise fläche anzuzeigen...
iuch hoffe ihr könnt mir helfen.. und versteht was ich meinxD
gruß
tausend = x/1000;
x = x%1000;
hunni = x/100;
x = x%100;
zehner = x/10;
x = x%10;
einer = x;
du arbeitest hier mit ganzahldivision also brauchste nachkomma net beachten
diese prozedur dauert dafür SEHR lange und ist extrem speicherfressend...
wenn Ceos' möglichkeit nicht so ideal ist, was für möglichkeiten gibt es dann noch??Zitat von damaltor
plz help me :P
das würede mich auch uinterssieren ... vor allem WAS ist so speicehrfressend ? das modulo ?
jap, das modul ist speicherfressend, aber es muss ja noch andere möglichkeiten geben, meine sollte eig. funktionieren. aber da ist irgendwo ein "Hintergrund fehler" drinne. ich steh zz auf dem schlauch *schnell mal hinsetz*Zitat von Ceos
das mit dem modul wuste ich shcon, aus nem versuch der Linienfolgung (siehe anderer Tread von mir)
an was liegt das mein code nicht funzt?
modulo benutzt fliesskomma-arithmetik. das dauert sehr lange und braucht speicher. funktionieren sollte es trotzdem, auch wenn eine bemerkbare pause an dieser stelle auftreten kann.
Hallo listner,
wie wäre es einfach mit den Funktionen aus der LIB:
Ist zwar auch nicht der winzigklein-Programmcode, aber im Moment scheint dein Programm ja noch nicht allzu lang zu seinCode: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) ; } void SerPrint ( unsigned char *data) { unsigned char i = 0; while (data [i] != 0x00) UartPutc (data [i++]); } void PrintInt ( int wert) { char text [7]; // "-12345" itoa (wert, text, 10); SerPrint (text); }
Du nutzt dann void "PrintInt (data[0]);" in deinem main(), und gut ist. Hoffe ich.
Gruß Sternthaler
Lieber Asuro programieren als arbeiten gehen.
an dem sleep erkennt man das er nicht die 2.7er asurolib benutzt also wird er das vermutlich nicht haben
EDIT um diesem post noch einen sinn zu verleihen ... lad dir die asuro lib 2.71 installier sie und arbeite damit, da ist n haufen zeug bei was du brauchen kannst
@ ceos
ich möchte gerne ohne die neuen libs arbeiten, dies ist der grund damit ich proggen besser leren. desshalb versuche ich "alles" selber zu schreiben
:P ich hoffe das ist i.o.
kann mir noch jemand helfen :P
Lesezeichen