306| 0
|
[项目] 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(); } |
© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed