-
Постов
21 -
Зарегистрирован
-
Посещение
Информация
-
Город
Kant
Электроника
-
Стаж в электронике
3-5 лет
-
Сфера радиоэлектроники
Микроконтроллеры,программирование,логика
-
Оборудование
Имеется все
Посетители профиля
Блок последних пользователей отключён и не показывается другим пользователям.
Достижения Holm
-
Картинка просто на просто будет мала,эту строку U8G2_SSD1306_128X64_UNIVISION_F_HW_I2C u8g2(U8G2_R0); Замените на свою,под 1.3
-
Приветствую! Собираю пульсоксиметр на MAX30100. Нашел на просторах интернета готовый код,но под STM32,но на винду хп драйвера не идут. Может кто-нибудь помочь переделать код под Ардуино Уно. Отблагодарю))
-
Просто может кто-нибудь поможет,элементарно не могу проверить датчик MAX30100 в "Монитор порта" ничего нет
-
Приветствую радиолюбители!Проблема такая,решил собрать пульсоксиметр,но т.к это моя первая работа на 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(); } }
-
Не особо понял,выходит ведь так: (2шт.)двоич.-десятич.,(2шт.)2х16 ,(2шт.)дешифратор и логика ведь нужна....
-
Придется значит собирать всю эту красоту на восьми микросхемах Не думал что получится так объемно...
-
На данный момент задача такова,собрать счетчик минимум до 63 (использовать любые микросхемы,не программируя).Бинарный код имел вид 1 2 4 8 16 32... и чтобы числа бинарного кода совпадали с числом на индикаторе,опять же не умножая высший разряд на 16 (не высвечивались буквы ABCDEF )... Спасибо
-
Спасибо.Но все же заставляют делать на второй схеме ( было 1 2 4 8 16 и тд.) и опять же чтобы индикатор показывал верно (не умножая на 16). Может быть есть некие микросхемы дешифратора,которые будут все это преобразовывать?
-
Извиняюсь еще раз) Пришел к выводу что буду ставить двоично-десятичный счетчик К155ИЕ6,его аналог в Протеусе SN74192 (74192). Подключаю светодиоды,после 9 он сразу перекидывает на 2 микросхему и загорается светодиод (16). Просто нужно чтобы число с индикатора совпадало с двоичным кодом) Заранее спасибо Counter.rar
-
Ладно еще раз спасибо вам,осталось за малым нарисовать в S-L и вытравить.
-
Не совсем понял,я жму и картинка на весь экран в хорошем качестве. Как подругому залить не понимаю)
-
Получается я не смогу сделать,чтобы индикатор показывал как оно есть,не умножая? Могли бы сказать,какая ошибка была?Спасибо
-
Смотрел по схеме,вроде бы подключение к счетчику(2) как и было,но сигнал уже есть.Намудрил значит я что-то,поэтому и не работала) А почему он так странно показывает?
-
Ошибка сейчас такая,подключил дешифратор(2) он отстает от действительных значений,видно на скриншоте.
-
Спасибо большое,вы лучший!