Установите частоту функции генератора, чтобы наблюдать форму синусоиды в приложении для Android - PullRequest
0 голосов
/ 06 марта 2019

Я создал приложение для наблюдения за графиком в реальном времени. Я установил частоту дискретизации 256 Гц в моем коде Arduino. Я дал выходной сигнал 100 Гц через генератор функций, но вместо синусоидальной формы я получил случайную форму волны.

это мой код 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 и заземлению.

введите описание изображения здесь

Как получить синусоидальную форму в моем приложении. Любая помощь по этому вопросу будет принята с благодарностью.

1 Ответ

0 голосов
/ 06 марта 2019

При частоте дискретизации ~ 256 Гц вы просто получаете около 2 асинхронных показаний за период источника 100 Гц.analogRead добавляет (100 .. 150 мкс на 16 МГц Arduino) значительный джиттер к вашей задержке.

Не уверен насчет отправки 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.Когда все в порядке, проверьте, если вы получаете эти цифры через Bluetooth для вашего приложения ...

...