#include "Arduino.h" #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" #include <Adafruit_NeoPixel.h> #include <Servo.h> // sensors #define LDR0pin A0 #define LDR1pin A1 #define LDR2pin A2 #define LDR3pin A3 #define LDR4pin A4 // servos/motors #define boo1pin 2 #define boo2pin 3 #define ceilingpin 4 // gun #define buttpin 5 #define indipin 6 #define laserpin 7 // LEDs #define melodypin 8 #define mompin 9 #define DATA_PIN 10 #define NUM_LEDS 20 // DFPlayer SoftwareSerial mySoftwareSerial(12, 13); // TX, RX DFRobotDFPlayerMini myDFPlayer; // led strips Adafruit_NeoPixel lightning_strip = Adafruit_NeoPixel(NUM_LEDS, DATA_PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel melody = Adafruit_NeoPixel(2, melodypin, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel mom = Adafruit_NeoPixel(2, mompin, NEO_GRB + NEO_KHZ800); // servos // twelve servo objects can be created on most boards Servo servo0; // create servo1 object to control a servo1 Servo servo1; Servo servo2; // ADJUST FOR LIGHT THRESHOLDS short laserThresh = 240; short altThresh = 255; // lightning unsigned long flickerTime = 0, fadeInTime = 0; byte i = 6, lowBright = 10, highBright = 255; boolean lightState = true; // boo servos unsigned long booTime = 0; boolean booState = false; // mom, melody, ceiling trigger times unsigned long momTime = 0, melodyTime = 0, ceilingTime = 0; // used for debouncing button unsigned long lastDebounceTime = 0, highTime = 1, lasthighTime = 0; byte buttonState, lastButtonState = HIGH; boolean adjust = true; // sensors byte LDR0 = 0, LDR1 = 0, LDR2 = 0, LDR3 = 0, LDR4 = 0, LDR5 = 0; void setup() { lightning_strip.begin(); lightning_strip.setBrightness(lowBright); setLightning(0,255,0); melody.begin(); melody.setBrightness(100); setMelody(0,0,0); mom.begin(); mom.setBrightness(100); setMom(0,0,0); mySoftwareSerial.begin(9600); Serial.begin(9600); Serial.println(); Serial.println(F("DFRobot DFPlayer Mini Demo")); Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)")); if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3. Serial.println(F("Unable to begin:")); Serial.println(F("1.Please recheck the connection!")); Serial.println(F("2.Please insert the SD card!")); while(true); } Serial.println(F("DFPlayer Mini online.")); // CHANGE TO 20 myDFPlayer.volume(30); //Set volume value (0~30). // gun pinMode(laserpin, OUTPUT); pinMode(indipin, OUTPUT); pinMode(buttpin, INPUT_PULLUP); // sensors pinMode(LDR0pin, INPUT); pinMode(LDR1pin, INPUT); pinMode(LDR2pin, INPUT); pinMode(LDR3pin, INPUT); pinMode(LDR4pin, INPUT); // servos servo0.attach(boo1pin); servo1.attach(boo2pin); // attaches the servo1 on pin 9 to the servo1 object servo2.attach(ceilingpin); // initialize servo positions: servo0.write(40); // boo1 swivels out RIGHT servo1.write(40); // boo2 swivels out LEFT servo2.write(90); // ceiling starts horizontal // opening song myDFPlayer.playMp3Folder(0); } void loop() { LDR0 = analogRead(LDR0pin); LDR1 = analogRead(LDR1pin); LDR2 = analogRead(LDR2pin); LDR3 = analogRead(LDR3pin); LDR4 = analogRead(LDR4pin); //trigger(trig_time, reload_time); //default (250, 1000) trigger(250, 1000); // boo(toggle_interval boo(2000); //lightning(flickerRate, blackout_time); lightning(150, 3000); lightning_strip.show(); Serial.println(LDR4); //targetHit(playTime) melodyHit(4000); momHit(5500); ceiling(3000); } void ceiling (short playTime) { if (LDR4 > laserThresh) { ceilingTime = millis(); myDFPlayer.playMp3Folder(4); } if (millis() - ceilingTime < playTime) servo2.write(0); else servo2.write(90); } void melodyHit (short playTime) { // if target hit, reset routine if (LDR2 > laserThresh) { melodyTime = millis(); myDFPlayer.playMp3Folder(2); } if ((millis() - melodyTime < playTime)&&(melodyTime > 0)) setMelody(128, 0, 128); else setMelody(0, 0, 0); } void momHit (short playTime) { // if target hit, reset routine if (LDR3 > laserThresh) { momTime = millis(); myDFPlayer.playMp3Folder(3); } if ((millis() - momTime < playTime)&&(momTime > 0)) setMom(128, 0, 128); else setMom(0, 0, 0); } void boo (short toggle_interval) { if (millis() - booTime > toggle_interval) { booState = !booState; booTime = millis(); } if (booState) { servo0.write(40); servo1.write(40); } else { servo0.write(160); servo1.write(160); } } void lightning (short flickerRate, short blackout) { if (i > 6) i = 6; // if target hit, reset routine if ((LDR0 > laserThresh)||(LDR1 > laserThresh)) { i = 0; lightning_strip.setBrightness(highBright); lightState = true; myDFPlayer.playMp3Folder(1); } // flicker on/off 5 times at flickerRate if ((millis() - flickerTime > flickerRate)&& (i < 5)) { lightState = !lightState; if (lightState) setLightning(255,255,255); else setLightning(0,0,0); i++; flickerTime = millis(); } // lights stay off for blackout time else if ((millis() - flickerTime > blackout)&& (i == 5)) { lightning_strip.setBrightness(lowBright); for (short j = 0 ; j < 255 ; ) { if (fadeInTime - millis() > 25) { setLightning(0, j, 0); j++; } fadeInTime = millis(); } lightState = !lightState; flickerTime = millis(); i++; } } void trigger(short trig_time, short reload) { adjust = digitalRead(buttpin); if (adjust != lastButtonState) { lastDebounceTime = millis(); } if ((millis() - lastDebounceTime) > 50) { if (adjust != buttonState) { buttonState = adjust; if ((buttonState == LOW) && (millis() > 500)) { highTime = millis(); } } } lastButtonState = adjust; if ((millis() - highTime <= trig_time)&&(millis() > 500)) { if (highTime-lasthighTime >= reload) { digitalWrite(laserpin, HIGH); lasthighTime = highTime; } digitalWrite(indipin, LOW); } else { digitalWrite(laserpin, LOW); digitalWrite(indipin, HIGH); } } // Set all LEDs to a given color and apply it (visible) void setLightning (byte red, byte green, byte blue) { for(byte i = 0; i < NUM_LEDS; i++ ) { lightning_strip.setPixelColor(i, lightning_strip.Color(red, green, blue)); } lightning_strip.show(); } // Set all LEDs to a given color and apply it (visible) void setMom (byte red, byte green, byte blue) { for(byte i = 0; i < 2; i++ ) { mom.setPixelColor(i, mom.Color(red, green, blue)); } mom.show(); } // Set all LEDs to a given color and apply it (visible) void setMelody (byte red, byte green, byte blue) { for(byte i = 0; i < 2; i++ ) { melody.setPixelColor(i, melody.Color(red, green, blue)); } melody.show(); }
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter