Hallo,
ich benötige eine Funktion, welche mir aus einem Byte die einzelnen Bits ausliest, damit ich mit den einzelnen "Werten" eine weitere Funktion "beschreiben" kann.
eingabe(B00100010);
ausgabe(0,0,1,0,0,0,1,0)
In der Funktion ausgabe würden die ehemaligen Bits dann als einzelne Bytes (mit dem Wert 0 oder 1) weiterverarbeitet werden.
Hoffe, man kann mich verstehen.
Gruß Chris
Edit: So?
void eingabe(byte input) // Konverter um ankommende Bits in Bytes umzuwandeln
{
ausgabe(bitRead(input, 7),bitRead(input, 6),bitRead(input, 5),bitRead(input, 4),bitRead(input, 3),bitRead(input, 2),bitRead(input, 1),bitRead(input, 0));
}
Hast du schon mal versucht, deine Funktion zu compilieren?
das ist immer der erste Hinweis, ob etwas so geht oder nicht. In deinem Fall: Nicht.
Ich würde es eher so machen:
Du übergibst an die Funktion da zu zerlegende Byte und eine Array für die einzelnen Ergebnisse.
Dann werden in einer for-Schleife die einzelnen Bits abgefragt und an dem entsprechende Arraypaltz gespeichert.
Hier der complette Code inklusive Testsketch.
void isolateBit(byte _input, int _out[8]){
for (int i = 0; i<8;i++){
_out[7-i] = bitRead(_input, i);
}
}
void setup(){
Serial.begin(57600);
byte input = 0xFD;
int out[8] = {9, 9, 9, 9, 9, 9, 9, 9};
Serial.print("Input: ");Serial.print(input); Serial.print(" Bin: ");Serial.println(input,BIN);
isolateBit(input, out);
Serial.print("out: "); for (int i=0; i<8; i++) {Serial.print(out[i]);Serial.print(", ");}Serial.println();
}
void loop(){}
Anmerkung:
Das funktioniert weil Array Variablen Zeiger auf das erste Element sind. Normalerweise sind Parameter call-by-value und können in der Funktion nicht verändert werden da nur eine Kopie übergeben wird.
Deshalb gibt es Zeiger/Pointer und Referenzen. Arrays sind eben verstecke Zeiger, deshalb kann man sie einfach so übergeben und die Änderung ist außen sichtbar.