首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >外部数字中断与dht11

外部数字中断与dht11
EN

Stack Overflow用户
提问于 2017-02-24 21:50:31
回答 1查看 687关注 0票数 1

我有一个Arduino Pro Mini 5v,16兆赫,它连接到一个数字开关在第2引脚。这个开关是用来唤醒阿杜伊诺从睡眠中使用外部数字中断。我还有一个DHT11温度传感器连接到引脚9。我想实现的是,当Arduino醒着5秒时,当pin 2上的开关很高时,我想读取温度传感器并返回温度。我正在使用Tillart的DHT11库,当我这样做时,它会返回一个TIME_OUT错误。我对此唯一可能的解释是,当DHT11和引脚2上的开关一起读取时,电压会发生变化吗?任何指向解决方案的指针都将受到极大的赞赏。谢谢。

编辑1:添加的代码

代码语言:javascript
复制
        #include <LowPower.h>
        #include <dht.h>
        int pin2 = 2;
        dht DHT;
        #define DHT11_PIN 9

        void pin2interrupt(void)
        {
           // Function called when awoken from sleep
           // Detach interrupt to stop it from continuosly firing when in normal mode
        }

        void enterSleep(void)
        {
           attachInterrupt(0, pin2interrupt, HIGH);
           Serial.println("Sleeping");
           delay(100);
           LowPower.powerDown(SLEEP_FOREVER, ADC_OFF, BOD_OFF);
           Serial.println("Awake!");
        }


        void setup()
        {
           Serial.begin(115200);
           pinMode(pin2, INPUT);
           pinMode(DHT11_PIN, INPUT);
        }

        int seconds = 0;

        void loop()
        {
           delay(1000);
           seconds++;
           Serial.println("Awake in the loop!");
           Serial.println(seconds);

           if (digitalRead(pin2) == LOW && seconds == 5)
           {
               seconds = 0;
               Serial.println("No child detected, so going to sleep!");
               delay(200);
               enterSleep();
           }
           else if (seconds == 5)
           {
               Serial.print("DHT11, \t");
               int chk = DHT.read11(DHT11_PIN);
               switch (chk)
               {
                   case DHTLIB_OK:
                   Serial.print("OK,\t");
                   break;
                   case DHTLIB_ERROR_CHECKSUM:
                   Serial.print("Checksum error,\t");
                   break;
                   case DHTLIB_ERROR_TIMEOUT:
                   Serial.print("Time out error,\t");
                   break;
                   default:
                   Serial.print("Unknown error,\t");
                   break;
               }
            // DISPLAY DATA
            Serial.println(DHT.temperature, 1);

            delay(2000);
            seconds = 0;
            }
         }

编辑2:我还忘了提到我正在使用LowPower库RocketScream来让Arduino入睡。这个库可以在这里找到:https://github.com/rocketscream/Low-Power

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-13 19:15:23

正如Rob在DHT11库的官方Github页面上讨论的问题部分所讨论的那样,造成这个问题的原因是,一些DHT11传感器需要更长的时间才能将数据传输回板,然后才能在数据表上指定50 As左右的数据。因此,如果遇到此问题,请尝试通过将DHTLIB_TIMEOUT值除以约400的值来增加dht头文件上的F_CPU值,然后再试一次。这使得电路板可以等待超过50毫秒的时间才能从传感器接收回数据。如果这个修复不起作用,您可能需要尝试使用示波器来测量响应时间,因为似乎有些DHT11是不同构建的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42448901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档