const int pulsePin = A0; const int led1 = 2; const int led2 = 3; int threshold = 550; bool beatDetected = false; unsigned long lastBeatTime = 0; int BPM = 0; bool toggleLED = false; // -------- FUNCION DE LATIDO -------- void heartbeatFade(int ledPin) { // Primer golpe (fuerte) for (int i = 0; i < 255; i += 5) { analogWrite(ledPin, i); delay(2); } for (int i = 255; i > 120; i -= 5) { analogWrite(ledPin, i); delay(2); } // Segundo golpe (más suave) for (int i = 120; i < 200; i += 5) { analogWrite(ledPin, i); delay(2); } for (int i = 200; i >= 0; i -= 3) { analogWrite(ledPin, i); delay(3); } analogWrite(ledPin, 0); } void setup() { Serial.begin(115200); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); } void loop() { int signal = analogRead(pulsePin); Serial.println(signal); if (signal > threshold && !beatDetected) { beatDetected = true; unsigned long currentTime = millis(); unsigned long delta = currentTime - lastBeatTime; if (delta > 300) { //This part filters some of the noise from the signal BPM = 60000 / delta; lastBeatTime = currentTime; Serial.print("BPM: "); Serial.println(BPM); // Alternating LEDs toggleLED = !toggleLED; if (toggleLED) { heartbeatFade(led1); } else { heartbeatFade(led2); } } } if (signal < threshold) { beatDetected = false; } delay(5); }