如果 loop 只运行一个模拟引脚,并且使用一个过滤器,即可正常输出( 0~500 ),但是创建数组储存多个过滤后的模拟引脚数值就有问题了,输出异常(1000~20000)
#include "EMGFilters.h"
const int SensorInputPin[] = {A0, A1, A2, A3, A4, A5};
EMGFilters myFilter;
SAMPLE_FREQUENCY sampleRate = SAMPLE_FREQ_500HZ;
NOTCH_FREQUENCY humFreq = NOTCH_FREQ_50HZ;
void setup()
{
myFilter.init(sampleRate, humFreq, true, true, true);
Serial.begin(115200);
}
void loop()
{
Serial.println(square(myFilter.update(analogRead(SensorInputPin[0]))));
}
long unsigned int square(unsigned int x)
{
return (x * x);
}
只修改 loop
void loop()
{
int envelops[12] = {0};
for (int i = 0; i < 2; i++)
{
for (int x = 0; x < 6; x++)
{
envelops[i * 6 + x] = square(myFilter.update(analogRead(SensorInputPin[x])));
}
delayMicroseconds(50);
Serial.println(envelops[i * 6 + 1]);
}
}
我搞不懂了,逐次打印看看变量名
void loop()
{
int envelops[12];
for (int i = 0; i < 2; i++)
{
int ii = 0;
for (int x = 0; x < 6; x++)
{
Serial.printf("i:%d x:%d\n", i, x);
envelops[((i * 6) + x)] = square(myFilter.update(analogRead(SensorInputPin[x])));
Serial.printf("Output:%d index: %d\n", envelops[((i * 6) + x)], ((i * 6) + x));
}
ii++;
delay(1000);
}
}
long unsigned int square(unsigned int x) {
return (x*x);
}
搞不明白,咋输出上万的值了呢?
再看看正常输出的
void loop()
{
int x1= square(myFilter.update(analogRead(SensorInputPin[0])));
Serial.printf("analogRead:%d\n",analogRead(SensorInputPin[0]));
Serial.printf("output:%d\n",x1);
delay(1000);
}
这很正常啊,怎么一用 for 循环函数就有问题了😂
然后尝试
void loop()
{
int x1= square(myFilter.update(analogRead(SensorInputPin[0])));
int x2=square(myFilter.update(analogRead(SensorInputPin[1])));
int x3=square(myFilter.update(analogRead(SensorInputPin[2])));
int x4=square(myFilter.update(analogRead(SensorInputPin[3])));
int x5=square(myFilter.update(analogRead(SensorInputPin[4])));
int x6= square(myFilter.update(analogRead(SensorInputPin[5])));
Serial.printf("analogRead:%d\n",analogRead(SensorInputPin[0]));
Serial.printf("output:%d\n",x1);
delay(1000);
}
发现原本输出动辄几万的,已经下降到一千左右了,但仍然是异常输出
过滤器就是一个函数计算输出的,怎么调用的时候出现问题了?
loop 仅用一条指令Serial.println(square(myFilter.update(analogRead(每个模拟引脚输入))))
,正常输出 0~500 的值,如果用多个变量或 for 啥,就输出上万的值了。。。我尝试创建多个过滤器,给每个输入单独用Filter1
,Filter2
等等,问题依旧。。。
过滤器代码链接:https://github.com/oymotion/EMGFilters/blob/master/EMGFilters.cpp
咋解决啊😂
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.