//Grad Cap //David Tobin //December 2018 //Define Pins: #define Red 9 #define Green 10 #define IRReceiver 11 #define buttonPin 12 #define servoPin 13 //Define IR Hex Codes: #define plus 0xA3C8EDDB #define minus 0xF076C13B //Initialize Servo: #include Servo servo; //Initialize IR Receiver: #include IRrecv irrecv(IRReceiver); decode_results results; //Initialize LCD #include LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //Define Variables: int maxang = 175; int minang = 5; int val = maxang; int servospeed = 7; bool cwRotation = false; bool ccwRotation = false; bool push = false; int buttonState = LOW; void setup(){ //Define Pin Modes: pinMode (Red, OUTPUT); pinMode (Green, OUTPUT); pinMode (buttonPin, INPUT); pinMode (IRReceiver, INPUT); //Attach and Position Servo servo.attach(servoPin); servo.write(maxang); //Connect to Serial Monitor Serial.begin(9600); //Enable IR Reciever irrecv.enableIRIn(); //Define LCD Dimensions lcd.begin(16, 2); //Set Initial Conditions lcd.print("Not Graduated :("); digitalWrite(Red, HIGH); digitalWrite(Green, LOW); results.value = minus; } void loop() { //Check for Button Push and Define Manual Change buttonState = digitalRead(buttonPin); if (buttonState == HIGH){ push = true; Serial.println("push"); if (results.value == plus){ results.value = minus; }else if (results.value == minus){ results.value = plus; } delay(400); } //Check for IR Signal (or Button Push) if (irrecv.decode(&results) || push){ irrecv.resume(); Serial.println(results.value, HEX); //Set Parameters for CW Move if (results.value == plus){ cwRotation = !cwRotation; ccwRotation = false; lcd.clear(); lcd.setCursor(0, 0); lcd.print("GRADUATED!!! :)"); lcd.setCursor(0, 1); lcd.print("THANKS MOM & DAD"); digitalWrite(Red, LOW); digitalWrite(Green, HIGH); } //Set Parameters for CCW Moce if (results.value == minus){ ccwRotation = !ccwRotation; cwRotation = false; lcd.clear(); lcd.setCursor(0, 0); lcd.print("Not Graduated :("); digitalWrite(Red, HIGH); digitalWrite(Green, LOW); } //Reset Button Status push = false; } //Conduct Move if (cwRotation && (val != minang)){ val--; } if (ccwRotation && (val != maxang)){ val++; } servo.write(val); delay(servospeed); }