Монитор ударов в минуту, но имея проблемы с кодированием? Кодирование не будет печатать никаких значений
Любые советы о том, какую кодировку корректировать. Новичок в Arduino.
const int sensorPin = A0;
float voltage=0.0;
int sensorVal=0;
int heartbeats=9;
float BPM=0.0;
const int led1=2;
const int led2=3;
int starttime = 0;
boolean counted = false;
void setup() {
pinMode(sensorPin, INPUT);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
Serial.begin(9600);
boolean counted = false;
}
void loop() {
starttime = millis();
while (millis()<starttime+10000)
{
sensorVal = analogRead(sensorPin);
if (sensorVal >550 && counted == false)
{
counted = true;
}
else if (sensorVal < 500)
{
counted = false;
}
}
BPM = heartbeats*6;
Serial.println("Your BPM is");
Serial.println(BPM);
BPM =0;
heartbeats =0;
}
@Kevin O Regan, 👍1
Обсуждение2 ответа
Существует два основных метода измерения частоты, и это в основном то, что вы пытаетесь сделать.
Существует подсчет частоты и синхронизация частоты. Последнее включает в себя измерение времени между последовательными импульсами и вычисление по нему мгновенной частоты. Хорошо подходит для быстро меняющихся частот, когда вам нужно сразу узнать частоту.
Подсчет частоты-это то, что вы пытаетесь сделать, и в основном это подсчет количества ребер, которые возникают в течение определенного периода времени.
Однако ваш метод немного испорчен: главным образом потому, что вы забыли подсчитать ребра. Вы написали какой-то разумный код для поиска ребра, но не смогли ничего сделать с этим ребром.
Кроме того, ваш код блокируется в течение 10 секунд, что может быть хорошо в этом сценарии, но не является хорошей привычкой, чтобы позволить себе войти.
Вместо этого вы должны рассмотреть что-то более похожее на это:
void loop() {
static int count = 0;
static bool counted = false;
static uint32_t ts = millis();
int val = analogRead(sensorPin);
if ((val > 550) && (counted == false)) {
counted = true;
count++;
} else if (val < 500) {
counted = false;
}
if (millis() - ts >= 10000) {
ts += 10000; // Вы можете присвоить ts значение millis (), но
// добавив 10 секунд, он отменяет любой дрейф
// вызвано другими задержками в вашем скетче.
int BPM = count * 10;
count = 0;
Serial.print("BPM: ");
Serial.println(BPM);
}
}
Предположим, что входной сигнал представляет собой низкочастотную квадратную волну. Несколько способов сделать это.
Используйте вход для управления счетчиком на внутренних часах. Он дает самые точные измерения с разрешением ниже американского.
Используйте внешние прерывания или прерывания pcint для определения времени начала и начала ребра.
Ждите между краями.
...
Передискретизация и алгоритм помогут сгладить измерение.
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
Где вы на самом деле считаете BPM? Кроме того, "starttime" слишком мал, чтобы хранить время. Кроме того, ваш метод расчета времени неверен, так как он не справится с ролловером
миллис
., @MajenkoНезначительные проблемы в вашем коде могут быть исправлены, но фактическое измерение частоты ударов в минуту - это сложный алгоритм обработки, выходящий далеко за рамки этого сайта, и никто не захочет запускать его на Arduino на базе ATmega. Вам повезет больше, если вы выберете другой проект., @Chris Stratton
Зависит от того, как вы это делаете, но процесс определения пульса очень прост, как и определение уровня газа в крови (путаница часто возникает с оксиметром, который на самом деле измеряет "газ", а не O2 и может быть обманут интоксикацией CO). Чтобы получить точный подсчет, я предлагаю использовать прерывание или, может быть, взглянуть на код, подобный коду о скорости потока воды, который вы должны читать с определенной скоростью, как в вашем случае. Есть локк здесь: https://www.sparkfun.com/products/11574 На вкладке документ этого продукта вы найдете код., @Peter