用其它的程序以前也试过总是隔行缺矢显示,虽然不正常但还可使用。下面是血氧仪 的程序:
#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);
} |