我最近订购了一个DHT22温度和湿度传感器来玩,以及一些arduino nanos,我仍然在等待,我正在阅读一些教程和事情,我要做的事情,当我得到它们,通过阅读如何使用DHT22这是相当简单的,读完数据表后,我感兴趣的是他们如何迭代通过40位的数据,因为我从来没有玩过在代码中的字节,所以查找它的库,这是https://github.com/markruys/arduino-DHT。
https://cdn-shop.adafruit.com/datasheets/Digital+humidity+and+temperature+sensor+AM2302.pdf此处提供了DHT22的数据表
这是循环通过这些位的主要代码块。
这就是我认为正在发生的事情;你有一个从-3开始的8位int,因为它使用3位来开始与传感器通信。I<2* 40将i保持在2以下,但迭代了40次(这是在黑暗中刺杀,我以前没有见过它)。
接下来是我完全不太理解的位,while循环,如果引脚是高-1并且是== (i(i是0) & 1),那么while循环将是低的,或者如果i是1,那么循环将是高的。然后进入if语句where if (i >= 0 && (i& 1)),但我最终不是总是1吗?如果不是,是什么在修改i?根据我所看到的,你不想在信号低的时候移动比特?
我可以看到剩下的代码在做什么,我只是不理解它,第一个if语句在每个循环中移动数据留下的位i,如果信号在> 30微秒是高电平,那么位是1,并向数据添加1。
// 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
// To keep our code simple, we accept any HIGH or LOW reading if it's max 85 usecs long
uint16_t rawHumidity = 0;
uint16_t rawTemperature = 0;
uint16_t data = 0;
for ( int8_t i = -3 ; i < 2 * 40; i++ ) {
byte age;
startTime = micros();
do {
age = (unsigned long)(micros() - startTime);
if ( age > 90 ) {
error = ERROR_TIMEOUT;
return;
}
} while ( digitalRead(pin) == (i & 1) ? HIGH : LOW );
if ( i >= 0 && (i & 1) ) {
// Now we are being fed our 40 bits
data <<= 1;
// A zero max 30 usecs, a one at least 68 usecs.
if ( age > 30 ) {
data |= 1; // we got a one
}
}
switch ( i ) {
case 31:
rawHumidity = data;
break;
case 63:
rawTemperature = data;
data = 0;
break;
}
}
// Verify checksum
if ( (byte)(((byte)rawHumidity) + (rawHumidity >> 8) + ((byte)rawTemperature) + (rawTemperature >> 8)) != data ) {
error = ERROR_CHECKSUM;
return;
}
发布于 2019-04-08 11:40:29
// 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时,就会发生这种情况。因为我们缺乏对高和低的定义,所以还不太清楚什么时候应该发生这种情况。
但是,由于:
<代码>F210>
...we可能会假设它们各自展开为某种类型的表达式,结果决定了循环是否应该停止。
因此,data <<= 1;
很可能在以下情况下发生:
digitalRead(pin)
为高,*~something~*
digitalRead(pin)
为低,*~something else~*
在我看来,如果~某物~和~其他~物~取决于age
的值,这将是最有意义的。
https://stackoverflow.com/questions/55564143
复制相似问题