【问题标题】:Arduino HIGH LOWArduino 高 低
【发布时间】:2012-09-08 02:47:58
【问题描述】:

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

【问题讨论】:

    标签: boolean arduino


    【解决方案1】:

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

     #define HIGH 0x1
     #define LOW  0x0
    

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

    【讨论】:

      【解决方案2】:

      把我的两分钱加到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 <==> 0x1LOW <==> INPUT <==> false <==> 0x0。 然后,HIGH <==> !LOWLOW <==> !HIGH...

      【讨论】:

      • INPUT/OUTPUT 完全颠倒了,这太奇怪了(无论如何,从使用 AVR-GCC 的“正常”开发)。关于 AVR MCU,我最喜欢的一点是“1”看起来像“I”(用于输入),而“0”看起来像“O”用于输出,这使得它非常容易记住。
      【解决方案3】:

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

      void digitalWrite(uint8_t, uint8_t);
      

      所以任何整数值(嗯,从 0 到 255)都可以。不知道如果您向它传递的值不是 HIGH 和 LOW,digitalWrite() 的行为可能是什么。

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

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

      【讨论】:

      • 实际上。据我所知,arduino 的任何地方都没有定义 TRUE 和 FALSE,只有 HIGH 和 LOW 以及 true 和 false ......(HIGH=true,LOW=false)
      • 回答上述状态定义的常量。
      【解决方案4】:

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

      digitalWrite() 的第二个参数将:

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

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

      查看文档:digitalWrite()Constants

      【讨论】:

      • HIGH 和 LOW 分别只是数字(1 和 0)。对它们进行按位运算是完全有意义的。 -- 至于 digitalWrite 的行为,第二个参数是一个无符号的 8 位整数,它被视为布尔值 -- 所以任何非零都应该被视为 HIGH。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多