Ich habe den shiftOut()
Funktionscode in untersucht wiring_shift.c
und nicht ganz verstanden, was in der digitalWrite-Funktion vor sich geht. Ich sehe, !!(val & (1 << i))
nimmt den Bitwert von, val
aber wie genau funktioniert es?
Die ganze Funktion ist unten.
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
{
uint8_t i;
for (i = 0; i < 8; i++) {
if (bitOrder == LSBFIRST)
digitalWrite(dataPin, !!(val & (1 << i)));
else
digitalWrite(dataPin, !!(val & (1 << (7 - i))));
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
}
}
shift out
ein Wert sein wird (in binärer Form). Und wird einen Takt dazu geben.
!!(val & (1 << i))
ist der komplexeste Teil dieses Codes. Wenn Sie dies verstehen, welchen Teil verstehen Sie dann nicht ?