我有一个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()
方法不存在,因此无法编译。所以我接下来要做的是:
C:\Users\john\Documents\ArduinoData\packages\esp8266\hardware\esp8266\2.5.0-beta2\libraries\Ticker
但是,当我检查串行监视器时,它打印的全部是“ True”。我期望值s
以10khz的频率在true和false之间切换。
我做错了什么?
答案 0 :(得分:1)
来自该库的文档:
该库不使用任何硬件计时器,并且可以使用micros()/ millis()函数。
该库通过轮询micros()
和millis()
函数在软件中实现计时器。它要求在update()
中调用loop()
方法。
因此loop()
的开始应为:
void loop()
{
tickerObject.update();
if(s == true)
我正在尝试使用Ticker.h以10kHz的频率持续采样模拟输入
值得一试,但这是一个基于软件的解决方案,它容易抖动,具体取决于事件循环的调用频率。