首页 > 解决方案 > Arduino反转字节

问题描述

我正在使用 I2C i/o 扩展器来读取多达 8 个输入。

i/o 扩展器提供 8 位输出.... 1 字节。因为 e/o 扩展器有内部上拉,所以当所有端口不连接到 GND 时,所有 8 位都是 1。

所以输出是 255 ... B11111111

当所有端口都连接到 GND.. 所有 8 位变为 0。

所以输出是 0 ... B00000000

一切都很好,但我想反转信号,当所有端口都没有连接到 GND 时,输出应该是:0 ... B00000000。

当所有端口都连接到 GND 时,输出应为 255 ... B11111111

Bitwise NOT 的使用并不是我真正想要的。

从 255 到 -1

这很合逻辑,因为在他们的网站上提到了它:

关联

我的代码并没有真正起作用......

byte OutputI2C;
byte OutputI2CInvert;
byte InputModbus;
void setup() {
    Serial.begin(9600);
}

void loop() {
    Wire.requestFrom(B0111000, 1); //connect to i/o expander
    OutputI2C = Wire.read(); // Read data
    OutputI2CInvert = OutputI2C; // make copie
    delay(250);
    Serial.print(~OutputI2CInvert); // invert
}

所以我希望有人知道如何在没有负输出的情况下反转字节。

标签: arduinobit-manipulationbyte

解决方案


由于您的类型byte是无符号的,通常按位不应该工作......您可以尝试在打印之前将输出转换为这种类型吗?

就像是Serial.print((byte) ~OutputI2CInvert);

这应该迫使 Arduino 不将第一位视为符号位。


推荐阅读