Невозможно получить данные домашней ЭКГ.

Последние пару недель я не смог найти решение своей проблемы. Моя проблема в том, что я не могу получить данные из моей самодельной ЭКГ, созданной с помощью Arduino. Я полный любитель в этом, но я почти уверен, что это проблема схемы. Вот как сейчас выглядит моя схема. (Примечание: то, что написано «Dual O» в крайнем левом углу, — это инструментальный усилитель, а не операционный усилитель, такой как тот, что посередине)

Вот код, который я использую:

const int  signal = 5;    // Вывод подключен к отфильтрованному сигналу схемы
unsigned long currentBeatTime;   
unsigned long previousBeatTime;

unsigned long frequency;

// Внутренние переменные
unsigned long period = 0;
int input = 0;
int lastinput = 0;


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

previousBeatTime = millis();
}

void loop() {
delay(500);
input = digitalRead(signal);

if ((input != lastinput) && (input == HIGH)) {
    // Если состояние контакта только что изменилось с низкого на высокое (детектор края)
    currentBeatTime = millis();

    period = currentBeatTime - previousBeatTime; // Вычисляем время между предыдущим ударом и тем, который только что был обнаружен
    previousBeatTime = currentBeatTime; // Определить новую привязку времени для вычислений следующего периода
}

lastinput = input; // Сохраняем текущее состояние контакта для сравнения на следующей итерации цикла

// Обнаруживаем, что тактов нет более 2 секунд
if ( (millis() - previousBeatTime) > 2000 ) 
{ 
    Serial.println("dead");
}
else 
{
    if (period <= 0) 
    {
        frequency = 0;
    }
    else 
    {
        frequency = 60000/period; // Вычисляем частоту сердечных сокращений в ударах в минуту (уд/мин) с периодом в миллисекундах
    }

    Serial.print(frequency);
    Serial.println(" : alive! ");
}
}

Я был бы признателен, если бы кто-нибудь ответил мне как можно скорее. Спасибо!

РЕДАКТИРОВАТЬ: Вот схема. Я использовал Fritzing, и, поскольку я новичок в этом деле, это выглядит как полный беспорядок. В любом случае, вот оно:

2

Спасибо за помощь.

, 👍0

Обсуждение

Я посмотрел на это, но не готов пытаться расшифровать вашу компоновочную схему. Возможно, вам больше повезет с принципиальной схемой., @Milliways

Эй, извините, вот моя схема., @user3744439

«не могу получить данные моей самодельной ЭКГ» — что вы под этим подразумеваете? Может ли ваш хост (в данном случае ПК) идентифицировать JY и правильно подключиться к нему? Если да, и он подключается, но вы ничего не получаете на стороне ПК, попробуйте добавить Serial.print("dummy") в свой метод setup(), чтобы проверить, правильно ли настроен последовательный терминал., @Omer


1 ответ


2

Работало ли что-нибудь из этого? Что вы с ним сделали с тех пор? Мой подход к отладке заключался бы в том, чтобы - Временно заменить Bluetooth на проводную последовательную связь; - Закомментируйте или заглушите(*) все, в чем вы не совсем уверены. - Получите минимальное количество работающего аппаратного и программного обеспечения. - Добавляйте обратно по одному элементу оборудования или по одному разделу кода за раз, исправляя все, что вам нужно, чтобы все снова заработало. - Повторяйте, пока все не будет собрано и не начнет работать нормально.

(*) Заглушка — это метод замены функции или раздела кода чем-то тривиальным (и, следовательно, трудно ошибиться!), который позволяет остальному коду в основном работать.
Предположим, вы написали функцию digitalRead(). (Я знаю, что это библиотечная функция, и мы полностью в ней уверены, но на минутку предположим....) Вы можете заменить содержимое вашего digitalRead() одним оператором:

int digitalRead(uint8_t pin){
   // здесь закомментирован непроверенный код
   // ...
   return(4);  // любое значение, которое что-то значит для вызывающего кода
}

Теперь вы можете работать над кодом, который вызывает функцию digitalRead(), не имея работающей функции digitalRead(). Вызывающий объект будет получать одно и то же значение каждый раз, когда он вызывает, но этого может быть достаточно, чтобы какая-то его часть работала, пока вы не вернетесь и не исправите свою функцию digitalRead().

,