试图了解一个循环访问40位的for循环

时间:2019-04-07 22:13:18

标签: c++ arduino bit

我最近订购了DHT22温度和湿度传感器以及仍在等待的arduino nanos,我正在阅读一些教程以及当我得到它们时要做的事情。他们,并正在阅读如何使用DHT22,它非常简单,并且在阅读了数据表之后,对它们如何遍历40位数据感兴趣了,因为我之前从未在代码中使用过字节,因此在库中查找在这里https://github.com/markruys/arduino-DHT

DHT22的数据表在https://cdn-shop.adafruit.com/datasheets/Digital+humidity+and+temperature+sensor+AM2302.pdf

这是循环遍历位的主要代码块。

这是我想发生的事情;您有一个i的8位整数,该整数从-3开始,因为它使用3位开始与传感器通信。 i <2 * 40使i保持在2以下,但迭代40次(这是暗处的刺伤,我之前从未见过)。

接下来是我根本不了解的位,while循环,如果引脚为高-1且==(i(i为0)&1),则while循环将为LOW,或者如果我是1,那么循环将很高。哪一个流到if语句中if(i> = 0 &&(i&1))的位置,但最终我不总是1?如果没有修改我?根据我的观察,当信号为低电平时,您不想移动位吗?

我可以看到其余的代码在做什么,我只是不理解它,第一个if语句将i数据的位通过每个循环移动,如果信号为高电平> 30微秒,则该位为1,并将1添加到数据中。

UPDATE table_name
SET    t1.type_name = t2.type_name
FROM   table_name t1
INNER JOIN (
    SELECT DISTINCT progID, type_name 
    FROM table_name 
    WHERE type_name <>''
) t2 ON t1.progID = t2.progID
WHERE t1.type_name <>''

2 个答案:

答案 0 :(得分:2)

  

这是我想发生的事情;您有一个从-3开始的i的8位整数,因为   它使用3位开始与传感器通信。我<2 * 40使我低于2但   迭代40次(这是暗处的刺伤,我之前从未见过)

https://en.cppreference.com/w/cpp/language/operator_precedence

*(作为乘法运算符)的优先级高于<(小于),因此对术语进行分组,以便首先解析*

因此(i <2 * 40)得到解决(i <(2 * 40))。相当于(i <80)。

  

接下来是我根本不太了解的那一点,while循环,如果引脚   是高-1并且是==(i(i为0)&1),则while循环将为LOW,或者如果i为   1,则循环将为高。

do { 
...
}
while ( digitalRead(pin) == (i & 1) ? HIGH : LOW );

在这里,==具有更高的优先级,因此首先解决(digitalRead(pin) == (i & 1)。即,当digitalRead(pin)为0且i为偶数,digitalRead(pin)为1且i为奇数时为true。 [因为(i&1)有效地测试了最低位] 然后解析三元子表达式,如果为true,则返回HIGH,如果为false,则返回LOW。

必须运行,希望可以带您到达那里。

答案 1 :(得分:0)

// We're going to read 83 edges:
// - First a FALLING, RISING, and FALLING edge for the start bit
// - Then 40 bits: RISING and then a FALLING edge per bit

当“ while”循环中断时,数据位向左移动: 条件的三元运算符结果(高或低)计算为false。由于我们缺少HIGH和LOW的定义,因此尚不清楚何时应该发生。

但是,由于:

  • 大写标识符通常表示该标识符代表一个宏,
  • 具有严格恒定的真值的HIGH和LOW将使三进制表达式完全没有意义((如果为true,否则为false ??),
  • something 可以区分上升沿值和下降沿,
  • 几乎没有其他明智的事情发生(除非引脚读取功能在内部完成,并且注释讨论只是冷水机)

...我们应该假设它们每个都扩展为某种表达式,并且THAT的结果确定循环是否应该停止。

因此,很可能在以下情况下发生data <<= 1;

  • digitalRead(pin)高且*~something~*
  • digitalRead(pin)偏低,*~something else~*

据我所知,如果〜something〜〜something〜取决于age的值,这将是最有意义的。 / p>