Jump to content

Holm

Members
  • Content Count

    21
  • Joined

  • Last visited

Community Reputation

0 Обычный

About Holm

  • Rank
    Новенький

Информация

  • Город
    Kant

Электроника

  • Стаж в электронике
    3-5 лет
  • Сфера радиоэлектроники
    Микроконтроллеры,программирование,логика
  • Оборудование
    Имеется все

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Картинка просто на просто будет мала,эту строку U8G2_SSD1306_128X64_UNIVISION_F_HW_I2C u8g2(U8G2_R0); Замените на свою,под 1.3
  2. Приветствую! Собираю пульсоксиметр на MAX30100. Нашел на просторах интернета готовый код,но под STM32,но на винду хп драйвера не идут. Может кто-нибудь помочь переделать код под Ардуино Уно. Отблагодарю))
  3. Просто может кто-нибудь поможет,элементарно не могу проверить датчик MAX30100 в "Монитор порта" ничего нет
  4. Приветствую радиолюбители!Проблема такая,решил собрать пульсоксиметр,но т.к это моя первая работа на Arduino Nano,возникли трудности. Собираю по этой статье Единственное отличие у них стоит oled display 0.91 у меня 0.96. Не могу разобраться,с какой библиотекой работать u8g2lib или u8glib.Какой дисплей мне выбрать и тд. Ссылка на библиотеку MAX30100 клик #include <CircularBuffer.h> #include <MAX30100.h> #include <MAX30100_BeatDetector.h> #include <MAX30100_Filters.h> #include <MAX30100_PulseOximeter.h> #include <MAX30100_Registers.h> #include <MAX30100_SpO2Calculator.h> #include <U8g2lib.h> #include "MAX30100_PulseOximeter.h" #include <Wire.h> #define REPORTING_PERIOD_MS 500 U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C u8g2(U8G2_R0); // PulseOximeter is the higher level interface to the sensor // it offers: // * beat detection reporting // * heart rate calculation // * SpO2 (oxidation level) calculation PulseOximeter pox; const int numReadings=10; float filterweight=0.5; uint32_t tsLastReport = 0; uint32_t last_beat=0; int readIndex=0; int average_beat=0; int average_SpO2=0; bool calculation_complete=false; bool calculating=false; bool initialized=false; byte beat=0; // Callback (registered below) fired when a pulse is detected void onBeatDetected() { show_beat(); last_beat=millis(); } void show_beat() { u8g2.setFont(u8g2_font_cursor_tf); u8g2.setCursor(8,10); if (beat==0) { u8g2.print("_"); beat=1; } else { u8g2.print("^"); beat=0; } u8g2.sendBuffer(); } void initial_display() { if (not initialized) { u8g2.clearBuffer(); show_beat(); u8g2.setCursor(24,12); u8g2.setFont(u8g2_font_smart_patrol_nbp_tf); u8g2.print("Place finger"); u8g2.setCursor(0,30); u8g2.print("on the sensor"); u8g2.sendBuffer(); initialized=true; } } void display_calculating(int j) { if (not calculating) { u8g2.clearBuffer(); calculating=true; initialized=false; } show_beat(); u8g2.setCursor(24,12); u8g2.setFont(u8g2_font_smart_patrol_nbp_tf); u8g2.print("Measuring"); u8g2.setCursor(0,30); for (int i=0;i<=j;i++) { u8g2.print(". "); } u8g2.sendBuffer(); } void display_values() { u8g2.clearBuffer(); u8g2.setFont(u8g2_font_smart_patrol_nbp_tf); u8g2.setCursor(65,12); u8g2.print(average_beat); u8g2.print(" Bpm"); u8g2.setCursor(0,30); u8g2.print("SpO2 "); u8g2.setCursor(65,30); u8g2.print(average_SpO2); u8g2.print("%"); u8g2.sendBuffer(); } void calculate_average(int beat, int SpO2) { if (readIndex==numReadings) { calculation_complete=true; calculating=false; initialized=false; readIndex=0; display_values(); } if (not calculation_complete and beat>30 and beat<220 and SpO2>50) { average_beat = filterweight * (beat) + (1 - filterweight ) * average_beat; average_SpO2 = filterweight * (SpO2) + (1 - filterweight ) * average_SpO2; readIndex++; display_calculating(readIndex); } } void setup() { Serial.begin(115200); u8g2.begin(); pox.begin(); pox.setOnBeatDetectedCallback(onBeatDetected); initial_display(); } void loop() { // Make sure to call update as fast as possible pox.update(); if ((millis() - tsLastReport > REPORTING_PERIOD_MS) and (not calculation_complete)) { calculate_average(pox.getHeartRate(),pox.getSpO2()); tsLastReport = millis(); } if ((millis()-last_beat>10000)) { calculation_complete=false; average_beat=0; average_SpO2=0; initial_display(); } }
  5. Не особо понял,выходит ведь так: (2шт.)двоич.-десятич.,(2шт.)2х16 ,(2шт.)дешифратор и логика ведь нужна....
  6. Придется значит собирать всю эту красоту на восьми микросхемах Не думал что получится так объемно...
  7. На данный момент задача такова,собрать счетчик минимум до 63 (использовать любые микросхемы,не программируя).Бинарный код имел вид 1 2 4 8 16 32... и чтобы числа бинарного кода совпадали с числом на индикаторе,опять же не умножая высший разряд на 16 (не высвечивались буквы ABCDEF )... Спасибо
  8. Спасибо.Но все же заставляют делать на второй схеме ( было 1 2 4 8 16 и тд.) и опять же чтобы индикатор показывал верно (не умножая на 16). Может быть есть некие микросхемы дешифратора,которые будут все это преобразовывать?
  9. Извиняюсь еще раз) Пришел к выводу что буду ставить двоично-десятичный счетчик К155ИЕ6,его аналог в Протеусе SN74192 (74192). Подключаю светодиоды,после 9 он сразу перекидывает на 2 микросхему и загорается светодиод (16). Просто нужно чтобы число с индикатора совпадало с двоичным кодом) Заранее спасибо Counter.rar
  10. Ладно еще раз спасибо вам,осталось за малым нарисовать в S-L и вытравить.
  11. Не совсем понял,я жму и картинка на весь экран в хорошем качестве. Как подругому залить не понимаю)
  12. Получается я не смогу сделать,чтобы индикатор показывал как оно есть,не умножая? Могли бы сказать,какая ошибка была?Спасибо
  13. Смотрел по схеме,вроде бы подключение к счетчику(2) как и было,но сигнал уже есть.Намудрил значит я что-то,поэтому и не работала) А почему он так странно показывает?
  14. Ошибка сейчас такая,подключил дешифратор(2) он отстает от действительных значений,видно на скриншоте.
×
×
  • Create New...