Pith - arduino_plasma_toilet_air_freshener
arduino_plasma_toilet_air_freshener/arduino_plasma_toilet_air_freshener.ino [3.7 kb]
Modified: 00:04:23 58 026 (16 May 026)
15 Days Ago
// Arduino Plasma Toilet Air Freshener
// vgmlr
#include "FastLED.h"
#include "Servo.h"
// Neopixel
#define DATA_PIN 2
#define LED_TYPE WS2812
#define COLOR_ORDER GRB
#define NUM_LEDS 3
#define BRIGHTNESS 100
#define FRAMES_PER_SECOND 120
CRGB leds[NUM_LEDS];
// Servos
Servo gyro;
Servo riser;
Servo level;
// Gyro
int gyro_pos = 95;
int gyro_stop = 95;
int rotate = 77;
int timer_rotate_initial = 3000;
int timer_rotate = 9150;
// hall sensor in next version
// Riser
int rise = 105;
int lower = 75;
int riser_stop = 91;
int timer_riser_up = 20;
int timer_riser_down = 20;
// Level
int level_pos = 125;
int up = 93;
int down = 125;
// Relay
int relay = 3;
// Trigger
// Mercury Switch
int trigger = 7;
int led = 8;
int state = 0;
int hold_state = 0;
void setup() {
  Serial.begin(9600);
  pinMode(trigger, INPUT);
  pinMode(led, OUTPUT);
  pinMode(relay, OUTPUT);
  digitalWrite(relay, LOW);
  gyro.attach(5);
  gyro.write(gyro_stop);
  riser.attach(6);
  riser.write(riser_stop);
  level.attach(4);
  level.write(down);
  FastLED.addLeds< LED_TYPE, DATA_PIN, COLOR_ORDER >(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
  FastLED.setBrightness(BRIGHTNESS);
  // Alert Active
  colorFWD(0x00, 0x00, 0xff, 100);
  colorFWD(0x00, 0x00, 0x00, 100);
  colorFWD(0x00, 0x00, 0xff, 100);
  colorFWD(0x00, 0x00, 0x00, 100);
}
void loop() {
  // Clear Strip
  colorFWD(0x00, 0x00, 0x00, 100);
  // Read Button
  state = digitalRead(trigger);
  // Lid Down
  if (state == LOW) {
    digitalWrite(led, LOW);
    // Lid Down After Open Then..
    if (hold_state == 1) {
      delay(5000);
      freshen();
      hold_state = 0; // reset
    }
    // Lid Open
  } else if (state == HIGH) {
    hold_state = 1;
    digitalWrite(led, HIGH);
  }
  // Testing
  if (Serial.available() > 0)
  {
    int cmd = Serial.parseInt();
    Serial.println(cmd);
    if (cmd == 1) {
      rise_up();
    } else if (cmd == 2) {
      go_down();
    } else if (cmd == 3) {
      turn_gyro();
    } else if (cmd == 4) {
      freshen();
    }
  }
  delay(1);
}
// Whole Shabang
void freshen() {
  rise_up();
  delay(2000);
  turn_gyro();
  delay(2000);
  go_down();
}
void rise_up() {
  for (int x = 0; x < timer_riser_up; x += 1) {
    riser.write(rise);
    track_led();
    // Convert to Leveler Servo
    level_pos = map(x, 0, timer_riser_up, down, up);
    level_pos = round(level_pos);
    level.write(level_pos);
    delay(500);
  }
  riser.write(riser_stop);
}
void go_down() {
  for (int x = 0; x < timer_riser_down; x += 1) {
    riser.write(lower);
    track_led();
    level_pos = map(x, 0, timer_riser_down, up, down);
    level_pos = round(level_pos);
    level.write(level_pos);
    delay(500);
  }
  riser.write(riser_stop);
}
void turn_gyro() {
  // Spin Up Gyro
  for (gyro_pos = gyro_stop; gyro_pos >= rotate; gyro_pos -= 1) {
    gyro.write(gyro_pos);
    delay(50);
  }
  delay(timer_rotate_initial);
  // Activate Spark
  digitalWrite(relay, HIGH);
  delay(timer_rotate);
  digitalWrite(relay, LOW);
  gyro.write(gyro_stop);
}
void track_led() {
  colorFWD(0x00, 0x00, 0xff, 100);
  colorFWD(0x00, 0x00, 0x00, 100);
}
void colorFWD(byte red, byte green, byte blue, int SpeedDelay) {
  for (uint16_t i = 0; i < NUM_LEDS; i++) {
    setPixel(i, red, green, blue);
    showStrip();
    delay(SpeedDelay);
  }
}
void showStrip() {
#ifdef ADAFRUIT_NEOPIXEL_H
  // NeoPixel
  strip.show();
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
  // FastLED
  FastLED.show();
#endif
}
void setPixel(int Pixel, byte red, byte green, byte blue) {
#ifdef ADAFRUIT_NEOPIXEL_H
  // NeoPixel
  strip.setPixelColor(Pixel, strip.Color(red, green, blue));
#endif
#ifndef ADAFRUIT_NEOPIXEL_H
  // FastLED
  leds[Pixel].r = red;
  leds[Pixel].g = green;
  leds[Pixel].b = blue;
#endif
}
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)