Forum: Mikrocontroller und Digitale Elektronik Arduino: Byte am Serial Monitor immer komplett ausgeben


von Philipp L. (khz-tone)


Lesenswert?

n'Abend,

Leider ist google heute nicht mein Freund, also muß das Forum herhalten.
Ich suche nach einer Möglichkeit einen Wert binär am Serial-Monitor oder 
auf einem LCD als komplettes Byte anzuzeigen auch wenn der wert kleiner 
0x80 ist.
In meinem Code werden Nullen vor dem höchsten High Bit nicht angezeigt.
1
int wert = 0x65;
2
Serial.print(wert, BIN);

was kann ich anders machen?

Cheers
Philipp

von Markus M. (mark_m)


Lesenswert?

Die Arduino Methoden, auch das String Objekt nicht, geben keine 
führenden Nullen aus. Da musst Du selbst etwas basteln.

Wie man ein Byte parsed findest Du in den Tutorials dieses Forums.

Tip: itoa()

Grüsse

von PittyJ (Gast)


Lesenswert?

Wenn man das von Hand macht (Schleife 7 -> 0) und die Bits als '1' oder 
'0' ausgibt, braucht das auch nur 5 Zeilen.
Ist das so schwer zu implementieren? Braucht man dafür schon Google?

von Peter D. (peda)


Lesenswert?

1
void printbin8( uint8_t val )
2
{
3
  for( uint8_t i = 8; i; i--, val <<= 1 )
4
    putchar( !!(val & 0x80) + '0' );
5
}

von Philipp L. (khz-tone)


Lesenswert?

PittyJ schrieb:
> Wenn man das von Hand macht (Schleife 7 -> 0) und die Bits als '1' oder
> '0' ausgibt, braucht das auch nur 5 Zeilen.
> Ist das so schwer zu implementieren? Braucht man dafür schon Google?


Peter Dannegger schrieb:
> void printbin8( uint8_t val )
> {
>   for( uint8_t i = 8; i; i--, val <<= 1 )
>     putchar( !!(val & 0x80) + '0' );
> }

vielen Dank für die Antworten, auf das bin ich auch schon gekommen. 
Dachte vielleicht gibt es einen Befehl der mir das so ausgibt. Die 
schleife verstehe ich soweit, aber was wenn ich einen dezimalen Wert von 
3 Stellen(Bsp: 903) 4- stellig anzeigen will(Bsp: 0903). wie kommt dann 
die "Null" vor den Wert?

von Sebastian W. (sebastian_w29)


Lesenswert?

Hallo Philipp,

wenn du in der Arduino-IDE auf Hilfe->Referenz klickst, öffnet sich eine 
lokale Version von http://arduino.cc/en/Reference/HomePage. Schon 
gelesen? Da steht nämlich was interessantes: "It links against AVR Libc 
and allows the use of any of its functions; see its user manual for 
details."

Wenn du da die Referenz öffnest 
(http://www.nongnu.org/avr-libc/user-manual/modules.html), findest du 
unter "<stdio.h>: Standard IO facilities" die interessante Funktion 
"sprintf", die du in deinem Fall zum Beispiel so benutzen kannst:

int val = 903;
char buf[7];
sprintf(buf,"%04d",val);
Serial.print(buf);

Die Funktion sprintf und ihre Kollegen sind recht mächtig was 
Formatierung von Ausgabe angeht. Die komplette Anleitung ist daher recht 
lang, siehe 
http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html unter 
vfprintf.

LG, Sebastian

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.