achja was ich noch vergessen hab - was bewirkt die funktion readline()
du meinst doch linedata() oder ???
mfg sebastian
also erst ma ich finds echt klasse, dass du mir weiterhilfst - hätte sonst en dickes prob da der unterschied zwischen c auf einem microcontroller und java doch ein recht großer unterschied ist
so ich hab jetzt ma in die datei "stdlib.h" reingeschaut - bin mir allerdings net sicher, ob ich des verstanden hab, da ich nicht ganz verstehe was "/c" darstellen soll
sehe ich das richtig das itoa() folgende parameter hat:
itoa ("das zu verwandelnde intzeichen", "die variable in der das asci- zeichen gespeichert werden soll", "die basis [in meinem fall 10]")
ps: woher weis ich den generell welche datei welche funktionen enthält?
(wie zum beispiel das uint8_t in der datei "inttypes.h" - ok hier ist der name selbsterklärend aber bei itoa() ist das für mich nicht ersichtlich)
mfg sebastian
achja was ich noch vergessen hab - was bewirkt die funktion readline()
du meinst doch linedata() oder ???
mfg sebastian
Indem man z.B. Bücher liest, wobei itoa kein ANSI-Standard ist es wird wohlwoher weis ich den generell welche datei welche funktionen enthält?
(wie zum beispiel das uint8_t in der datei "inttypes.h" - ok hier ist der name selbsterklärend aber bei itoa() ist das für mich nicht ersichtlich)
integer to aSCII heißen.
Wenn man mit avr-gcc arbeitet soll man auch manual dazu lesen Guckst Du.
Das Tutorial auf mikrocontroller.net was ich Dir oben gepostet habe, ist auch eine gute Referenzseite.
Und die Dattenbläter zu dem µC sind auch ein muß, naja, wenn man die Funktionen von asuro.h benutzt, nicht so schnell, aber früher, oder später schon.
fast richtig, der zweite parameter muß aber ein Array sein bzw. zeiger darauf.itoa ("das zu verwandelnde intzeichen", "die variable in der das asci- zeichen gespeichert werden soll", "die basis [in meinem fall 10]")
Beispiel:
Danach hast Du in Deinem Array puffer[0] oder *puffer 0x31,Code:uint16_t zahl = 1000; uint8_t puffer[5]; itoa (zahl,puffer,10);
puffer[1] oder *puffer+1 0x30 usw.
Es ist wohl jetzt kein Problem das ganze an UART bzw serwrite zu schicken.
Bedenke nur, daß der puffer Anzahl der zu erwarteten Zahlen + 1 groß ist, weil itoa noch ein "\0" hinten dran hängt.
???da ich nicht ganz verstehe was "/c" darstellen soll
Ich hoffe, daß es so alles stimmt
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
hey also ich meinte net "/c", sondern "\c" - das wird in der datei stdlib.h verwendet
achja noch was ganz anderes. was bedeutet denn "Danach hast Du in Deinem Array puffer[0] oder *puffer 0x31, puffer[1] oder *puffer+1 0x30 usw. " - ohje ich muss ja echt schwer von begriff sein roflomfg
naja ich hab mich nochmal an einem programm versucht :
als ergebniss bekam ich "links:38(links:985links:38(links:38(links:54(link s:54(links:38(¾inks:»8€(links:38(" also irgendwas scheint da nocht net zu stimmenCode:#include "asuro.h" #include "inttypes.h" #include "stdlib.h" int main(void) { uint8_t transistorenstring[5]; uint16_t transistorenzahl[2]; Init(); FrontLED(ON); LineData(transistorenzahl); itoa(transistorenzahl[0],transistorenstring,10); SerWrite("links:",6); SerWrite(transistorenstring,4); while(1); return 0; }
allerdings kam 38( bei messungen im dunklen heraus und 985 im hellen -spricht das system scheint schon zu funktionieren
allerdings ist es merkwürdig, dass zu oft die selben werte eingelsen werden
ich vermute ma das "(" dadurch entsteht, da der eingelsene wert eine stelle zu wenig hat
ps: zu der zeile "uint8_t transistorenstring[5];" // bedeutet diese 5, dass 5 bits verwendet werden oder dass 5 dieser strings mit dieser deklaration deklariert werden??
mfg sebastian
Naja das vielleicht nicht unbedingt, ich würd sagen, das ist alles Neuland für Dich.ohje ich muss ja echt schwer von begriff sein
C ist auch nicht unbedingt ganz einfach für Einsteiger, oder Umsteiger
Es wäre besser gewesen C von Grund auf zu erlernen, Du befindest Dich jetzt irgendwie in der Mitte...
Das sieht doch schon gut aus, Dein Programm...
Nur die Endlosschleife hätte ich nicht zum Schluß gesetzt, sondern nach FRONTLED(ON); etwa so
Dann kriegst Du laufend die Werte angezeigt, klar ?Code:while(1){ Linedata..... .... .... Serwrite.... }
Dieses \c ist eine Escapesequenz nur \c fand ich in keiner Liste
Ich denke es ist da um den Text irgendwie zu Formatieren, aber mit welchem Programm ?
Beachte es einfach nicht, vielleicht erklärt es uns jemand
Damit liegst Du schonmal richtig, damit liest Du über die Werte hinaus...ich vermute ma das "(" dadurch entsteht, da der eingelsene wert eine stelle zu wenig hat
Es liegt an der SerWrite Funktion, ich find sie Käse,mit der Länge, die man übergeben muß.
Abhilfe schaft hier wieder eine weitere Funktion (wer hätte es gedacht) und sie heißt auch ziemlich einfach strlen(zeiger auf Dein String), zu finden in string.h...
wenn Du jetzt also schreibst
SerWrite(puffer,strlen(puffer));
müßte es weg sein.
Besser wäre natürlich eine Serwrite Funktion, die ohne Länge auskommt, sondern das Ende der Zeichenkette an dem "\0" erkennt.
Wenn itoa schon mit Null terminiert, warum soll man es nicht nutzen.
Weder,nochzu der zeile "uint8_t transistorenstring[5];" // bedeutet diese 5, dass 5 bits verwendet werden oder dass 5 dieser strings mit dieser deklaration deklariert werden??
Sagmal, Du hast Erfahrung mit Java, gibt es bei Java keine Arrays ?
Die Deklaration
uint8_t transistorenstring[5] heißt :
Lege ein Feld von 5 Elementen an und zwar vom Typ uint8_t (unsigned char) oder 0-255 also genau 1 Byte.
Das Feld sieht z.B so aus:
transistorenstring[0] = 1;
transistorenstring[1] = 2;
transistorenstring[2] = 3;
transistorenstring[3] = 4;
transistorenstring[4] = 5;
Beachte, daß alles um eine Stelle nach unten rutscht.
Wenn Du jetzt den Quatsch an eine Funktion übergibst, z.B. Serwrite
übergibst Du einen Zeiger darauf und zwar zeiger auf das Erste Element
Serwrite(transistor) könnte man auch schreiben
Serwrite(&transistor[0])
Die Funktion kann jetzt auf den Zeiger zugreifen und zwar mit dem sternchen womit man dann denn Inhalt des Speichers meint, worauf der Zeiger zeigt ( ist das kompliziert zu erklären )
also etwa so:
b = *transistorenstring++;
Das ist jetzt aber Zeiger Arithmetik, kann man lieber in einem C-Buch nachlesen, bevor ich mir hier einen abbreche
O weh, hab ich jetzt wieder ein Roman geschrieben
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
yo die idee das einlesen in die while schleife einzubinden is ne clever idee
ähm ich hab mich da wohl ein bissel falsch ausgedrückt - klar gibt es in java arrays wollte eigentlich nur wissen ob dieses array jetzt ein array vom typ string oder char is aber das hat sich ja jetzt geklärtzu der zeile "uint8_t transistorenstring[5];" // bedeutet diese 5, dass 5 bits verwendet werden oder dass 5 dieser strings mit dieser deklaration deklariert werden??
wenn das mein lehrer liest steinigt er mich
ok ich glaub, dass müsste so hinhauen - wird nachher gleich ma getestet
hab mir jetzt auchn paar Bücher zu c programmierung aus der unibibliothek karlsruhe geholt
so langsam steig ich hier durch
danke für die unterstützung
mfg sebastian
yopp hat funktioniert - ein dickes dankeschön
folgender quelltext is dabei rausgekommen
Code:#include "asuro.h" #include "inttypes.h" #include "stdlib.h" #include "string.h" int main(void) { uint8_t transistorstringrechts[4]; uint8_t transistorstringlinks[4]; uint16_t transistorenzahl[2]; Init(); FrontLED(ON); while(1) { LineData(transistorenzahl); itoa(transistorenzahl[0],transistorstringlinks,10); itoa(transistorenzahl[1],transistorstringrechts,10); SerWrite("links:",6); SerWrite(transistorstringlinks,strlen(transistorstringlinks)); SerWrite("rechts:",7); SerWrite(transistorstringrechts,strlen(transistorstringrechts)); } return 0; }
Ist doch schön
Es ist auch wirklich gut, daß Du Dir ein paar Bücher zu C besorgt hast, ohne das wird es nicht einfach sein...
Nur noch einen Kompiler um aufm PC zu üben, und in ein paar Tagen lachst Du über Deine Probleme von Heute bzw. gestern.
Gruß Sebastian
Linus TorvaldSoftware is like s e x: its better when its free.
ja dann ^^
nochmals vielen dank
Lesezeichen