//Sketch to run Halloween Box Monster lights //library headers #include #include //globals ////shift register globals int ser = 34; int rclk = 36; int sclk = 38; int sclr = 40; int wait = 250; int ser1 = 26; int rclk1 = 28; int sclk1 = 30; int sclr1 = 32; //PmodMAXSONAR globals int data[3]; int average; MAXSonar sonar; const MODE mode = PULSEWIDTH; const UNIT units = INCH; int PWpin = 9; //Servo motor globals Servo mouth; int mouthPin = 3; //box globals boolean openState = false; int rightEye = 6; int leftEye = 7; //End of Globals void setup(){ //PmodMAXSONAR setup pinMode(PWpin, INPUT); delay(250+49+49); // delay for the PmodMAXSONAR //servo motor setup mouth.attach(mouthPin); mouth.write(70); delay(500); //box setup pinMode(rightEye, OUTPUT); pinMode(leftEye, OUTPUT); digitalWrite(rightEye, HIGH); // turn on the right eye digitalWrite(leftEye, HIGH); // turn on the left eye //Shift Registers setup //setting the mode of the pins pinMode(ser, OUTPUT); pinMode(rclk, OUTPUT); pinMode(sclk, OUTPUT); pinMode(sclr, OUTPUT); pinMode(ser1, OUTPUT); pinMode(rclk1, OUTPUT); pinMode(sclk1, OUTPUT); pinMode(sclr1, OUTPUT); //setting the initial pin values digitalWrite(ser, LOW); digitalWrite(rclk, LOW); digitalWrite(sclk, LOW); digitalWrite(sclr, LOW); digitalWrite(ser1, LOW); digitalWrite(rclk1, LOW); digitalWrite(sclk1, LOW); digitalWrite(sclr1, LOW); //clearing out the registers digitalWrite(rclk, HIGH); digitalWrite(rclk, LOW); digitalWrite(sclr, HIGH); digitalWrite(rclk1, HIGH); digitalWrite(rclk1, LOW); digitalWrite(sclr1, HIGH); }//End of Setup void loop(){ checkSurroundings(); // checking to see if there is something close by if(average<70){ // if something is within 70 inches... openState = true; digitalWrite(rightEye, LOW); //turn off the right eye so it's not blinding people digitalWrite(leftEye, LOW); //turn off the left eye so it's not blinding people mouth.write(175); //open up the mouth of the Box Monster delay(350); // give the servo motor time to finish opening the lid while(openState == true){ // while the openState is true displayHappyHalloween(400); //display "HAPPY HALLOWEEN" checkSurroundings(); // check to see if there is something close by if(average>70){ // if there is not anything with 70 inches... openState = false; // turn off the openState; otherwise, repeat the message } } //end of while the openState is true mouth.write(70); // close the mouth digitalWrite(rightEye, HIGH); //turn on the right eye digitalWrite(leftEye, HIGH); //turn on the left eye } delay(500); // a delay }//End of Loop ////////////////////////////////////////////////////////* /* * /* User Defined Functions * /* * *//////////////////////////////////////////////////////// void checkSurroundings(){ for(int i=0; i<3; i++){ data[i] = sonar.getDistance(PULSEWIDTH, PWpin, units); delay(300); } average = (data[0]+data[1]+data[2])/3; } void clearDisplay(){ digitalWrite(rclk, LOW); shiftOut(ser, sclk, LSBFIRST, 0); digitalWrite(rclk, HIGH); digitalWrite(rclk1, LOW); shiftOut(ser1, sclk1, LSBFIRST, 0); digitalWrite(rclk1, HIGH); } void displayH(int lightDuration){ digitalWrite(rclk, LOW); shiftOut(ser, sclk, LSBFIRST, 148); digitalWrite(rclk, HIGH); digitalWrite(rclk1, LOW); shiftOut(ser1, sclk1, LSBFIRST, 208); digitalWrite(rclk1, HIGH); delay(lightDuration); clearDisplay(); } void displayA(int lightDuration){ digitalWrite(rclk, LOW); shiftOut(ser, sclk, LSBFIRST, 151); digitalWrite(rclk, HIGH); digitalWrite(rclk1, LOW); shiftOut(ser1, sclk1, LSBFIRST, 208); digitalWrite(rclk1, HIGH); delay(lightDuration); clearDisplay(); } void displayP(int lightDuration){ digitalWrite(rclk, LOW); shiftOut(ser, sclk, LSBFIRST, 151); digitalWrite(rclk, HIGH); digitalWrite(rclk1, LOW); shiftOut(ser1, sclk1, LSBFIRST, 192); digitalWrite(rclk1, HIGH); delay(lightDuration); clearDisplay(); } void displayY(int lightDuration){ digitalWrite(rclk, LOW); shiftOut(ser, sclk, LSBFIRST, 96); digitalWrite(rclk, HIGH); digitalWrite(rclk1, LOW); shiftOut(ser1, sclk1, LSBFIRST, 32); digitalWrite(rclk1, HIGH); delay(lightDuration); clearDisplay(); } void displayL(int lightDuration){ digitalWrite(rclk, LOW); shiftOut(ser, sclk, LSBFIRST, 4); digitalWrite(rclk, HIGH); digitalWrite(rclk1, LOW); shiftOut(ser1, sclk1, LSBFIRST, 67); digitalWrite(rclk1, HIGH); delay(lightDuration); clearDisplay(); } void displayO(int lightDuration){ digitalWrite(rclk, LOW); shiftOut(ser, sclk, LSBFIRST, 23); digitalWrite(rclk, HIGH); digitalWrite(rclk1, LOW); shiftOut(ser1, sclk1, LSBFIRST, 83); digitalWrite(rclk1, HIGH); delay(lightDuration); clearDisplay(); } void displayW(int lightDuration){ digitalWrite(rclk, LOW); shiftOut(ser, sclk, LSBFIRST, 20); digitalWrite(rclk, HIGH); digitalWrite(rclk1, LOW); shiftOut(ser1, sclk1, LSBFIRST, 92); digitalWrite(rclk1, HIGH); delay(lightDuration); clearDisplay(); } void displayE(int lightDuration){ digitalWrite(rclk, LOW); shiftOut(ser, sclk, LSBFIRST, 135); digitalWrite(rclk, HIGH); digitalWrite(rclk1, LOW); shiftOut(ser1, sclk1, LSBFIRST, 195); digitalWrite(rclk1, HIGH); delay(lightDuration); clearDisplay(); } void displayN(int lightDuration){ digitalWrite(rclk, LOW); shiftOut(ser, sclk, LSBFIRST, 52); digitalWrite(rclk, HIGH); digitalWrite(rclk1, LOW); shiftOut(ser1, sclk1, LSBFIRST, 84); digitalWrite(rclk1, HIGH); delay(lightDuration); clearDisplay(); } void displayHappyHalloween(int lightDuration){ displayH(lightDuration); displayA(lightDuration); displayP(lightDuration); delay(100); displayP(lightDuration); displayY(lightDuration); delay(lightDuration); displayH(lightDuration); displayA(lightDuration); displayL(lightDuration); delay(100); displayL(lightDuration); displayO(lightDuration); displayW(lightDuration); displayE(lightDuration); delay(100); displayE(lightDuration); displayN(lightDuration); }