我要进行高频率的采样,500HZ。也就是2ms采样一次。 为了消除jitter我运用了MsTimer2来interrupt,但是因为采样速度太快,Arduino每次都来不及反应就卡了。请问有什么办法处理这件事。我的要求是2ms读一次A0,然后能记录生成文件就行。
我原来的代码发在下面: 一运行,Serial Port就卡了
#include <MsTimer2.h>
const int INTERVAL = 2;
const unsigned int EVERY = 1000; // 每一千次调用 ppp( )一次
double sum, sss; // 和, 平方和
unsigned long n = 0;
unsigned long m = 0;
void ppp( ) {
int average;
int stdErr;
average = sum / n;
stdErr = sqrt((sss - (sum/n*sum) ) / n );
Serial.print("average:");
Serial.print(average);
Serial.print(" ");
Serial.print("stdErr:");
Serial.print(stdErr);
}
int k;
unsigned int gg=0; // for check
void ggyy() {
k = analogRead(A0);
++n;
sum += k; // 总和
sss += k*k; // 平方和
if(++gg == EVERY){
gg=0; // clear counter
ppp( );
m = millis();
Serial.print("#S|LOGTEST|[");
Serial.print("Time:");
Serial.println(m);
}
}
void setup(){
Serial.begin(9600);
MsTimer2::set(INTERVAL,ggyy);
MsTimer2::start();
}
void loop() {
delay(800000);
MsTimer2::stop(); delay(0); MsTimer2::start();
}
关于Arduino Serial.print()函数太慢的问题。
答案:1 悬赏:60 手机版
解决时间 2021-02-17 23:36
- 提问者网友:风月客
- 2021-02-17 17:33
最佳答案
- 五星知识达人网友:洒脱疯子
- 2021-02-17 18:49
#include <MsTimer2.h>
const int INTERVAL = 2;
const unsigned int EVERY = 1000; // 每一千次调用 ppp( )一次
double sum, sss; // 和, 平方和
unsigned long n = 0;
unsigned long m = 0;
void ppp( ) {
int average;
int stdErr;
average = sum / n;
stdErr = sqrt((sss - (sum/n*sum) ) / n );
Serial.print("average:");
Serial.print(average);
Serial.print(" ");
Serial.print("stdErr:");
Serial.print(stdErr);
}
int k;
unsigned int gg=0; // for check
void ggyy() {
k = analogRead(A0);
++n;
sum += k; // 总和
sss += k*k; // 平方和
if(++gg == EVERY){
gg=0; // clear counter
ppp( );
m = millis();
Serial.print("#S|LOGTEST|[");
Serial.print("Time:");
Serial.println(m);
}
}
void setup(){
Serial.begin(9600);
MsTimer2::set(INTERVAL,ggyy);
MsTimer2::start();
}
void loop() {
delay(800000);
MsTimer2::stop(); delay(0); MsTimer2::start();
}
const int INTERVAL = 2;
const unsigned int EVERY = 1000; // 每一千次调用 ppp( )一次
double sum, sss; // 和, 平方和
unsigned long n = 0;
unsigned long m = 0;
void ppp( ) {
int average;
int stdErr;
average = sum / n;
stdErr = sqrt((sss - (sum/n*sum) ) / n );
Serial.print("average:");
Serial.print(average);
Serial.print(" ");
Serial.print("stdErr:");
Serial.print(stdErr);
}
int k;
unsigned int gg=0; // for check
void ggyy() {
k = analogRead(A0);
++n;
sum += k; // 总和
sss += k*k; // 平方和
if(++gg == EVERY){
gg=0; // clear counter
ppp( );
m = millis();
Serial.print("#S|LOGTEST|[");
Serial.print("Time:");
Serial.println(m);
}
}
void setup(){
Serial.begin(9600);
MsTimer2::set(INTERVAL,ggyy);
MsTimer2::start();
}
void loop() {
delay(800000);
MsTimer2::stop(); delay(0); MsTimer2::start();
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯