如何为ESP8266在100微秒内实现代码自动回叫?

时间:2019-02-08 22:42:32

标签: esp8266 ticker

我有一个ESP8266 NodeMCU 12E开发板,正在使用Arduino IDE。我正在尝试使用Ticker.h以10khz的频率一致地对模拟输入进行采样,即每100us采样一次。我注意到Ticker sampler; sampler.attach(0.0001,callbackfunc);无效,因为attach()不会采用值0.0001。

因此,我根据所看到的一些指南编写了以下代码:

#include <ESP8266WiFi.h>
#include <Ticker.h>

bool s = true;
void getSample()
{
  s = !s;
}
Ticker tickerObject(getSample, 100, 0, MICROS_MICROS);

const char *ssid =  "___";  // Change it
const char *pass =  "___";  // Change it

void setup()
{
  Serial.begin(115200);
  Serial.println(0);      //start
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);

  tickerObject.start();

}


void loop()
{
    if(s == true)
    {
      Serial.println("True");
    }
    else
    {
      Serial.println("False");
    }
}

但是,由于tickerObject.start()方法不存在,因此无法编译。所以我接下来要做的是:

  1. 下载最新的股票报价包as a zip file
  2. 从第1点解压缩包
  3. 备份C:\Users\john\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.5.0-beta2\libraries\Ticker
  4. 将第3点中提到的文件夹替换为第2点中的Ticker文件夹。
  5. 重新启动我的Arduino IDE
  6. 编译并运行代码
  7. 打开串行监视器

但是,当我检查串行监视器时,它打印的全部是“ True”。我期望值s以10khz的频率在true和false之间切换。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

来自该库的文档:

  

该库不使用任何硬件计时器,并且可以使用micros()/ millis()函数。

该库通过轮询micros()millis()函数在软件中实现计时器。它要求在update()中调用loop()方法。

因此loop()的开始应为:

void loop()
{
    tickerObject.update();

    if(s == true)
  

我正在尝试使用Ticker.h以10kHz的频率持续采样模拟输入

值得一试,但这是一个基于软件的解决方案,它容易抖动,具体取决于事件循环的调用频率。