fork download
  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>
  3. #include "MAX30105.h"
  4. #include "heartRate.h"
  5.  
  6. // กำหนดที่อยู่ของจอ LCD I2C
  7. LiquidCrystal_I2C lcd(0x27, 16, 2);
  8.  
  9. // กำหนดตัวแปรของ MAX30105
  10. MAX30105 particleSensor;
  11. const byte RATE_SIZE = 4;
  12. byte rates[RATE_SIZE];
  13. byte rateSpot = 0;
  14. long lastBeat = 0;
  15.  
  16. float beatsPerMinute;
  17. int beatAvg;
  18.  
  19. void setup()
  20. {
  21. Serial.begin(115200);
  22. lcd.begin();
  23. lcd.backlight();
  24.  
  25. lcd.setCursor(0, 0);
  26. lcd.print("Initializing...");
  27.  
  28. // เริ่มต้นเซ็นเซอร์ MAX30105
  29. if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {
  30. Serial.println("MAX30105 not found");
  31. lcd.clear();
  32. lcd.setCursor(0, 0);
  33. lcd.print("Sensor Error");
  34. while (1);
  35. }
  36.  
  37. particleSensor.setup();
  38. particleSensor.setPulseAmplitudeRed(0x0A);
  39. particleSensor.setPulseAmplitudeGreen(0);
  40.  
  41. delay(2000); // รอให้เซ็นเซอร์เริ่มทำงาน
  42. lcd.clear();
  43. lcd.setCursor(0, 0);
  44. lcd.print("Place finger");
  45. }
  46.  
  47. void loop()
  48. {
  49. long irValue = particleSensor.getIR();
  50.  
  51. if (checkForBeat(irValue) == true)
  52. {
  53. long delta = millis() - lastBeat;
  54. lastBeat = millis();
  55.  
  56. beatsPerMinute = 60 / (delta / 1000.0);
  57.  
  58. if (beatsPerMinute < 255 && beatsPerMinute > 20)
  59. {
  60. rates[rateSpot++] = (byte)beatsPerMinute;
  61. rateSpot %= RATE_SIZE;
  62.  
  63. beatAvg = 0;
  64. for (byte x = 0; x < RATE_SIZE; x++) {
  65. beatAvg += rates[x];
  66. }
  67. beatAvg /= RATE_SIZE;
  68. }
  69. }
  70.  
  71. // แสดงค่าบน Serial Monitor
  72. Serial.print("IR=");
  73. Serial.print(irValue);
  74. Serial.print(", BPM=");
  75. Serial.print(beatsPerMinute);
  76. Serial.print(", Avg BPM=");
  77. Serial.print(beatAvg);
  78. if (irValue < 50000) Serial.print(" No finger?");
  79. Serial.println();
  80.  
  81. // แสดงค่าบน LCD
  82. lcd.clear();
  83. lcd.setCursor(0, 0);
  84. lcd.print("BPM: ");
  85. lcd.print(beatsPerMinute);
  86. lcd.setCursor(0, 1);
  87. lcd.print("Avg BPM: ");
  88. lcd.print(beatAvg);
  89.  
  90. delay(1000);
  91. }
  92.  
Success #stdin #stdout 0.02s 25976KB
stdin
Standard input is empty
stdout
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "MAX30105.h"
#include "heartRate.h"

// กำหนดที่อยู่ของจอ LCD I2C
LiquidCrystal_I2C lcd(0x27, 16, 2);

// กำหนดตัวแปรของ MAX30105
MAX30105 particleSensor;
const byte RATE_SIZE = 4;
byte rates[RATE_SIZE];
byte rateSpot = 0;
long lastBeat = 0;

float beatsPerMinute;
int beatAvg;

void setup()
{
    Serial.begin(115200);
    lcd.begin();
    lcd.backlight();
    
    lcd.setCursor(0, 0);
    lcd.print("Initializing...");

    // เริ่มต้นเซ็นเซอร์ MAX30105
    if (!particleSensor.begin(Wire, I2C_SPEED_FAST)) {
        Serial.println("MAX30105 not found");
        lcd.clear();
        lcd.setCursor(0, 0);
        lcd.print("Sensor Error");
        while (1);
    }

    particleSensor.setup();
    particleSensor.setPulseAmplitudeRed(0x0A);
    particleSensor.setPulseAmplitudeGreen(0);
    
    delay(2000); // รอให้เซ็นเซอร์เริ่มทำงาน
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("Place finger");
}

void loop()
{
    long irValue = particleSensor.getIR();

    if (checkForBeat(irValue) == true)
    {
        long delta = millis() - lastBeat;
        lastBeat = millis();

        beatsPerMinute = 60 / (delta / 1000.0);

        if (beatsPerMinute < 255 && beatsPerMinute > 20)
        {
            rates[rateSpot++] = (byte)beatsPerMinute;
            rateSpot %= RATE_SIZE;

            beatAvg = 0;
            for (byte x = 0; x < RATE_SIZE; x++) {
                beatAvg += rates[x];
            }
            beatAvg /= RATE_SIZE;
        }
    }

    // แสดงค่าบน Serial Monitor
    Serial.print("IR=");
    Serial.print(irValue);
    Serial.print(", BPM=");
    Serial.print(beatsPerMinute);
    Serial.print(", Avg BPM=");
    Serial.print(beatAvg);
    if (irValue < 50000) Serial.print(" No finger?");
    Serial.println();

    // แสดงค่าบน LCD
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("BPM: ");
    lcd.print(beatsPerMinute);
    lcd.setCursor(0, 1);
    lcd.print("Avg BPM: ");
    lcd.print(beatAvg);

    delay(1000);
}