#include <IRremote.h>
String myCom;
const byte IR_RECEIVE_PIN = 11;
int engineStarts = 0; //So engines don't start until power is pressed
int engineOne = 5;
int engineTwo = 10;
int engineBright = 0;
int engineOneBright = 90;
int engineTwoBright = 90;
int engineTime = 100;
int torpedoOne = 6;
int torpedoTwo = 9;
int torpedoOneBright = 0;
int torpedoTwoBright = 0;
int torpedoFire = 0;
int blasterOne = 7;
int blasterTwo = 8;
int blasterDelay = 90;
int testDealay = 100;
const int R2Pin = 4;
unsigned long previousMillis;
unsigned long interval = 200UL;
void setup()
{
Serial.begin(115200);
Serial.println("IR Receive test");
IrReceiver.begin(IR_RECEIVE_PIN, ENABLE_LED_FEEDBACK);
pinMode(engineOne, OUTPUT);
pinMode(engineTwo, OUTPUT);
pinMode(torpedoOne, OUTPUT);
pinMode(torpedoTwo, OUTPUT);
pinMode( R2Pin, OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
}
void loop(){
if(engineStarts == 1){
engineBright=random(50,255);
analogWrite(engineOne,engineBright);
engineBright=random(50,255);
analogWrite(engineTwo,engineBright);
engineTime=random(50,150);
delay(engineTime);
}
//R2D2
unsigned long currentMillis = millis();
if( currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis;
interval = random( 100, 800); // set the new interval
// toggle
digitalWrite( R2Pin, digitalRead( R2Pin) == HIGH ? LOW : HIGH);
}
if (IrReceiver.decode()) //Remote Reading Command
{
Serial.println(IrReceiver.decodedIRData.command);
IrReceiver.resume();
}
if(IrReceiver.decodedIRData.command == 162){ // power
myCom ="power";
Serial.println("power");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 226){ // menu
myCom="menu";
Serial.println("menu");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 34){// test
myCom = "test";
Serial.println("test");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 2){ // plus
Serial.println("plus");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 194){ // return
Serial.println("return");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 224){ // rewind
Serial.println("rewind");
myCom="rewind";
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 168){ //play
myCom="play"; // play
Serial.println("play");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 144){ // fastForward
myCom="fastForward";
Serial.println("fastForward");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 104){ // zero
Serial.println("zero");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 152){ // minus
Serial.println("minus");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 176){ // c
Serial.println("c");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 48){ // one
Serial.println("one");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 24){ // two
Serial.println("two");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 122){ // three
Serial.println("three");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 16){ // four
Serial.println("four");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 56){ // five
Serial.println("five");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 90){ // six
Serial.println("six");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 66){ // seven
Serial.println("seven");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 74){ // eight
Serial.println("eight");
IrReceiver.decodedIRData.command = 0;
}
if(IrReceiver.decodedIRData.command == 82){ // nine
Serial.println("nine");
IrReceiver.decodedIRData.command = 0;
}
if(myCom == "power"&& engineStarts == 0){ // Power will run engine Startup Routine
Serial.println(myCom);
analogWrite(engineOne, 50);
delay(40);
analogWrite(engineOne, 0);
delay(80);
analogWrite(engineOne, 90);
delay(70);
analogWrite(engineOne, 0);
delay(100);
while(engineOneBright<=254){
engineOneBright=engineOneBright+1;
analogWrite(engineOne, engineOneBright);
delay(10);
}
analogWrite(engineTwo, 50);
delay(40);
analogWrite(engineTwo, 0);
analogWrite(engineOne,150);
delay(80);
analogWrite(engineTwo, 90);
delay(70);
analogWrite(engineTwo, 0);
analogWrite(engineOne,200);
delay(100);
while(engineTwoBright<=254){
engineTwoBright=engineTwoBright+1;
analogWrite(engineTwo, engineTwoBright);
engineBright=random(50,255);
analogWrite(engineOne,engineBright);
delay(10);
}
engineStarts = 1;
myCom="";
}
if(myCom == "menu" && engineStarts == 1){ // Menu will run engine shutdown routine
Serial.println(myCom);
while(engineOneBright>0){
engineOneBright=engineOneBright-1;
analogWrite(engineOne, engineOneBright);
delay(10);
}
digitalWrite(engineOne, HIGH);
delay(40);
digitalWrite(engineOne, LOW);
delay(80);
digitalWrite(engineOne, HIGH);
engineOneBright=50;
delay(70);
while(engineOneBright<=0){
digitalWrite(engineOne, engineOneBright);
engineOneBright=engineOneBright-1;
}
digitalWrite(engineOne,LOW);
delay(100);
while(engineTwoBright>0){
engineTwoBright=engineTwoBright-1;
analogWrite(engineTwo, engineTwoBright);
delay(10);
}
digitalWrite(engineTwo, HIGH);
delay(40);
digitalWrite(engineTwo, LOW);
delay(80);
digitalWrite(engineTwo, HIGH);
engineTwoBright=50;
delay(70);
digitalWrite(engineTwo,LOW);
delay(100);
engineStarts = 0;
myCom="";
}
if(myCom == "rewind" && engineStarts == 1){ // rewind will run torpedo routine
if(torpedoFire == 0){
while(torpedoOneBright <=255){
analogWrite(torpedoOne,torpedoOneBright);
torpedoOneBright = torpedoOneBright +2;
delay(5);
}
while(torpedoOneBright >= 0){
analogWrite(torpedoOne,torpedoOneBright);
torpedoOneBright = torpedoOneBright -2;
}
delay(50);
digitalWrite(torpedoOne, LOW);
delay(30);
digitalWrite(torpedoOne, HIGH);
delay(50);
digitalWrite(torpedoOne, LOW);
delay(50);
torpedoFire=1;
}
else{
while(torpedoTwoBright <=255){
analogWrite(torpedoTwo,torpedoTwoBright);
torpedoTwoBright = torpedoTwoBright +2;
delay(5);
}
while(torpedoTwoBright >= 0){
analogWrite(torpedoTwo,torpedoTwoBright);
torpedoTwoBright = torpedoTwoBright -2;
delay(1);
}
delay(50);
digitalWrite(torpedoTwo, LOW);
delay(30);
digitalWrite(torpedoTwo, HIGH);
delay(50);
digitalWrite(torpedoTwo, LOW);
delay(50);
torpedoFire=0;
}
myCom="";
}
if(myCom == "fastForward" && engineStarts == 1){ // Menu will fire the blasters
digitalWrite(blasterOne,HIGH);
delay(blasterDelay);
digitalWrite(blasterTwo,HIGH);
digitalWrite(blasterOne,LOW);
delay(blasterDelay);
digitalWrite(blasterOne,HIGH);
digitalWrite(blasterTwo,LOW);
delay(blasterDelay);
digitalWrite(blasterTwo,HIGH);
digitalWrite(blasterOne,LOW);
delay(blasterDelay);
digitalWrite(blasterOne,HIGH);
digitalWrite(blasterTwo,LOW);
delay(blasterDelay);
digitalWrite(blasterOne,LOW)
;Serial.println(myCom);
myCom="";
}
if(myCom == "test"){
Serial.println("test");
digitalWrite(R2Pin, HIGH);
delay(testDealay);
digitalWrite(engineOne, HIGH);
delay(testDealay);
digitalWrite(engineTwo, HIGH);
delay(testDealay);
digitalWrite(torpedoOne, HIGH);
delay(testDealay);
digitalWrite(torpedoTwo, HIGH);
delay(testDealay);
digitalWrite(blasterOne, HIGH);
delay(testDealay);
digitalWrite(blasterTwo, HIGH);
delay(testDealay);
digitalWrite(R2Pin, LOW);
digitalWrite(engineOne, LOW);
digitalWrite(engineTwo, LOW);
digitalWrite(torpedoOne, LOW);
digitalWrite(torpedoTwo, LOW);
digitalWrite(blasterOne, LOW);
digitalWrite(blasterTwo, LOW);
delay(testDealay);
digitalWrite(R2Pin, HIGH);
digitalWrite(engineOne, HIGH);
digitalWrite(engineTwo, HIGH);
digitalWrite(torpedoOne, HIGH);
digitalWrite(torpedoTwo, HIGH);
digitalWrite(blasterOne, HIGH);
digitalWrite(blasterTwo, HIGH);
delay(testDealay);
digitalWrite(R2Pin, LOW);
digitalWrite(engineOne, LOW);
digitalWrite(engineTwo, LOW);
digitalWrite(torpedoOne, LOW);
digitalWrite(torpedoTwo, LOW);
digitalWrite(blasterOne, LOW);
digitalWrite(blasterTwo, LOW);
delay(1000);
myCom="";
}
}