Hallo, wie kann ich mein Programm ändern, damit ich printf mit dieser Ausgabe ZB: PINC1,2,4,7 are high und nicht: PinC1 are High PinC2 are High PinC4 are High PinC7 are High Ich habe versuch das Treffen in einer anderem Array zu kopieren, aber aus der For-Schleife bekomme ich nur das letzte Element. Danke uint8_t PinC_Status[8] = {0, 1, 2, 3, 4, 5, 6, 7}; uint8_t *Ptr_PinC_Status; Ptr_PinC_Status = PinC_Status; uint8_t Value = PORTC; for( uint8_t i = 0; i < 8; i++ ) { if(Value & ( 1 << i )) { printf("PINC%i are high", Ptr_PinC_Status[i]); } }
gast schrieb: > Hallo, > wie kann ich mein Programm ändern, damit ich printf mit dieser Ausgabe > ZB: PINC1,2,4,7 are high und nicht: > PinC1 are High > PinC2 are High > PinC4 are High > PinC7 are High Durch nachdenken? Was muss in welcher Reihenfolge ausgegeben werden? Das "PINC" ist fix und wird daher vor der Schleife ausgegeben. Innerhalb der Schleife wird die jeweilige Zahl (wozu eigentlich das Zwischenarray?) ausgegeben, wenn der Pin high ist. Schwierigkeit dabei ist eigentlich nur, das Komma entsprechend einzuschmuggeln. Aber da kann man sich mit einem Merker behelfen. Das Komma wird nur ausgegeben wenn der Merker gesetzt wurde und der wird nach der ersten ausgegebenen Zahl gesetzt. Damit kommt vor die erste Zahl kein Komma und bei allen weiteren auszugebenen Zahlen kommt ein Komma davor. Und dann kommt zum Schluss, nach der Schleife der wiederrum konstante Text "are high" hinten drann.
1 | uint8_t Value = PINC; |
2 | uint8_t PrintKomma; |
3 | |
4 | if( Value != 0 ) // ist überhaupt ein Bit ungleich 0? |
5 | {
|
6 | printf( "PINC " ); |
7 | |
8 | PrintKomma = FALSE; |
9 | |
10 | for( uint8_t i = 0; i < 8; i++ ) |
11 | {
|
12 | if( Value & ( 1 << i ) ) |
13 | {
|
14 | if( PrintKomma ) |
15 | printf( ", " ); |
16 | printf( "%d", (int)i ); |
17 | PrintKomma= TRUE; |
18 | }
|
19 | }
|
20 | |
21 | printf( " are high" ); |
22 | }
|
23 | else
|
24 | printf( "No Pins on PINC are set" ); |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.