c - Text Bit-weiße ausgeben / übertragen

Gast #3195814
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.
Angehängte Dateien:
Gast #3195825
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 
('&').
#3195829
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren