Pith - arduino_coin_jar
arduino_coin_jar/arduino_coin_jar.ino [2.9 kb]
Modified: 00:07:22 58 026 (16 May 026)
15 Days Ago
// Arduino Coin Jar
// vgmlr
#include "Keypad.h"
#include "Password.h"
#include "VarSpeedServo.h"
VarSpeedServo jar;
// Pins
int piezo = A2;
int red = A3;
int green = A4;
int blue = A5;
int relay = 2;
int jar_pin = 3;
int pir = 4;
// Keypad
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = {5, 6, 7, 8};
byte colPins[COLS] = {9, 10, 11, 12};
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
// Set Passcode
Password passcode = Password( "947" );
// States
int closed = 88;
int opened = 30;
int open_state = 0;
int pir_state = 0;
int motion;
void setup() {
  Serial.begin(9600);
  // Pin Placements
  jar.attach(jar_pin);
  pinMode(piezo, OUTPUT);
  pinMode(red, OUTPUT);
  pinMode(green, OUTPUT);
  pinMode(blue, OUTPUT);
  pinMode(relay, OUTPUT);
  pinMode(pir, INPUT);
  // Keypad Listener
  keypad.addEventListener(keypadEvent);
  // Close Jar
  jar.write(closed, 200, true);
  // No Buzz
  noTone(piezo);
  // No Zap
  digitalWrite(relay, LOW);
  // Activate
  // Form of Coin Jar
  while (millis() < 2000)
  {
    digitalWrite(blue, HIGH);
    delay(50);
    digitalWrite(blue, LOW);
    delay(50);
  }
  digitalWrite(green, LOW);
  digitalWrite(red, HIGH);
  pir_state = 1;
}
void loop() {
  keypad.getKey();
  motion_sensor();
}
void keypadEvent(KeypadEvent eKey) {
  switch (keypad.getState()) {
    case PRESSED:
      Serial.println(eKey);
      button();
      switch (eKey) {
        case '#': check_passcode(); break;
        case '*': passcode.reset(); break;
        default: passcode.append(eKey);
      }
  }
}
void check_passcode() {
  if (passcode.evaluate()) {
    if (open_state == 0) {
      open_coin_jar();
      passcode.reset();
    } else if (open_state == 1) {
      close_coin_jar();
      passcode.reset();
    }
  } else {
    digitalWrite(blue, LOW);
    digitalWrite(green, LOW);
    while (millis() < 2000) {
      digitalWrite(red, HIGH);
      delay(50);
      digitalWrite(red, LOW);
      delay(50);
    }
  }
}
void open_coin_jar() {
  pir_state = 0;
  digitalWrite(green, HIGH);
  digitalWrite(red, LOW);
  digitalWrite(relay, LOW);
  jar.write(opened, 200, true);
  open_state = 1;
}
void close_coin_jar() {
  jar.write(closed, 200, true);
  open_state = 0;
  pir_state = 1;
}
void motion_sensor() {
  if (pir_state == 1) {
    digitalWrite(red, HIGH);
    digitalWrite(green, LOW);
    motion = digitalRead(pir);
    if (motion == HIGH) {
      digitalWrite(relay, HIGH);
      delay(1000);
      digitalWrite(relay, LOW);
    }
  } else if (pir_state == 0) {
    digitalWrite(red, LOW);
    digitalWrite(green, HIGH);
    digitalWrite(relay, LOW);
  }
}
void button() {
  digitalWrite(red, LOW);
  digitalWrite(green, LOW);
  digitalWrite(blue, HIGH);
  tone(piezo, 1000);
  delay(250);
  digitalWrite(blue, LOW);
  noTone(piezo);
}
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)