Herrminator schrieb:
> Easylife schrieb:
>> weil es im terminal binär ankommt.
>>
>> unsigned char c1, c2, c3;
>> c1 = '0' + (sekunden / 10);
>> c2 = '0' + (sekunden % 10);
>> c3 = 0x0a; // new line
>> send(c1);
>> send(c2);
>> send(c3);
>
> danke easylife klappt so!!
>
> nun klappt das aber nur bei sekunden oder wie?
> Bei millisekunden gibt der dann aber z.B. j7 aus..
dicker, dann schreib doch nicht, dein wert ist sekunden zwischen 0 und
10, sondern milisekunden zwischen 0 und 10000.
versuche mal zu verstehen, was mein code macht.
"sekunden / 10" ergibt die zehnerstelle
"sekunden % 10" ergibt die einerstelle (siehe modulo operator)
wenn du da irgend eine zahl >10 einsetzt, kommt natürlich bullshit raus.
'0' + x
ergibt einen Ascii Code. Günstigerweise liegen die Ziffern direkt
hintereinander, so dass ('0'+5) das Zeichen '5' ergibt.
hast du sprintf() zur verfügung?
dann gehts so:
1 | #include <stdio.h>
|
2 | #include <string.h>
|
3 |
|
4 | (...)
|
5 |
|
6 | char buf[10];
|
7 | int i;
|
8 | sprintf(buf, "%d\n", msekunden);
|
9 | for (i=0; i<strlen(buf); i++)
|
10 | send(buf[i]);
|
falls nicht, dann so:
1 | int divider;
|
2 | int digit;
|
3 |
|
4 | divider = 10000;
|
5 | for(i=0; i<5; i++) {
|
6 | digit = msekunden / divider;
|
7 | send('0'+digit);
|
8 | msekunden -= digit * divider;
|
9 | divider /= 10;
|
10 | }
|