#include <Wire.h> 
#include <Adafruit_SSD1306.h> 
#include <SoftwareSerial.h> 
 
#define OLED_WIDTH 128 
#define OLED_HEIGHT 64 
#define OLED_ADDR 0x3C 
 
SoftwareSerial hrSerial(18, 19); // RX=18, TX未用 
Adafruit_SSD1306 oled(OLED_WIDTH, OLED_HEIGHT, &Wire, -1); 
 
int bpm = 0; 
 
void setup() { 
  Serial.begin(9600); 
  hrSerial.begin(9600); // 波特率需与传感器匹配 
 
  // 初始化OLED 
  if (!oled.begin(SSD1306_SWITCHCAPVCC, OLED_ADDR)) { 
    Serial.println("OLED初始化失败"); 
    while (1); 
  } 
  oled.clearDisplay(); 
  oled.setTextSize(1); 
  oled.setTextColor(SSD1306_WHITE); 
  oled.display(); 
} 
 
void loop() { 
  // 读取心率传感器数据 
  if (hrSerial.available()) { 
    String data = hrSerial.readStringUntil('\n'); 
    parseBPM(data); // 解析BPM值 
    updateDisplay(); // 刷新OLED 
  } 
} 
 
void parseBPM(String data) { 
  // 假设数据格式为"BPM:72" 
  int startIdx = data.indexOf("BPM:"); 
  if (startIdx != -1) { 
    String valStr = data.substring(startIdx + 4); 
    bpm = valStr.toInt(); 
  } 
} 
 
void updateDisplay() { 
  oled.clearDisplay(); 
  oled.setCursor(0, 0); 
  oled.print("心率监测"); 
  oled.setCursor(0, 20); 
  oled.print("BPM: "); 
  oled.print(bpm); 
  oled.display(); 
} 
 |  
  
 
 |   
 
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 |