Pith - arduino_licorice_launcher
arduino_licorice_launcher/arduino_licorice_launcher.ino [3.9 kb]
Modified: 22:56:24 56 026 (14 May 026)
16 Days Ago
// Arduino Licorice Launcher
// vgmlr
// RF Tracking @ Warner K. robowarner.com
#include "EEPROM.h"
#include "Servo.h"
// Centering
// Too small adjusts too frequently
// Too large will pass over signal
#define buffering 26
// Output Pin
#define ANT_WAVEFORM_OUT 8
// Input Pin
#define SPEAKER_FROM_WALKIETALKIE A1
// Calibration Pin
#define CALIBRATE_IN 11
// Variables
uint16_t caliset = 0;
uint16_t voltage = 0;
int state = 1;
// Servo Assignment
Servo turn;
int turnpin = 6;
Servo loader;
int loaderpin = 9;
Servo fire;
int firepin = 10;
Servo arm;
int arm = 11;
// LED Pins
int red = 3;
int blue = 4;
void setup() {
  analogReference(DEFAULT);
  turn.attach(turnpin);
  loader.attach(loaderpin);
  fire.attach(firepin);
  arm.attach(armpin);
  pinMode(red, OUTPUT);
  pinMode(blue, OUTPUT);
  digitalWrite(red, LOW);
  digitalWrite(blue, LOW);
  Serial.begin(9600);
  delay(6000); // Allow Power Up
  pinMode(ANT_WAVEFORM_OUT, OUTPUT);
  pinMode(SPEAKER_FROM_WALKIETALKIE, INPUT);
  pinMode(CALIBRATE_IN, INPUT);
  digitalWrite(CALIBRATE_IN, HIGH);
  // Read EEPROM
  byte HByte =  EEPROM.read(1);
  byte LByte =  EEPROM.read(2);
  caliset = word(HByte, LByte);
  Serial.print("EEPROM Calibration number: ");
  Serial.println(caliset);
  // Calibration Check and Delay
  // Aim Receiver and Clear Area
  if (digitalRead(CALIBRATE_IN) == LOW) {
    delay(10000);
  }
}
void loop() {
  if (state == 1) {
    // Engage Licorice Weapon
    digitalWrite(red, HIGH);
    // Trigger Position Open
    fire.write(45);
    delay(1000);
    // Arm Launcher
    arm.write(180);
    delay(1500);
    // Lock Trigger
    fire.write(90);
    // Load Launcher
    loader.write(180);
    delay(330);
    // Stall Position
    loader.write(88);
    // Remove Arm
    arm.write(40);
    // Licorice Launcher is Hot
    digitalWrite(red, LOW);
    digitalWrite(blue, HIGH);
    state = 2;
  } else {
    // Hold for Command from JACOB
    if (Serial.available()) {
      char ser = Serial.read();
      switch (ser) {
        case 'L':
          load();
          break;
        case 'F':
          fire();
          break;
      }
    }
  }
}
void load() {
  // Load Launcher
  loader.write(180);
  delay(330);
  loader.write(88);
}
void fire() {
  // Antenna Switching Waveform
  digitalWrite(ANT_WAVEFORM_OUT, HIGH);
  delay(1);
  digitalWrite(ANT_WAVEFORM_OUT, LOW);
  delay(1);
  digitalWrite(ANT_WAVEFORM_OUT, HIGH);
  delay(1);
  digitalWrite(ANT_WAVEFORM_OUT, LOW);
  delay(1);
  digitalWrite(ANT_WAVEFORM_OUT, HIGH);
  delay(1);
  digitalWrite(ANT_WAVEFORM_OUT, LOW);
  delay(1);
  digitalWrite(ANT_WAVEFORM_OUT, HIGH);
  delay(1);
  digitalWrite(ANT_WAVEFORM_OUT, LOW);
  delay(1);
  // Read Speaker Voltage
  voltage = analogRead(SPEAKER_FROM_WALKIETALKIE);
  // If in Calibration Mode
  // Store to EEPROM
  if (digitalRead(CALIBRATE_IN) == LOW) {
    caliset = voltage;
    byte HByte = highByte(caliset);
    byte LByte = lowByte(caliset);
    EEPROM.write(1, HByte);
    EEPROM.write(2, LByte);
    delay(5000);
    endprogram();
  }
  // Stall Turning
  if (voltage > (caliset - buffering) && voltage < (caliset + buffering)) {
    // Fire
    launch();
  }
  // Turn Left
  if (voltage > (caliset + buffering)) {
    turn.write(180);
    delay(15);
    Serial.print("In, Cal\t");
    Serial.print(voltage);
    Serial.print("\t");
    Serial.println(caliset);
    // Return Cycle
    fire();
  }
  // Turn Right
  if (voltage < (caliset - buffering)) {
    turn.write(0);
    delay(15);
    Serial.print("In, Cal\t");
    Serial.print(voltage);
    Serial.print("\t");
    Serial.println(caliset);
    // Return Cycle
    fire();
  }
  delay(5);
  Serial.print("In, Cal\t");
  Serial.print(voltage);
  Serial.print("\t");
  Serial.println(caliset);
}
void launch() {
  // Release Trigger
  fire.write(45);
  delay(1000);
  // Reset
  state = 1;
  break;
}
void endprogram() {
  Serial.print("Calibrated to: ");
  Serial.print(caliset);
loopy:
  goto loopy;
}
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)