首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Arduino ECG溅射出完全随机数

Arduino ECG溅射出完全随机数
EN

Stack Overflow用户
提问于 2015-01-21 10:50:31
回答 1查看 150关注 0票数 0

你好,StackExchange社区,

我在ECG/EKG设计中遇到了一个问题。我正在尝试使用Arduino作为微控制器来创建ECG,以便通过蓝牙(JY-MCU)发送/检索心率测量结果。我知道我的电路正在工作,因为当我把LED放在运算放大器的输出端和它的地线上时,如果我轻轻地把手放在引线上,我会得到轻微的灯光变暗。我知道问题出在我的代码上。我已经在这个项目上工作了一段时间,仍然无法找到解决方案。这是我的示意图。

对不起,你可能想翻转你的屏幕来看照片!下面是我认为不正确的代码。代码只是最低限度的。

代码语言:javascript
复制
// External variables
const int  signal = 8;    // Pin connected to the filtered signal from the circuit
unsigned long time;   
unsigned long frequency;
char freq[3];

// Internal variables
double period = 2000;
double starttime = 2000;
double input = 0;
double lastinput = 0;
unsigned long death = 0;

// initialize the library with the numbers of the interface pins

void setup() {
pinMode(signal, INPUT);
Serial.begin(9600);
}

void loop() {
delay(500);

time = millis();
input = digitalRead(signal);

 period = time - starttime; // Compute the time between the previous beat and the one that has just been detected
 starttime = time; // Define the new time reference for the next period computing
 death = time;
 frequency = 60000/period;
 freq[0] = frequency/100+48; // Sort the hundreds character and convert it in ASCII
 freq[1] = (frequency/10)%10+48; // Sort the thents character and convert it in ASCII
 freq[2] = frequency%10+48; // Sort the units character and convert it in ASCII
 Serial.println(freq);
}

我得到的只是120或119作为我的价值。它在这两者之间波动。我试着把我的电阻器换掉,但是什么也没做。我也完全去掉了引脚8和电路板之间的电线,它仍然在119到120之间波动。我完全不知道这是怎么回事!如果有人能帮我一下,我将不胜感激。谢谢!

EN

回答 1

Stack Overflow用户

发布于 2015-01-21 11:07:28

你的代码并没有做任何有用的事情。它当然不是测量输入频率-事实上,它甚至不关心输入信号的值是多少,并且无论外部发生什么,它的行为都是相同的。它所做的就是测量调用loop()之间的时间间隔,并将此时间转换为以每分钟循环数为单位的频率。由于loop()中有500毫秒的延迟,因此频率为2 Hz = 120周期/分钟,这与您看到的数字一致。

坦率地说,我怀疑您的电路是否能够测量ECG信号,即使您确实得到了正确的代码-它只是太粗糙了-但是为了至少测量一些与频率相关的东西,您可能想尝试用loop()实现以下代码

代码语言:javascript
复制
input = digitalRead(signal);
while (input == digitalRead(signal))
    ; // wait for input signal to change state (sync)
start = millis();
while (input != digitalRead(signal))
    ; // wait for input signal to change state (first part of period)
while (input == digitalRead(signal))
    ; // wait for input signal to change state (one complete period)
end = millis();
period = end - start;
freq = 60000 / period;

请注意,如果您的输入信号未定期更改状态,则会挂起。

还请注意,只有在输入信号完全干净的情况下,这才会给出有用的频率测量,即,只在感兴趣的频率上改变状态的信号,没有噪声跃迁。在实践中,您很可能最终只是测量电源、嗡嗡声或其他背景噪声的频率。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28058806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档