Beetle树莓派RP2350心率监测项目代码,四稿
2025-05-093636
AI 快速预览详细
本文介绍了使用Beetle树莓派RP2350和OLED显示屏实现心率监测的项目代码。通过解析多种格式的心率数据并动态调整显示效果,帮助开发者轻松构建实时心率监测系统。项目中使用了SoftwareSerial库进行串口通信,并通过Adafruit_SSD1306库控制OLED显示屏。代码中包含数据解析函数和显示更新函数,确保心率数据的准确显示。
|
#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; int lastBpm = -1; // 用于检测数值变化 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'); if (parseBPM(data) && (bpm != lastBpm)) { // 仅当数值变化时刷新 updateDisplay(); lastBpm = bpm; } } } bool parseBPM(String data) { // 改进版数据解析(兼容多种格式) data.trim(); int startIdx = data.indexOf("BPM:"); if (startIdx == -1) startIdx = data.indexOf("HR:"); if (startIdx == -1) startIdx = data.indexOf("Heart:"); if (startIdx != -1) { String valStr = ""; for (unsigned int i = startIdx + 4; i < data.length(); i++) { // 4为"BPM:"长度 if (isDigit(data[i])) valStr += data[i]; else break; } if (valStr.length() > 0) { bpm = valStr.toInt(); bpm = constrain(bpm, 0, 250); return true; } } return false; } void updateDisplay() { oled.clearDisplay(); // 动态字号调整 uint8_t textSize = (bpm > 99) ? 2 : 3; // 三位数用小字号 oled.setTextSize(textSize); String displayStr = String(bpm); int charWidth = 6 * textSize; // 每个字符像素宽度 int xPos = (OLED_WIDTH - displayStr.length() * charWidth) / 2; oled.setCursor(xPos, 20); oled.print(displayStr); // 添加单位标签(小字号) oled.setTextSize(1); oled.setCursor((OLED_WIDTH - 30)/2, OLED_HEIGHT - 15); oled.print("BPM"); oled.display(); } |




