![]() |
發布時間: 2023-2-18 07:25
正文摘要:用一片ESP-12E和一只MAX30100心率血氧傳感器模塊制做了一臺血氧儀心率。整機裝在一個兩節5號電池盒里。為了長期監測病人所以采用5伏供電。當病人血氧飽和度低于93或者心率大于120或小于50時內置蜂鳴器 ... |
lising 發表于 2023-2-20 00:07 用其它的程序以前也試過總是隔行缺矢顯示,雖然不正常但還可使用。下面是血氧儀 的程序: #include <Arduino.h> #include <U8g2lib.h> #include "MAX30100_PulseOximeter.h" #include <Wire.h> #include <SPI.h> U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI u8g2(U8G2_R0, 3, 1, 15, 0, 14); #define REPORTING_PERIOD_MS 1000 PulseOximeter pox; int c=0; int k=0; int bpm=0; int SpO2=0; int bsum,ds1,ds2,ds3,ds4,ds5,ds6,ds7,ds8,ds9,ds10; uint32_t tsLastReport = 0; void onBeatDetected() { if((SpO2<93)||(bpm>120)||(bpm<50)) c++; else c=0; if(c>5) digitalWrite(2,HIGH); k++; } void setup() { Serial.begin(115200); pox.setIRLedCurrent(MAX30100_LED_CURR_11MA); pox.setOnBeatDetectedCallback(onBeatDetected); u8g2.begin(); pox.begin(); pinMode(2, OUTPUT); digitalWrite(2,LOW); } void loop() { pox.update(); if (millis() - tsLastReport > REPORTING_PERIOD_MS) { bpm=pox.getHeartRate(); SpO2=pox.getSpO2(); ds1=ds2; ds2=ds3; ds3=ds4; ds4=ds5; ds5=ds6; ds6=ds7; ds7=ds8; ds8=ds9; ds9=ds10; ds10=bpm; bsum=(ds1+ds2+ds3+ds4+ds5+ds6+ds7+ds8+ds9+ds10)/10; tsLastReport = millis(); } if(k>10) { u8g2.firstPage(); do { u8g2.setFont(u8g2_font_ncenB14_tr); u8g2.setCursor(0, 16); u8g2.print(F("bpm:")); u8g2.setCursor(70, 16); u8g2.print(F("SpO2:")); u8g2.setFont(u8g2_font_logisoso34_tf); u8g2.setCursor(0, 63); u8g2.print(bsum); u8g2.setCursor(82, 63); u8g2.print(SpO2); } while ( u8g2.nextPage() ); } else { u8g2.firstPage(); do { u8g2.setFont(u8g2_font_ncenB14_tr); u8g2.setCursor(0, 16); u8g2.print(F("bpm:")); u8g2.setCursor(70, 16); u8g2.print(F("SpO2:")); u8g2.setFont(u8g2_font_logisoso34_tf); u8g2.setCursor(0, 63); u8g2.print(F("....")); u8g2.setCursor(82, 63); u8g2.print(F("....")); } while ( u8g2.nextPage() ); } delay(500); } |
大概率是軟件問題,你可以嘗試用別人例程中的初始化程序替換一下試試。 |
lising 發表于 2023-2-19 00:21 謝謝指導,請問顯示驅動怎樣調整?我覺得像是oled的顯示屏硬件問題。 |
oled的顯示驅動應該調整一下,顯示好像有點問題。 |
第二圖樣子做得很專業的樣子,不錯! |