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