Arduino HIGH LOW



我有一个Arduino,我想知道HIGHLOW到底是什么意思,就实际值而言......他们是否int签名? unsigned intunsigned char?他们的价值观是什么?我猜 HIGHLOW 可能都是 unsigned int s,所有位分别设置为 1 和 0,但我不确定。我希望能够使用 HIGHLOW 进行按位运算,或者将 HIGHLOW 以外的值传递给 digitalWrite。另外,如何将整数转换为HIGHLOW以便我可以执行此操作?

看看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 <==> 0x1LOW <==> INPUT <==> false <==> 0x0.然后,HIGH <==> !LOWLOW <==> !HIGH...

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

digitalWrite() 的第二个参数是:

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

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

请参阅文档:digitalWrite() 常量

关于输入和输出:输出为 1,因为 DDRD 必须设置为 1 才能将 I/O 设置为输出。

最新更新