134195987630404 发表于 2025-5-9 17:21:03

Beetle 树莓派RP2350心率监测代码,三稿

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SoftwareSerial.h>

#define OLED_WIDTH 128
#define OLED_HEIGHT 64
#define OLED_ADDR 0x3C

SoftwareSerial hrSerial(18, 19);
Adafruit_SSD1306 oled(OLED_WIDTH, OLED_HEIGHT, &Wire, -1);

int bpm = 0;
unsigned long lastUpdate = 0;

void setup() {
Serial.begin(9600);
hrSerial.begin(9600);

if (!oled.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) {
    Serial.println("OLED Error");
    while(1);
}
oled.clearDisplay();
oled.display();
}

void loop() {
// 数据读取
if (hrSerial.available()) {
    String data = hrSerial.readStringUntil('\n');
    parseBPM(data);
}

// 每500ms刷新一次屏幕(降低闪烁)
if (millis() - lastUpdate > 500) {
    updateDisplay();
    lastUpdate = millis();
}
}

void parseBPM(String data) {
// 假设实际数据格式示例: "HR:123"
int startIdx = data.indexOf("HR:");
if (startIdx != -1) {
    String valStr = data.substring(startIdx + 3);
    valStr.trim();// 去除前后空格
    bpm = valStr.toInt();
    bpm = constrain(bpm, 0, 250);// 限制数值范围
}
}

void updateDisplay() {
oled.clearDisplay();

// 显示标题(小字体)
oled.setTextSize(1);
oled.setCursor((OLED_WIDTH - 6*12)/2, 5);// 居中计算
oled.print("Heart Rate Monitor");

// 显示BPM数值(大字体)
oled.setTextSize(2);
String displayStr = "BPM: " + String(bpm);
int xPos = (OLED_WIDTH - displayStr.length()*12)/2;// 字符宽度=6*2=12
oled.setCursor(xPos, 30);
oled.print(displayStr);

oled.display();
}


页: [1]
查看完整版本: Beetle 树莓派RP2350心率监测代码,三稿