void setup() {
Serial.begin(9600);
// 変換したいグレーコード値(例として 1110 を設定。これはバイナリの 1011 です)
uint16_t grayValue = 0b101111111110;
// バイナリへの変換処理を実行
int16_t binaryValue = grayToBinary(grayValue);
// 結果を出力
Serial.print("Gray: ");
Serial.println(grayValue, BIN);
Serial.print("Binary: ");
Serial.println(binaryValue, BIN);
}
void loop() {
// 空
}
// グレーコードをバイナリに変換する関数
int16_t grayToBinary(int16_t gray) {
int16_t binary = gray;
// grayが0になるまで、右シフトとXORを繰り返す
while (gray > 0) {
gray >>= 1; // 1ビット右にシフト
binary ^= gray; // シフトした値とXORをとる
}
return binary;
}
// バイナリをグレーコードに変換する関数
int16_t binaryToGray(int16_t num) {
// 元の値と、右に1ビットシフトした値の排他的論理和(XOR)をとる
return num ^ (num >> 1);
}