hi
hab follgendes problem:
ich will so etwas über die serielle schnittstelle senden:
Usart_transmit("hier kommt ein wort: , variable, weiterer text");
um genau zu sein: Usart_transmit("#" variable "P" variable2 "T"
variable3);
in der variable sollte eine zahl stehen zb: 1200
also ich hab es folgendermaßen gelöst funzt aber net:
1
2
volatileintentfernung=1000;
3
charentf[5];
4
5
voidmain()
6
{
7
itoa(entfernung,entf,10);
8
USART_TRANSMIT("#5P",entf,"T1000");
9
}
10
11
voidUSART_TRANSMIT(unsignedchar*str)
12
{
13
while(*str!=0)
14
{
15
while(!(UCSRA&(1<<UDRE)));
16
UDR=*str++;
17
}
18
}
kann mir irgendwer helfen? mit beistrich zwischen den strings geht es
nicht hab auch schon ersucht einen platzhalte einzubauen
("#5P %2,1c T123",entf); geht aber auch net --> da schreibt er nur alles
zwischen den " .." hinaus aber setzt nicht die entfernung für den
platzhalter ein
was mach ich falsch?
mfg ralph
Wenn Du USART_TRANSMIT() mit drei Parametern aufrufst, dann sollte die
Funktion auch drei Parameter entgegen nehmen. Andererseits, wenn der 1.
und 3. Parameter immer die gleichen sind, dann ruf die Funktion eben mit
einem Parameter auf:
1
USART_TRANSMIT(entf);
und bastel den Rest innerhalb der Funktion vorn- und hintendran. So wie
Du es im Text beschrieben hast, wären es zwei Parameter und
vorn/dazwischen/hintendran werden immer dieselben Zeichen hineinkopiert.
>USART_TRANSMIT("#5P",entf,"T1000");
und
>void USART_TRANSMIT(unsigned char *str)
passt eben nicht
du kannst nur einen kompletten string versenden
also must du den vorher zusammenkopieren
entweder mit sprintf(...) oder mit strcat(..) die strings+ werte zu
einem srink kopieren dann in den uart
volatile int entfernung= 1000;
char entf[5];
char string[20];
void main()
{
itoa(entfernung, entf, 10);
strcat(string, "#5P");
strcat(string, entf);
strcat(string, "T1000");
USART_TRANSMIT(string);
while(1)
{
}
}
alternativ müsste
sprintf(string,"#5P%lT1000",entfernung); auch gehen
frisst aber mehr speicher weil die komplette sprintflib eingebunden wird
vom schreiben her vertu ich mich oft ^^
also net zu ernst nehmen hier .. is aber so ein weg vlt ...
asso da du 3 variablen hast vlt anders ...
sprintf(string,"#%iP%iT%i",var1,var2,var3);
uart_send( string);
mit strcat wird das sonst rrecht lang ..dürfte aber immernoch kleiner
werden wie sprint
Du kannst natürlich auch den Weg weitergehen, den Mark bereits
angedeutet hat und Funktionen zu deinem Nutzen einsetzen :-)
Zunächst mal schafft man sich ein Sammelsurium an Funktionen, die zb
einzelne Character, komplette Strings und Integer ausgeben können. Dann
benutzt man diese Funktionen um höhere Einheiten, zb ein komplettes
Kommando auszugeben. Und plötzlich hast du dann eine Komfortfunktion,
die du in main nur noch mit deinen 3 Werten aufrufen musst, und die
genau das Gewünschte tut.
Eine eigene Frage?
Dieser Thread ist über 17 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.