Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Based off AlphaBeta's menu library: http://www.arduino.cc/playground/uploads/Profiles/MenuBackend_1-0.zip
- Arduino forum post: http://forum.arduino.cc/index.php/topic,38053.0.html
- and The Liquid Crystal library which is provided with arduino.
- This project is a Airsoft Bomb/Intel Box. For demoonstration video please visit
- */
- #include <LiquidCrystal.h>
- #include <MenuBackend.h>
- const long sketchversion = 1.0;
- const int BTN_LEFT = 7;
- const int BTN_RIGHT = 6;
- const int BTN_CONFIRM = 10;
- const int BTN_DOWN = 8;
- const int BTN_UP = 9;
- //const int BTN_CANCEL = 8;
- long last_read = 0;
- int pin = 13;
- int lastclicked = 0;
- int DetinationTime = 5;
- int DesCord = 5;
- int GameType = 5;
- const int DeBounceTime = 500;
- const int menuitems = 4;
- int val = 0;
- byte index = 0;
- /*
- This program demonstrates a menu modeled after the menubar in the Arduino IDE
- +root
- +file +edit +sketch +tools +help
- +new +cut +verify (V) +autoformat +environment
- +open
- +examples
- +ArduinoISP
- */
- LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
- //this controls the menu backend and the event generation
- MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent);
- //beneath is list of menu items needed to build the menu
- MenuItem miGameDur = MenuItem("Game Duration");
- MenuItem mi5mins = MenuItem("5 Mins");
- MenuItem mi10mins = MenuItem("10 Mins");
- MenuItem mi15mins = MenuItem("15 Mins");
- MenuItem mi20mins = MenuItem("20 Mins");
- MenuItem mi25mins = MenuItem("25 Mins");
- MenuItem mi30mins = MenuItem("30 Mins");
- MenuItem mi35mins = MenuItem("35 Mins");
- MenuItem mi40mins = MenuItem("40 Mins");
- MenuItem mi45mins = MenuItem("45 Mins");
- MenuItem mi50mins = MenuItem("50 Mins");
- MenuItem mi55mins = MenuItem("55 Mins");
- MenuItem mi60mins = MenuItem("60 Mins");
- //MenuItem miArduinoISP = MenuItem("ArduinoISP");
- MenuItem miMode = MenuItem("Mode");
- MenuItem miDemo = MenuItem("Demolition");
- MenuItem miIntel = MenuItem("Intel Recon");
- MenuItem mi11objective = MenuItem("1 Objective");
- MenuItem mi12objective = MenuItem("2 Objective");
- MenuItem mi13objective = MenuItem("3 Objective");
- MenuItem mi14objective = MenuItem("4 Objective");
- MenuItem mi15objective = MenuItem("5 Objective");
- MenuItem miCordDes = MenuItem("Cord Designation");
- MenuItem miblackcord = MenuItem("Black Cord",'V');
- MenuItem miyellowcord = MenuItem("Yellow Cord",'V');
- MenuItem miredcord = MenuItem("Red Cord",'V');
- MenuItem mibluecord = MenuItem("Blue Cord",'V');
- MenuItem mibrowncord = MenuItem("Brown Cord",'V');
- MenuItem migreencord = MenuItem("Green Cord",'V');
- MenuItem miCypCode = MenuItem("Set Cypher Code");
- MenuItem miArmit = MenuItem("Arm It!");
- //MenuItem miHelp = MenuItem("Help");
- //MenuItem miEnvironment = MenuItem("Environment");
- //this function builds the menu and connects the correct items together
- void menuSetup()
- {
- lcd.clear();
- lcd.print("cSpec Intel Box v");
- lcd.print(sketchversion);
- lcd.setCursor(0,1);
- lcd.print("Booting up");
- delay(3000);
- lcd.clear();
- lcd.print("Setting up Menu");
- lcd.setCursor(0,1);
- lcd.print("Please wait...");
- Serial.println("Setting up menu...");
- //add the file menu to the menu root
- //when add is used, as opposed to addX as you see below, the item is added below the item it's added to
- menu.getRoot().add(miGameDur);
- //add all items below File to the file menu item,
- //notice the arduino isp item is added _to the right_ of the examples item
- miGameDur.add(mi5mins).add(mi10mins).add(mi15mins).add(mi20mins).add(mi25mins).add(mi30mins).add(mi35mins).add(mi40mins).add(mi45mins).add(mi50mins).add(mi55mins).add(mi60mins);
- //because edit item is to the right of the file item, we use the addRight method when inserting this item
- //then we add the cut item, because it is below the edit
- miGameDur.addRight(miMode).add(miDemo).add(miIntel).addRight(mi11objective).add(mi12objective).add(mi13objective).add(mi14objective).add(mi15objective);
- miMode.addRight(miCordDes).add(miblackcord).add(miyellowcord).add(mibluecord).add(miredcord).add(migreencord).add(mibrowncord);
- miCordDes.addRight(miCypCode);
- miCypCode.addRight(miArmit);
- //miTools.addRight(miHelp).add(miEnvironment);
- delay(2000);
- }
- /*
- This is an important function
- Here all use events are handled
- This is where you define a behaviour for a menu item
- */
- void menuUseEvent(MenuUseEvent used)
- {
- lcd.clear();
- lcd.print("Duraton set..");
- lcd.setCursor(0,1);
- lcd.print("Wait.. 2 secs");
- delay(2000);
- Serial.print("Menu use ");
- Serial.println(used.item.getName());
- if (used.item == "Black Cord") //comparison using a string literal
- {
- DesCord = 1;
- menu.moveUp();
- menu.moveRight();
- //Serial.println("menuUseEvent found Game Durration");
- }
- if (used.item == "Yellow Cord") //comparison using a string literal
- {
- DesCord = 2;
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- //Serial.println("menuUseEvent found Game Durration");
- }
- if (used.item == "Red Cord") //comparison using a string literal
- {
- DesCord = 3;
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- //Serial.println("menuUseEvent found Game Durration");
- }
- if (used.item == "Blue Cord") //comparison using a string literal
- {
- DesCord = 4;
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- //Serial.println("menuUseEvent found Game Durration");
- }
- if (used.item == "Brown Cord") //comparison using a string literal
- {
- DesCord = 5;
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- //Serial.println("menuUseEvent found Game Durration");
- }
- if (used.item == "Green Cord") //comparison using a string literal
- {
- DesCord = 6;
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- //Serial.println("menuUseEvent found Game Durration");
- }
- if (used.item == "Demolition") //comparison using a string literal
- {
- GameType = 1;
- menu.moveUp();
- menu.moveRight();
- //Serial.println("menuUseEvent found Game Durration");
- }
- if (used.item == "Intel Recon") //comparison using a string literal
- {
- menu.moveRight();
- //Serial.println("menuUseEvent found Game Durration");
- }
- if (used.item == "objective1") //comparison using a string literal
- {
- GameType = 2;
- menu.moveUp();
- menu.moveRight();
- //Serial.println("menuUseEvent found Game Durration");
- }
- if (used.item == "objective2") //comparison using a string literal
- {
- GameType = 3;
- menu.moveUp();
- menu.moveRight();
- //Serial.println("menuUseEvent found Game Durration");
- }
- if (used.item == "objective3") //comparison using a string literal
- {
- GameType = 4;
- menu.moveUp();
- menu.moveRight();
- //Serial.println("menuUseEvent found Game Durration");
- }
- if (used.item == "objective4") //comparison using a string literal
- {
- GameType = 5;
- menu.moveUp();
- menu.moveRight();
- //Serial.println("menuUseEvent found Game Durration");
- }
- if (used.item == "objective5") //comparison using a string literal
- {
- GameType = 6;
- menu.moveUp();
- menu.moveRight();
- //Serial.println("menuUseEvent found Game Durration");
- }
- if (used.item == "5 Mins") //comparison using a string literal
- {
- DetinationTime = 5;
- menu.moveUp();
- menu.moveRight();
- //Serial.println("menuUseEvent found Game Durration");
- }
- if (used.item == "10 Mins") //comparison using a string literal
- {
- DetinationTime = 10;
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- }
- if (used.item == "15 Mins") //comparison using a string literal
- {
- DetinationTime = 15;
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- }
- if (used.item == "20 Mins") //comparison using a string literal
- {
- DetinationTime = 20;
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- }
- if (used.item == "25 Mins") //comparison using a string literal
- {
- DetinationTime = 25;
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- }
- if (used.item == "300 Mins") //comparison using a string literal
- {
- DetinationTime = 30;
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- }
- if (used.item == "35 Mins") //comparison using a string literal
- {
- DetinationTime = 35;
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- }
- if (used.item == "40 Mins") //comparison using a string literal
- {
- DetinationTime = 40;
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- }
- if (used.item == "45 Mins") //comparison using a string literal
- {
- DetinationTime = 45;
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- }
- if (used.item == "50 Mins") //comparison using a string literal
- {
- DetinationTime = 50;
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- }
- if (used.item == "55 Mins") //comparison using a string literal
- {
- DetinationTime = 55;
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- }
- if (used.item == "60 Mins") //comparison using a string literal
- {
- DetinationTime = 60;
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveUp();
- menu.moveRight();
- }
- if (used.item == "Arm it!") {
- Serial.print("Intel Box is now armed.");
- }
- //if (used.item == miVerify) //comparison agains a known item
- //{
- // Serial.println("menuUseEvent found Verify (V)");
- //}
- DetinationTime = DetinationTime * 100;
- }
- /*
- This is an important function
- Here we get a notification whenever the user changes the menu
- That is, when the menu is navigated
- */
- void menuChangeEvent(MenuChangeEvent changed)
- {
- Serial.print("Menu change ");
- Serial.print(changed.from.getName());
- Serial.print(" ");
- Serial.println(changed.to.getName());
- lcd.clear();
- lcd.print("cSpec Intel Box v");
- lcd.print(sketchversion);
- lcd.setCursor(0,1);
- lcd.print(changed.to.getName());
- lastclicked = 0;
- val =0;
- }
- void setup()
- {
- pinMode(BTN_LEFT,INPUT);
- pinMode(BTN_RIGHT,INPUT);
- pinMode(BTN_CONFIRM,INPUT);
- //pinMode(BTN_CANCEL,INPUT);
- pinMode(BTN_UP,INPUT);
- pinMode(BTN_DOWN,INPUT);
- lcd.clear();
- lcd.begin(16,2);
- Serial.begin(9600);
- menuSetup();
- Serial.println("Starting navigation (see source for description):");
- menu.moveDown(); //move to file
- /*menu.moveDown(); //move to file
- menu.moveDown(); //move to new
- menu.moveDown(); //move to open
- menu.moveDown(); //move to examples
- menu.moveRight(); //move to arduinoisp
- menu.use(); //use arduniisp
- menu.moveLeft(); //move to examples
- menu.moveUp(); //move to open
- menu.moveUp(); //move to new
- menu.moveUp(); //move to file
- menu.moveRight(); //move to edit
- menu.moveRight(); //move to sketch
- menu.moveDown(); //move to verify
- menu.use(); //use verify
- menu.moveBack(); //move back to sketch
- menu.moveBack(); //move back to edit
- menu.moveBack(); //move back to file
- menu.moveBack(); //move back to new
- menu.use(); //use new
- //menu.use('V'); //use verify based on its shortkey 'V'
- */
- }
- void loop()
- {
- if((millis() - last_read) >= 1000) {
- }
- if((millis() - last_read) >= DeBounceTime) {
- if(digitalRead(BTN_LEFT) == 1)
- buttonClicked(BTN_LEFT);
- digitalWrite(BTN_LEFT, LOW);
- digitalWrite(pin, HIGH); // turn the LED on (HIGH is the voltage level)
- delay(1000); // wait for a second
- digitalWrite(pin, LOW); // turn the LED off by making the voltage LOW
- delay(1000);
- }
- if(digitalRead(BTN_RIGHT) == 1) {
- buttonClicked(BTN_RIGHT);
- digitalWrite(BTN_RIGHT, LOW);
- digitalWrite(pin, HIGH); // turn the LED on (HIGH is the voltage level)
- delay(1000); // wait for a second
- digitalWrite(pin, LOW); // turn the LED off by making the voltage LOW
- delay(1000);
- }
- if (digitalRead(BTN_CONFIRM) == 1){
- buttonClicked(BTN_CONFIRM);
- digitalWrite(BTN_CONFIRM, LOW);
- digitalWrite(pin, HIGH); // turn the LED on (HIGH is the voltage level)
- delay(1000); // wait for a second
- digitalWrite(pin, LOW); // turn the LED off by making the voltage LOW
- delay(1000);
- }
- //if(digitalRead(BTN_CANCEL) == 1) {
- // buttonClicked(BTN_CANCEL);
- // digitalWrite(BTN_CANCEL, LOW);
- //}
- if(digitalRead(BTN_DOWN) == 1) {
- buttonClicked(BTN_DOWN);
- digitalWrite(BTN_DOWN, LOW);
- digitalWrite(pin, HIGH); // turn the LED on (HIGH is the voltage level)
- delay(1000); // wait for a second
- digitalWrite(pin, LOW); // turn the LED off by making the voltage LOW
- delay(1000);
- }
- if(digitalRead(BTN_UP) == 1) {
- buttonClicked(BTN_UP);
- digitalWrite(BTN_UP, LOW);
- digitalWrite(pin, HIGH); // turn the LED on (HIGH is the voltage level)
- delay(1000); // wait for a second
- digitalWrite(pin, LOW); // turn the LED off by making the voltage LOW
- delay(1000);
- }
- last_read = millis();
- }
- void buttonClicked(int btn) {
- digitalWrite(pin, HIGH); // turn the LED on (HIGH is the voltage level)
- delay(1000); // wait for a second
- digitalWrite(pin, LOW); // turn the LED off by making the voltage LOW
- delay(1000);
- Serial.println(index);
- if(btn == BTN_LEFT && index >= 0 && digitalRead(BTN_LEFT) == 1) {
- index = index-1;
- menu.moveLeft();
- }
- if (btn == BTN_RIGHT && index <= menuitems && digitalRead(BTN_RIGHT) == 1) {
- index = index+1;
- menu.moveRight();
- }
- if (btn == BTN_CONFIRM && digitalRead(BTN_CONFIRM) == 1) {
- menu.use();
- }
- // if (btn == BTN_CANCEL && digitalRead(BTN_RIGHT) == 1) {
- //menu.moveBack();
- //}
- if (btn == BTN_UP && digitalRead(BTN_UP) == 1) {
- menu.moveUp();
- }
- if (btn == BTN_DOWN && digitalRead(BTN_DOWN) == 1) {
- menu.moveDown();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement