我有一个Arduino,我想知道实际值到底是什么HIGH和LOW意味着......他们是签名的吗?无符号整数?无符号字符???他们的价值观是什么?我猜测HIGH和LOW可能是无符号整数,所有的位分别设置为1和0,但我不确定。我希望能够使用HIGH和LOW进行按位操作,或者将HIGH或LOW以外的值传递给digitalWrite。另外,我如何将整数转换为HIGH或LOW以便我可以这样做?
答案 0 :(得分:37)
查看hardware/arduino/cores/arduino/Arduino.h
(至少在Arduino 1.0.1软件中),第18行和第19行:
#define HIGH 0x1
#define LOW 0x0
意思是,这些定义为十六进制整数值,你可以用它们做你想要的任何按位操作 - 但是,对于我来说,目前还不是很清楚。还要记住,这些值可能会在以后发生变化 - 这会使对它们的按位操作更加不明智。
答案 1 :(得分:16)
将我的2c添加到codeling's answer。 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
...
答案 2 :(得分:13)
如果要将其他值传递给digitalWrite(),可以查看函数原型
void digitalWrite(uint8_t, uint8_t);
因此任何整数值(0到255)都可以。不知道如果你传递一个非HIGH和LOW之外的值,digitalWrite()的行为是什么。
由于HIGH和LOW只是简单定义的常量,因此不能向它们强制转换整数(也不会对该操作有意义)。看起来你可以在任何可能的HIGH和LOW的地方使用整数。
实际上这样做是个坏主意,但由于很多原因 - HIGH和LOW的定义可能会改变(不太可能但可能),从类型的角度来看也没有意义。相反,您应该在程序中使用逻辑来确定是应该将HIGH还是LOW传递给函数调用,然后实际传递常量。
答案 3 :(得分:1)
digitalWrite()的第一个参数是一个引脚号。
digitalWrite()的第二个参数将是:
1)将HIGH(3.3或5v)或LOW(0v)写入BINARY OUTPUT或
2)启用(HIGH)或禁用(LOW)BINARY INPUT上的内部上拉。
任一参数的按位运算都没有意义。也许你需要使用analogWite()?
请参阅文档:digitalWrite() Constants