6 つの値 (4x 3 ビット + 1 ビット) を 16 ビット整数にエンコードし、シリアル経由で ATTINY84 に転送して 2 バイトに分割しています。これは、バイトを 16 ビット int に再アセンブルするまでは問題なく動作します。
例:
0001110000001100
に変換7180
され、バイト配列に分割される次のバイナリ状態を送信しています[18, 28]
。
そのバイト配列を EEPROM に入れ、次の電源サイクルで読み取ります。
電源を入れ直した後、シリアル デバッグ出力は次のようになります。
18
28
7180
素晴らしい。すべて良さそうで、その部分の私のコードは次のとおりです。
byte d0 = EEPROM.read(0);
byte d1 = EEPROM.read(1);
unsigned int w = d0 + (256 * d1);
しかし今、最も奇妙なことが起こります。ビットごとの読み取りを行うと、次のように返されます。
0011000000111000
should be:
0001110000001100
経由:
for(byte t = 0; t < 16; t++) {
serial.print(bitRead(w, t) ? "1" : "0");
}
ビット表現が完全に逆になります。そんなことがあるものか?または、何かが足りないのかもしれません。
また、元の値を受け取るために実際の 3 ビットの位置を抽出すると、0..7
すべてオフであることを確認しました。
どんな助けでも大歓迎です。