Pith - adafruit_bdsm_alarm
adafruit_bdsm_alarm/adafruit_bdsm_alarm.ino [2.3 kb]
Modified: 17:38:20 58 026 (16 May 026)
14 Days Ago
// alarm choker
// vgmlr
#include "SevSeg.h"
#include "Servo.h"
SevSeg sevseg;
int digit = 0;
Servo choke;
const int servo_pin = 10;
const int start = 180;
const int finish = 0;
int pos = 0;
const int top = 11;
const int bottom = 12;
int top_state = 0;
int bot_state = 0;
const unsigned long sec = 1000;
const unsigned long hr = 3600 * sec;
int cd = 0;
int buttonState;
int lastButtonState = LOW;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
void setup() {
  // digit
  byte numDigits = 1;
  byte digitPins[] = {};
  // A, B, C, D, E, F, G, DP
  byte segmentPins[] = {3, 2, 8, 7, 6, 4, 5, 9};
  bool resistorsOnSegments = true;
  sevseg.begin(COMMON_CATHODE, numDigits, digitPins, segmentPins, resistorsOnSegments);
  sevseg.setBrightness(50);
  // servo
  choke.attach(servo_pin);
  choke.write(start);
  // buttons
  pinMode(top, INPUT);
  pinMode(bottom, INPUT);
}
void loop() {
  bot_state = digitalRead(bottom);
  sevseg.setNumber(digit);
  sevseg.refreshDisplay();
  if (bot_state != lastButtonState) {
    lastDebounceTime = millis();
  }
  if ((millis() - lastDebounceTime) > debounceDelay) {
    if (bot_state != buttonState) {
      buttonState = bot_state;
      if (buttonState == HIGH) {
        if (digit == 9) {
          digit = 0;
          sevseg.setNumber(digit);
          sevseg.refreshDisplay();
        } else {
          digit++;
          sevseg.setNumber(digit);
          sevseg.refreshDisplay();
        }
      }
    }
  }
  // start button
  top_state = digitalRead(top);
  if (top_state == HIGH) {
    if (digit == 0) {
      countdown();
    } else {
      alarm();
    }
  }
  lastButtonState = bot_state;
}
void alarm() {
  for (int w = 0; w < 3; w++) {
    sevseg.setNumber(digit);
    sevseg.refreshDisplay();
    delay(500);
    sevseg.blank();
    sevseg.refreshDisplay();
    delay(500);    
  }
  for (int k = digit; k > 0; k--) {
    sevseg.setNumber(k,0);
    sevseg.refreshDisplay();
    delay(hr);
  }
  sevseg.setNumber(0);
  sevseg.refreshDisplay();
  delay(1000);
  countdown();
}
void countdown() {
  for (int i = 9; i > 0; i--) {
    sevseg.setNumber(i);
    sevseg.refreshDisplay();
    delay(1000);
  }
  sevseg.setNumber(0);
  sevseg.refreshDisplay();
  wakeup();
}
void wakeup() {
  for (int x = start; x > finish; x--) {
    choke.write(x);
    delay(20);
  }
}
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)