Hallo,
in der neuen Asuro- Lib ist es so gelöst:
also ein char-Array, nicht nur ein char.Code:void PrintInt(int wert) { char text[16]=" "; itoa(wert,text,10); SerWrite(text,strlen(text)); }
zur Lib:
http://sourceforge.net/projects/asuro
Hallo!
Ich möchte die Daten der beiden Fototransistoren auf der Unterseite von ASURo im Hypertermianl programm auslesen. Allerdings kommen dort nur kryptographische Zeichen an. Habe gelesen, dass von den Fototransistoren 16Bit Werte zurückkommen und man diese erst mit der Funtion itoa() in ASCII umwandeln muss. Das habe ich versucht, jedoch ohne Erfolg. Es kommen immer noch kryptographische Zeichen an.
Hier mal mein Code:
Vielen Dank für eure Hilfe!Code:#include "asuro.h" #include "stdlib.h" int main(void) { //Speicherbereich für die Integer-Werte der Fototransistoren anlegen unsigned int data[2]; unsigned char Wert; //Microcontroller in Ausgangszustand Init(); //FrontLED anschalten FrontLED(ON); //Werte der Fototransistoren einlesen LineData(data); //in ASCII umwandeln itoa(data[1],Wert,10); //Werte an Computer senden SerWrite(Wert,4);//links(T9) while(1); return 0; }
mfg
.patrick
Hallo,
in der neuen Asuro- Lib ist es so gelöst:
also ein char-Array, nicht nur ein char.Code:void PrintInt(int wert) { char text[16]=" "; itoa(wert,text,10); SerWrite(text,strlen(text)); }
zur Lib:
http://sourceforge.net/projects/asuro
Danke linux_80 jetztz kommen vernünftige Zahlen an!
Hab noch eine Frage zur itoa()-Funktion.Und zwar verstehe ich den 3. Übergabeparameter der Funktino nicht. Wofür ist der? (im Beispiel ist er 10)
Danke!
Hallo,
der 3. gibt das Zahlensystem an,
als für Leute mit 10 Finger eine 10
man kann auch eine 2 um Binär zu haben, oder 16 für Hex, muss aber sagen das ich das noch garnicht so verwendet hab ausser als für Dezimal
servus
hab mal ne frage: wenn i die neue lib einfüge und dann mit AVRStudio kompilieren will dann hängt sich mei pc auf.
warum ist das so? muss noch irgendwelche einstellungen vornehmen?
Robotik84
bitte benutze die suchfunktion. wenn du wirklich nichts findest, was dir hilft, dann amch einen neuen thread auf. die frage gehört hier nicht her =) ich vermute mal dass du dann schneller ne antwort bekommst als wenn du deine frage in nem anderen thread versteckst.
ich würde an deiner stelle versuchen, die datei neu runterzuladen, evtl ist sie beschädigt.
MODS: verschieben?
Hallo Patrik,
ich bin auch gerade dabei den asuro auszutesten und versuche verzweifelt den Wert der Fotosensoren mit serwrite auszugeben.
Ich habe die neue WINAVR und die neue LIB für itoa.
Der Comopiler spuckt aber immer noch Galle:
#include "asuro.h"
#include "stdlib.h"
int main(void)
{
//Speicherbereich für die Integer-Werte der Fototransistoren anlegen
unsigned int data[2];
uint16_t data1 ;
Init();
FrontLED(ON);
char text[16]=" ";
while(1);{
data1= LineData(data); //Werte der Fototransistoren einlesen
itoa(data1,text,10); //in ASCII umwandeln
SerWrite(text,1); //links(T9) //Werte an Computer senden
}
return 0;
}
Compiler:
test.c: In function `main':
test.c:14: error: void value not ignored as it ought to be
make: *** [test.o] Error 1
Kannst du mir dein Programm zuschicken oder über das Board bereitstellen. Oder was muss ich ändern?
Gruß
Bernd
data1= LineData(data); //Werte der Fototransistoren einlesen
das ist das problem. LineData giebt nix zurück.
Sorry, ich schon wieder
laut Beschreibung errechnet LineData(data) die Werte der Fototransistoren.
Die Werte (int 0 – 1023) stecken in data[0] und data[1] für linke und rechte Seite.
Wie kann ich denn diese Werte einer Variabelen übergeben, mit der ich dann weiter rechen und auch eine Ausgabe ansteuern kann???
#include "asuro.h"
#include "stdlib.h"
int main(void)
{
unsigned int data[2];
uint16_t data1 ;
Init();
char text[16]=" ";
while(1);{
??? data1= LineData(data); //Werte der Fototransistoren einlesen
itoa(data1,text,10); //in ASCII umwandeln
SerWrite(text,1); //links(T9) //Werte an Computer senden
}
return 0; }
Gruß, Bernd
mit libv2.6.1, asuro.c mit itoa und ersten Geh-Versuchen
mit "unsigned int data[2];" initialisierst du einen sogenannten array, das sind zwei von diesen unsigned-int-datentypen gleich hintereinander folgend.
Die kann man jetzt allle einzeln mit der zahl in den eckigen Klammern ansprechen.
In deinem Fall initialisierst du mit "unsigned int data[2]" also zwei stück unsigned int.
Da der Computer bei 0 zu zählen anfängt kannst du auf das erste int mit
"data[0]" zugreifen, auf das zweite mit
"data[1]"
Beispiel:
Code:while(1) { unsigned int data[2]; //Initialisiert zwei Int-werte hintereinander LineData(data); //Übergibt der Funktion den "data"-array, die schreibt //dann in die zwei int-felder jeweils den linken und rechten Wert. //Die eckigen Klammern brauchst du hier nicht PrintInt(data[0]); //den wert von data[0] ausgeben, also von links PrintInt(data[1]); //den Wert von data[1] ausgeben, also rechts }
Lesezeichen