Forum: PC-Programmierung c - Text Bit-weiße ausgeben / übertragen


von Alex (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

bin nach reichlich Recherche auf dieses Forum gestoßen und ich hoffe ihr 
könnt mit helfen!

Ich bin mit C nicht ganz so vertraut, habe aber eine Fallstudie wo ich 
mit C Proggen muss.
Ich möchte einen Text Bitweise ausgeben bzw. senden und auf der anderen 
Seite empfangen. Hier geht es aber nur um das Senden.

Ich möchte einen Text weitergeben und er soll in Bits zerlegt werden. 
Ich habe nun das Problem das der Text nicht bearbeitet wird, glaube ich 
zumindest. Er nimmt glaub ich nur die for-Schleife und hört dann bei i=7 
auf, weil es kommt immer das selbe raus.
Hänge fest und komme nicht weiter, hoffe ihr könnt mir helfen und Tipps 
geben...
1
sendByte (char c) {
2
    printf("START1");
3
        
4
        int i = 0;
5
                          
6
        for (i=0; i<8; i++) {
7
       
8
                    if (c && (i<<1)) {                           
9
                    printf("lampe an");
10
                    }                                    
11
                    else {         
12
                    printf("lampe aus");
13
                    }    
14
        }
15
              
16
        printf("ENDE2\n");        
17
}  
18
19
void send(char *c)
20
{
21
        while (*c != 0)  {      
22
                sendByte(*c);
23
                c++;
24
        }
25
}
26
                
27
                       
28
int main() {
29
    send("HALLO");
30
    return 0;   
31
}

Start, Stop, an, aus stehen exemplarisch für die µC befehle. Die C für 
den µC ist angehängt

Ich habe ein µC von Tinkerforge (Brick 1.0) und ein Bricklet (I/O 4) wo 
eine LED angeschlossen ist zur Verfügung. Es soll am Ende so arbeiten:
Startbit -> Lampe an
Bit's -> 1 Lampe an, 0 Lampe aus
Stopbit -> Lampe aus
Auf der anderen Seite ist ein Helligkeitssensor der das ganze auslesen 
soll.

von g457 (Gast)


Lesenswert?

> weil es kommt immer das selbe raus.

..und das wäre was ∗genau∗? 40 (== 5∗8) mal 'lampe an'? Oder was 
anderes?

> if (c && (i<<1)) {
        ^^
Hier willst Du kein logisches Und ('&&') sondern ein binäres welches 
('&').

von Markus M. (mark_m)


Lesenswert?

1
if (c && (i<<1))

Diese Ziel macht auf jeden Fall nicht das, was Du dir vorstellst!

So soll diese schon eher funktionieren.
1
if (c & (1<<i))

Was macht die Zeile:
(1<<i) erstellt dir die Bit-Maske für das Bit von Interesse. Der Index 
gibt die Anzahl der Shift vor.
& ist das Bit weise UND. && ist das logische UND.

Grüsse

von Alex (Gast)


Lesenswert?

Danke, für die schnelle Hilfe -> funktioniert!

kleiner Denkfehler von mir....

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.