在Android应用中设置函数发生器频率以观察正弦波形

时间:2019-03-06 04:56:30

标签: arduino android-bluetooth

我构建了一个用于观察实时图形的应用程序。我在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和公共接地。

enter image description here

如何在我的应用程序中获取正弦波形。对此的任何帮助将不胜感激。

1 个答案:

答案 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进行检查。 没关系的话,请测试是否通过蓝牙将这些数字发送到您的应用...