Pith - arduino_dead_or_alive
arduino_dead_or_alive/arduino_dead_or_alive.ino [3.2 kb]
Modified: 00:00:27 58 026 (16 May 026)
15 Days Ago
// 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();
}
Updates
Shim - Android 70.026.1
Wedge - Linux 68.026.1
Wedge - Android 68.026.1
Taper - Linux 64.026.1
Ayh Extension - Chrome 63.026.1
Dev
TVShow (227) 'CSA'
TVShow (228) 'APT'
TVProgram (83) 'BXT'
Miter Update(s)
Shim (Dictation)

Menu
Calendar
Project Tin (024/029)
Miter
RSS Feed
User Avatar
@vgmlr
=SUM(parts)