include <U8g2lib.h>
ifdef U8X8_HAVE_HW_SPI
include <SPI.h>
endif
ifdef U8X8_HAVE_HW_I2C
include <Wire.h>
endif
/ 新建一个oled屏幕对象,需要输入IIC地址,SDA和SCL引脚号 /
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, / clock=/ 5, / data=/ 4, / reset=/ U8X8_PIN_NONE);
include <Wire.h>
include "MAX30105.h"
include "heartRate.h"
MAX30105 particleSensor;
const byte RATE_SIZE = 4; //Increase this for more averaging. 4 is good.
byte rates[RATE_SIZE]; //Array of heart rates
byte rateSpot = 0;
long lastBeat = 0; //Time at which the last beat occurred
float beatsPerMinute;
int beatAvg;
void setup()
{
Serial.begin(115200);
u8g2.begin();
u8g2.setContrast(1); // 调节亮度
u8g2.enableUTF8Print(); // 为Arduino print()函数启用UTF8支持
Serial.println("Initializing...");
// Initialize sensor
Wire.begin(4, 5); // SDA = GPIO 4, SCL = GPIO 5
if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) //Use default I2C port, 400kHz speed
{
Serial.println("MAX30105 was not found. Please check wiring/power. ");
while (1);
}
Serial.println("Place your index finger on the sensor with steady pressure.");
particleSensor.setup(); //Configure sensor with default settings
particleSensor.setPulseAmplitudeRed(0x0A); //Turn Red LED to low to indicate sensor is running
particleSensor.setPulseAmplitudeGreen(0); //Turn off Green LED
}
long otaInterval = 0;
void loop()
{
long irValue = particleSensor.getIR();
if (checkForBeat(irValue) == true)
{
//We sensed a beat!
long delta = millis() - lastBeat;
lastBeat = millis();
beatsPerMinute = 60 / (delta / 1000.0);
if (beatsPerMinute < 255 && beatsPerMinute > 20)
{
rates[rateSpot++] = (byte)beatsPerMinute; //Store this reading in the array
rateSpot %= RATE_SIZE; //Wrap variable
//Take average of readings
beatAvg = 0;
for (byte x = 0 ; x < RATE_SIZE ; x++)
beatAvg += rates[x];
beatAvg /= RATE_SIZE;
}
}
if (millis() - otaInterval >= 1000) {
//循环时间
otaInterval = millis();
u8g2.setFont(u8g2_font_wqy14_t_gb2312); // 设置字体为中文字体
u8g2.setFontDirection(0); // 设置字体方向为水平方向
u8g2.clearBuffer(); // 清空缓存区
u8g2.setCursor(0, 15); // 设置光标位置
u8g2.print("IR="+String(irValue)+""); // 输出想要显示的文字
u8g2.setCursor(0, 30); // 设置光标位置
u8g2.print(String("BPM="+String(beatsPerMinute)+"")); // 输出想要显示的文字
u8g2.setCursor(0, 45); // 设置光标位置
u8g2.print("Avg BPM="+String(beatAvg)+""); // 输出想要显示的文字
u8g2.sendBuffer(); // 发送缓存区内容到屏幕显示
}
Serial.print("IR=");
Serial.print(irValue);
Serial.print(", BPM=");
Serial.print(beatsPerMinute);
Serial.print(", Avg BPM=");
Serial.print(beatAvg);
if (irValue < 50000)
Serial.print(" No finger?");
Serial.println();
}@ChatGPT,这段代码oled显示正常,但是max30102只有在刚启动时有数据,然后就不输出数据了,是哪里的问题