files.catbox.moe/nkot5i.mp4
Arduino Uno
Servo
(2) 10K Potentiometer
LCD Display
Pulse Sensor
(2) 330 ohm Resistor
1000 uf Capacitor
Piezo Buzzer
2N2222 Transistor
4007 Diode
Neopixels
(2) Toggle Switch
MDF

- // Arduino Dead or Alive
- // vgmlr
- #include "FastLED.h"
- #include "LiquidCrystal.h"
- #include "Servo.h"
- #define NUM_LEDS 5
- CRGB leds[NUM_LEDS];
- #define PIN 6
- // Beat Var LED
- int bpm_led_delay = 500;
- // Buzzer Pin
- const int ekg = 9;
- // LCD
- const int rs = 12, en = 11, d4 = 5,
- d5 = 4, d6 = 3, d7 = 2;
- LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
- // Switch
- int aux = 7;
- int aux_state = 0;
- // Servo
- Servo srv;
- int st = 110;
- int ps = 45;
- // Pulse
- int pulse = A0
- int val;
- int tot;
- int nxt;
- int high;
- void setup()
- {
- Serial.begin(9600);
- FastLED.addLeds< WS2812, PIN, GRB >
- (leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
- pinMode(ekg, OUTPUT);
- digitalWrite(ekg, LOW);
- pinMode(aux, INPUT);
- srv.attach(10);
- srv.write(st);
- lcd.begin(16, 2);
- lcd.setCursor(0, 0);
- lcd.print("Dead or Alive?");
- }
- void loop() {
- // Motor and Buzzer Switch On/Off
- aux_state = digitalRead(aux);
- // Reset Value
- tot = 0;
- nxt = 0;
- set_bpm = 0;
- // Smoothing Pulse
- for (int n = 0; n <= 5; n++) {
- for (int i = 0; i <= 25; i++) {
- val = analogRead(pulse);
- tot = val + tot;
- // Display Per Peak
- if (val > 580) { // Adjust
- // If Motor and Buzzer
- if (aux_state == HIGH) {
- beat_led(0xff, 0x00, 0x00);
- delay(bpm_led_delay);
- // If No Motor and Buzzer
- } else if (aux_state == LOW) {
- beat_led_non(0xff, 0x00, 0x00);
- delay(bpm_led_delay);
- }
- }
- delay(2);
- }
- nxt = tot / 25;
- set_bpm = set_bpm + nxt;
- }
- // BPM Maths
- bpm = set_bpm * 12;
- // Not Very Accurate .. Meh!
- if (bpm > 30) {
- lcd.setCursor(0, 0);
- lcd.print("Alive!");
- lcd.setCursor(0, 1);
- lcd.print(bpm);
- lcd.print(" BPM");
- } else if (bpm <= 30) {
- lcd.setCursor(0, 0);
- lcd.print("Undead!");
- }
- }
- // Neopixel FastLED Fade Red
- // via http://tweaking4all.com
- void beat_led(byte red, byte green, byte blue) {
- float r, g, b;
- for (int k = 0; k < 256; k = k + 8) {
- r = (k / 256.0) * red;
- g = (k / 256.0) * green;
- b = (k / 256.0) * blue;
- setAll(r, g, b);
- showStrip();
- digitalWrite(ekg, HIGH);
- srv.write(ps);
- }
- digitalWrite(ekg, LOW);
- srv.write(st);
- for (int k = 255; k >= 0; k = k - 10) {
- r = (k / 256.0) * red;
- g = (k / 256.0) * green;
- b = (k / 256.0) * blue;
- setAll(r, g, b);
- showStrip();
- }
- }
- void beat_led_non(byte red, byte green, byte blue) {
- float r, g, b;
- for (int k = 0; k < 256; k = k + 8) {
- r = (k / 256.0) * red;
- g = (k / 256.0) * green;
- b = (k / 256.0) * blue;
- setAll(r, g, b);
- showStrip();
- }
- for (int k = 255; k >= 0; k = k - 10) {
- r = (k / 256.0) * red;
- g = (k / 256.0) * green;
- b = (k / 256.0) * blue;
- setAll(r, g, b);
- showStrip();
- }
- }
- void showStrip() {
- #ifdef ADAFRUIT_NEOPIXEL_H
- strip.show();
- #endif
- #ifndef ADAFRUIT_NEOPIXEL_H
- FastLED.show();
- #endif
- }
- void setPixel(int Pixel, byte red, byte green, byte blue) {
- #ifdef ADAFRUIT_NEOPIXEL_H
- strip.setPixelColor(Pixel, strip.Color(red, green, blue));
- #endif
- #ifndef ADAFRUIT_NEOPIXEL_H
- leds[Pixel].r = red;
- leds[Pixel].g = green;
- leds[Pixel].b = blue;
- #endif
- }
- void setAll(byte red, byte green, byte blue) {
- for (int i = 0; i < NUM_LEDS; i++ ) {
- setPixel(i, red, green, blue);
- }
- showStrip();
- }