我构建了一个用于观察实时图形的应用程序。我在Arduino代码中将采样率设置为256hz。我通过函数发生器给出了100hz的输出,但是我得到的是随机波形而不是正弦波形。
这是我的Arduino代码:
#include <SoftwareSerial.h> //import Software Serial library
SoftwareSerial myStream(0, 1); //pins for Rx and Tx respectively
int ECG;
void setup()
{
// put your setup code here, to run once:
pinMode(A0, INPUT); //LDR
myStream.begin(115200);
Serial.begin(9600);
}
void loop()
{
ECG = analogRead(A0);
Serial.println(ECG);
if (myStream.available() > 0)
{
char re = myStream.read();
switch (re)
{
case 'E':
start();
break;
}
}
//about 256Hz sample rate
delayMicroseconds(3900);
}
void start()
{
while (1)
{
myStream.print('s');
myStream.print(floatMap(analogRead(ECG), 0, 1023, 0, 255), 2);
//about 256Hz sample rate
delayMicroseconds(3900);
if (Serial.available() > 0)
{
if (Serial.read() == 'Q')
return;
}
}
}
float floatMap(float x, float inMin, float inMax, float outMin, float outMax)
{
return (x - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;
}
这是我的电路图。另外,我将示波器输出连接到A0和公共接地。
如何在我的应用程序中获取正弦波形。对此的任何帮助将不胜感激。
答案 0 :(得分:0)
在〜256 Hz的采样率下,每个100 Hz源的周期仅获得约2个异步读数。 AnalogRead增加了延迟(在16 MHz Arduino上为100 .. 150 µs),这会增加您的延迟。
不确定SoftwareSerial发送@ 115200。 (接收无法以该速度正常工作)
浮动也很慢。
不确定您的期望。
首先检查原始数据:
void setup() {
Serial.begin(115200); // allows for 10 char/ms
}
void loop() {
static unsigned long oldmillis;
if (millis() != oldmillis) {
oldmillis = millis();
// 1 kHz sample rate :
int ECG = analogRead(A0)*100L / 1024;
Serial.println(ECG); // 0 .. 99
}
}
也许添加您的开始/停止通信或使用Arduino SerialPlotter进行检查。 没关系的话,请测试是否通过蓝牙将这些数字发送到您的应用...