回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

Beetle 树莓派RP2350心率监测项目代码,三稿 简单

头像 天眼FAST 2025.05.09 11 0

#include
#include
#include
#include

#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();
}
 

评论

user-avatar