24

我有一个 Arduino,我想知道 HIGH 和 LOW 到底是什么意思,就实际值而言……它们是有符号的整数吗?无符号整数?无符号字符???他们的价值观是什么?我猜 HIGH 和 LOW 可能是无符号整数,所有位分别设置为 1 和 0,但我不确定。我希望能够使用 HIGH 和 LOW 进行按位运算,或者将 HIGH 或 LOW 以外的值传递给 digitalWrite。另外,我如何将整数转换为 HIGH 或 LOW 以便我可以做到这一点?

4

4 回答 4

43

看看hardware/arduino/cores/arduino/Arduino.h(至少在 Arduino 1.0.1 软件中)第 18 和 19 行:

 #define HIGH 0x1
 #define LOW  0x0

意思是,这些定义是十六进制整数值,您可以对它们进行任何您想要的按位运算 - 但是,目前我还不清楚这有多大意义。还要记住,这些值可能会在以后发生变化——这会使对它们的按位操作更加不明智。

于 2012-09-14T22:52:01.630 回答
20

将我的两分钱添加到编码的答案中:

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 <==> 0x1LOW <==> INPUT <==> false <==> 0x0。然后,HIGH <==> !LOW还有LOW <==> !HIGH……

于 2013-12-04T12:15:34.743 回答
19

如果您想将其他值传递给 digitalWrite() 您可以查看函数原型

void digitalWrite(uint8_t, uint8_t);

所以任何整数值(嗯,从 0 到 255)都可以。不知道 digitalWrite() 的行为会是什么,如果您将其传递给除 HIGH 和 LOW 之外的值。

由于 HIGH 和 LOW 是简单定义的常量,因此您不能将整数转换为它们(该操作也没有意义)。看来您可以在任何预期 HIGH 和 LOW 的地方使用整数。

但实际上这样做是一个坏主意,原因有很多 - HIGH 和 LOW 的定义可能会改变(不太可能但可能),从类型的角度来看它没有意义。相反,您应该在程序中使用逻辑来确定应该将 HIGH 还是 LOW 传递给函数调用,然后实际传递常量。

于 2012-09-14T23:04:05.047 回答
1

digitalWrite() 的第一个参数是一个引脚号。

digitalWrite() 的第二个参数将:

  1. 将高电平(3.3 或 5 V)或低电平(0 V)写入二进制输出或
  2. 启用 (HIGH) 或禁用 (LOW) 二进制输入上的内部上拉电阻。

任何一个参数的按位运算都没有意义。也许您需要使用analogWite()?

请参阅文档:digitalWrite() 常量

于 2015-02-11T03:30:51.903 回答