我有一个 Arduino,我想知道 HIGH 和 LOW 到底是什么意思,就实际值而言……它们是有符号的整数吗?无符号整数?无符号字符???他们的价值观是什么?我猜 HIGH 和 LOW 可能是无符号整数,所有位分别设置为 1 和 0,但我不确定。我希望能够使用 HIGH 和 LOW 进行按位运算,或者将 HIGH 或 LOW 以外的值传递给 digitalWrite。另外,我如何将整数转换为 HIGH 或 LOW 以便我可以做到这一点?
4 回答
看看hardware/arduino/cores/arduino/Arduino.h
(至少在 Arduino 1.0.1 软件中)第 18 和 19 行:
#define HIGH 0x1
#define LOW 0x0
意思是,这些定义是十六进制整数值,您可以对它们进行任何您想要的按位运算 - 但是,目前我还不清楚这有多大意义。还要记住,这些值可能会在以后发生变化——这会使对它们的按位操作更加不明智。
将我的两分钱添加到编码的答案中:
Arduino.h
(1.0) 的第 18--25 行是:
#define HIGH 0x1
#define LOW 0x0
#define INPUT 0x0
#define OUTPUT 0x1
#define true 0x1
#define false 0x0
因此,HIGH <==> OUTPUT <==> true <==> 0x1
和LOW <==> INPUT <==> false <==> 0x0
。然后,HIGH <==> !LOW
还有LOW <==> !HIGH
……
如果您想将其他值传递给 digitalWrite() 您可以查看函数原型
void digitalWrite(uint8_t, uint8_t);
所以任何整数值(嗯,从 0 到 255)都可以。不知道 digitalWrite() 的行为会是什么,如果您将其传递给除 HIGH 和 LOW 之外的值。
由于 HIGH 和 LOW 是简单定义的常量,因此您不能将整数转换为它们(该操作也没有意义)。看来您可以在任何预期 HIGH 和 LOW 的地方使用整数。
但实际上这样做是一个坏主意,原因有很多 - HIGH 和 LOW 的定义可能会改变(不太可能但可能),从类型的角度来看它没有意义。相反,您应该在程序中使用逻辑来确定应该将 HIGH 还是 LOW 传递给函数调用,然后实际传递常量。
digitalWrite() 的第一个参数是一个引脚号。
digitalWrite() 的第二个参数将:
- 将高电平(3.3 或 5 V)或低电平(0 V)写入二进制输出或
- 启用 (HIGH) 或禁用 (LOW) 二进制输入上的内部上拉电阻。
任何一个参数的按位运算都没有意义。也许您需要使用analogWite()?
请参阅文档:digitalWrite() 常量