Advertisement
Guest User

Arduino Airsoft Intel Box using MenuBackend.h

a guest
Mar 18th, 2014
232
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.80 KB | None | 0 0
  1. Based off AlphaBeta's menu library: http://www.arduino.cc/playground/uploads/Profiles/MenuBackend_1-0.zip
  2. Arduino forum post: http://forum.arduino.cc/index.php/topic,38053.0.html
  3.  
  4. and The Liquid Crystal library which is provided with arduino.
  5.  
  6. This project is a Airsoft Bomb/Intel Box. For demoonstration video please visit
  7.  
  8. */
  9.  
  10. #include <LiquidCrystal.h>
  11.  
  12. #include <MenuBackend.h>
  13. const long sketchversion = 1.0;
  14. const int BTN_LEFT = 7;
  15. const int BTN_RIGHT = 6;
  16. const int BTN_CONFIRM = 10;
  17. const int BTN_DOWN = 8;
  18. const int BTN_UP = 9;
  19. //const int BTN_CANCEL = 8;
  20. long last_read = 0;
  21. int pin = 13;
  22. int lastclicked = 0;
  23. int DetinationTime = 5;
  24. int DesCord = 5;
  25. int GameType = 5;
  26. const int DeBounceTime = 500;
  27. const int menuitems = 4;
  28.  
  29. int val = 0;
  30. byte index = 0;
  31. /*
  32. This program demonstrates a menu modeled after the menubar in the Arduino IDE
  33.  
  34.   +root
  35. +file +edit   +sketch +tools +help
  36. +new +cut +verify (V) +autoformat +environment
  37. +open
  38. +examples
  39.  +ArduinoISP
  40. */
  41. LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
  42. //this controls the menu backend and the event generation
  43. MenuBackend menu = MenuBackend(menuUseEvent,menuChangeEvent);
  44. //beneath is list of menu items needed to build the menu
  45. MenuItem miGameDur = MenuItem("Game Duration");
  46. MenuItem mi5mins = MenuItem("5 Mins");
  47. MenuItem mi10mins = MenuItem("10 Mins");
  48. MenuItem mi15mins = MenuItem("15 Mins");
  49. MenuItem mi20mins = MenuItem("20 Mins");
  50. MenuItem mi25mins = MenuItem("25 Mins");
  51. MenuItem mi30mins = MenuItem("30 Mins");
  52. MenuItem mi35mins = MenuItem("35 Mins");
  53. MenuItem mi40mins = MenuItem("40 Mins");
  54. MenuItem mi45mins = MenuItem("45 Mins");
  55. MenuItem mi50mins = MenuItem("50 Mins");
  56. MenuItem mi55mins = MenuItem("55 Mins");
  57. MenuItem mi60mins = MenuItem("60 Mins");
  58. //MenuItem miArduinoISP = MenuItem("ArduinoISP");
  59.  
  60. MenuItem miMode = MenuItem("Mode");
  61. MenuItem miDemo = MenuItem("Demolition");
  62. MenuItem miIntel = MenuItem("Intel Recon");
  63. MenuItem mi11objective = MenuItem("1 Objective");
  64. MenuItem mi12objective = MenuItem("2 Objective");
  65. MenuItem mi13objective = MenuItem("3 Objective");
  66. MenuItem mi14objective = MenuItem("4 Objective");
  67. MenuItem mi15objective = MenuItem("5 Objective");
  68.  
  69. MenuItem miCordDes = MenuItem("Cord Designation");
  70. MenuItem miblackcord = MenuItem("Black Cord",'V');
  71. MenuItem miyellowcord = MenuItem("Yellow Cord",'V');
  72. MenuItem miredcord = MenuItem("Red Cord",'V');
  73. MenuItem mibluecord = MenuItem("Blue Cord",'V');
  74. MenuItem mibrowncord = MenuItem("Brown Cord",'V');
  75. MenuItem migreencord = MenuItem("Green Cord",'V');
  76.  
  77. MenuItem miCypCode = MenuItem("Set Cypher Code");
  78. MenuItem miArmit = MenuItem("Arm It!");
  79. //MenuItem miHelp = MenuItem("Help");
  80. //MenuItem miEnvironment = MenuItem("Environment");
  81.  
  82. //this function builds the menu and connects the correct items together
  83. void menuSetup()
  84. {
  85.   lcd.clear();
  86. lcd.print("cSpec Intel Box v");
  87. lcd.print(sketchversion);
  88. lcd.setCursor(0,1);
  89. lcd.print("Booting up");
  90. delay(3000);
  91.  
  92.  lcd.clear();
  93. lcd.print("Setting up Menu");
  94.  lcd.setCursor(0,1);
  95. lcd.print("Please wait...");
  96. Serial.println("Setting up menu...");
  97.  
  98.      //add the file menu to the menu root
  99.      //when add is used, as opposed to addX as you see below, the item is added below the item it's added to
  100.      menu.getRoot().add(miGameDur);
  101.      //add all items below File to the file menu item,
  102.      //notice the arduino isp item is added _to the right_ of the examples item
  103.      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);
  104.      //because edit item is to the right of the file item, we use the addRight method when inserting this item
  105.      //then we add the cut item, because it is below the edit
  106.      miGameDur.addRight(miMode).add(miDemo).add(miIntel).addRight(mi11objective).add(mi12objective).add(mi13objective).add(mi14objective).add(mi15objective);
  107.      miMode.addRight(miCordDes).add(miblackcord).add(miyellowcord).add(mibluecord).add(miredcord).add(migreencord).add(mibrowncord);
  108.      miCordDes.addRight(miCypCode);
  109.      miCypCode.addRight(miArmit);
  110.      //miTools.addRight(miHelp).add(miEnvironment);
  111. delay(2000);
  112.  
  113. }
  114.  
  115. /*
  116. This is an important function
  117. Here all use events are handled
  118.  
  119. This is where you define a behaviour for a menu item
  120. */
  121. void menuUseEvent(MenuUseEvent used)
  122. {
  123.  lcd.clear();
  124. lcd.print("Duraton set..");
  125. lcd.setCursor(0,1);
  126.  
  127. lcd.print("Wait.. 2 secs");
  128. delay(2000);
  129.  
  130. Serial.print("Menu use ");
  131. Serial.println(used.item.getName());
  132. if (used.item == "Black Cord") //comparison using a string literal
  133. {
  134. DesCord = 1;
  135. menu.moveUp();
  136.  menu.moveRight();
  137. //Serial.println("menuUseEvent found Game Durration");
  138. }
  139. if (used.item == "Yellow Cord") //comparison using a string literal
  140. {
  141.  
  142. DesCord = 2;
  143. menu.moveUp();
  144. menu.moveUp();
  145.  menu.moveRight();
  146. //Serial.println("menuUseEvent found Game Durration");
  147. }
  148. if (used.item == "Red Cord") //comparison using a string literal
  149. {
  150. DesCord = 3;
  151. menu.moveUp();
  152. menu.moveUp();
  153. menu.moveUp();
  154.  menu.moveRight();
  155. //Serial.println("menuUseEvent found Game Durration");
  156. }
  157. if (used.item == "Blue Cord") //comparison using a string literal
  158. {
  159. DesCord = 4;
  160. menu.moveUp();
  161. menu.moveUp();
  162. menu.moveUp();
  163. menu.moveUp();
  164.  menu.moveRight();
  165. //Serial.println("menuUseEvent found Game Durration");
  166. }
  167. if (used.item == "Brown Cord") //comparison using a string literal
  168. {
  169. DesCord = 5;
  170. menu.moveUp();
  171. menu.moveUp();
  172. menu.moveUp();
  173. menu.moveUp();
  174. menu.moveUp();
  175.  menu.moveRight();
  176. //Serial.println("menuUseEvent found Game Durration");
  177. }
  178. if (used.item == "Green Cord") //comparison using a string literal
  179. {
  180. DesCord = 6;
  181. menu.moveUp();
  182. menu.moveUp();
  183. menu.moveUp();
  184. menu.moveUp();
  185. menu.moveUp();
  186. menu.moveUp();
  187.  menu.moveRight();
  188. //Serial.println("menuUseEvent found Game Durration");
  189. }
  190.  
  191. if (used.item == "Demolition") //comparison using a string literal
  192. {
  193. GameType = 1;
  194. menu.moveUp();
  195.  menu.moveRight();
  196. //Serial.println("menuUseEvent found Game Durration");
  197. }
  198. if (used.item == "Intel Recon") //comparison using a string literal
  199. {
  200.  menu.moveRight();
  201. //Serial.println("menuUseEvent found Game Durration");
  202. }
  203. if (used.item == "objective1") //comparison using a string literal
  204. {
  205. GameType = 2;
  206. menu.moveUp();
  207.  menu.moveRight();
  208. //Serial.println("menuUseEvent found Game Durration");
  209. }
  210. if (used.item == "objective2") //comparison using a string literal
  211. {
  212. GameType = 3;
  213. menu.moveUp();
  214.  menu.moveRight();
  215. //Serial.println("menuUseEvent found Game Durration");
  216. }
  217. if (used.item == "objective3") //comparison using a string literal
  218. {
  219. GameType = 4;
  220. menu.moveUp();
  221.  menu.moveRight();
  222. //Serial.println("menuUseEvent found Game Durration");
  223. }
  224. if (used.item == "objective4") //comparison using a string literal
  225. {
  226. GameType = 5;
  227. menu.moveUp();
  228.  menu.moveRight();
  229. //Serial.println("menuUseEvent found Game Durration");
  230. }
  231. if (used.item == "objective5") //comparison using a string literal
  232. {
  233. GameType = 6;
  234. menu.moveUp();
  235.  menu.moveRight();
  236. //Serial.println("menuUseEvent found Game Durration");
  237. }
  238.  
  239.  
  240. if (used.item == "5 Mins") //comparison using a string literal
  241. {
  242. DetinationTime = 5;
  243. menu.moveUp();
  244.  menu.moveRight();
  245. //Serial.println("menuUseEvent found Game Durration");
  246. }
  247. if (used.item == "10 Mins") //comparison using a string literal
  248. {
  249. DetinationTime = 10;
  250.  menu.moveUp();
  251.   menu.moveUp();
  252.   menu.moveRight();
  253.  
  254. }
  255. if (used.item == "15 Mins") //comparison using a string literal
  256. {
  257. DetinationTime = 15;
  258.  menu.moveUp();
  259.   menu.moveUp();
  260.    menu.moveUp();
  261.    menu.moveRight();
  262.  
  263. }
  264. if (used.item == "20 Mins") //comparison using a string literal
  265. {
  266. DetinationTime = 20;
  267.  menu.moveUp();
  268.   menu.moveUp();
  269.    menu.moveUp();
  270.     menu.moveUp();
  271.     menu.moveRight();
  272.  
  273. }
  274. if (used.item == "25 Mins") //comparison using a string literal
  275. {
  276. DetinationTime = 25;
  277.  menu.moveUp();
  278.   menu.moveUp();
  279.    menu.moveUp();
  280.     menu.moveUp();
  281.      menu.moveUp();
  282.      menu.moveRight();
  283.  
  284. }
  285. if (used.item == "300 Mins") //comparison using a string literal
  286. {
  287. DetinationTime = 30;
  288.  menu.moveUp();
  289.   menu.moveUp();
  290.    menu.moveUp();
  291.     menu.moveUp();
  292.      menu.moveUp();
  293.       menu.moveUp();
  294.       menu.moveRight();
  295.  
  296. }
  297. if (used.item == "35 Mins") //comparison using a string literal
  298. {
  299. DetinationTime = 35;
  300.  menu.moveUp();
  301.   menu.moveUp();
  302.    menu.moveUp();
  303.     menu.moveUp();
  304.      menu.moveUp();
  305.       menu.moveUp();
  306.        menu.moveUp();
  307.        menu.moveRight();
  308.  
  309. }
  310. if (used.item == "40 Mins") //comparison using a string literal
  311. {
  312. DetinationTime = 40;
  313.  menu.moveUp();
  314.   menu.moveUp();
  315.    menu.moveUp();
  316.     menu.moveUp();
  317.      menu.moveUp();
  318.       menu.moveUp();
  319.        menu.moveUp();
  320.         menu.moveUp();
  321.         menu.moveRight();
  322.  
  323. }
  324. if (used.item == "45 Mins") //comparison using a string literal
  325. {
  326. DetinationTime = 45;
  327.  menu.moveUp();
  328.   menu.moveUp();
  329.    menu.moveUp();
  330.     menu.moveUp();
  331.      menu.moveUp();
  332.       menu.moveUp();
  333.        menu.moveUp();
  334.         menu.moveUp();
  335.          menu.moveUp();
  336.          menu.moveRight();
  337.  
  338. }
  339. if (used.item == "50 Mins") //comparison using a string literal
  340. {
  341. DetinationTime = 50;
  342. menu.moveUp();
  343.           menu.moveUp();
  344.            menu.moveUp();
  345.             menu.moveUp();
  346.              menu.moveUp();
  347.               menu.moveUp();
  348.                menu.moveUp();
  349.                 menu.moveUp();
  350.                  menu.moveUp();
  351.                   menu.moveUp();
  352.                   menu.moveRight();
  353. }
  354. if (used.item == "55 Mins") //comparison using a string literal
  355. {
  356. DetinationTime = 55;
  357. menu.moveUp();
  358. menu.moveUp();
  359.  menu.moveUp();
  360.   menu.moveUp();
  361.    menu.moveUp();
  362.     menu.moveUp();
  363.      menu.moveUp();
  364.       menu.moveUp();
  365.        menu.moveUp();
  366.         menu.moveUp();
  367.          menu.moveUp();
  368.          menu.moveRight();
  369. }
  370. if (used.item == "60 Mins") //comparison using a string literal
  371. {
  372. DetinationTime = 60;
  373. menu.moveUp();
  374. menu.moveUp();
  375.  menu.moveUp();
  376.   menu.moveUp();
  377.    menu.moveUp();
  378.     menu.moveUp();
  379.      menu.moveUp();
  380.       menu.moveUp();
  381.        menu.moveUp();
  382.         menu.moveUp();
  383.          menu.moveUp();
  384.           menu.moveUp();
  385.           menu.moveRight();
  386. }
  387.  
  388. if (used.item == "Arm it!") {
  389. Serial.print("Intel Box is now armed.");
  390.  }
  391. //if (used.item == miVerify) //comparison agains a known item
  392. //{
  393. // Serial.println("menuUseEvent found Verify (V)");
  394. //}
  395. DetinationTime = DetinationTime * 100;
  396.  
  397. }
  398.  
  399. /*
  400. This is an important function
  401. Here we get a notification whenever the user changes the menu
  402. That is, when the menu is navigated
  403. */
  404. void menuChangeEvent(MenuChangeEvent changed)
  405. {
  406. Serial.print("Menu change ");
  407. Serial.print(changed.from.getName());
  408. Serial.print(" ");
  409. Serial.println(changed.to.getName());
  410. lcd.clear();
  411. lcd.print("cSpec Intel Box v");
  412. lcd.print(sketchversion);
  413.  lcd.setCursor(0,1);
  414. lcd.print(changed.to.getName());  
  415. lastclicked = 0;
  416. val =0;
  417.  
  418. }
  419.  
  420. void setup()
  421. {
  422.  pinMode(BTN_LEFT,INPUT);
  423.   pinMode(BTN_RIGHT,INPUT);
  424.    pinMode(BTN_CONFIRM,INPUT);
  425.    //pinMode(BTN_CANCEL,INPUT);
  426.    pinMode(BTN_UP,INPUT);
  427.    pinMode(BTN_DOWN,INPUT);
  428.  
  429.  lcd.clear();
  430.    lcd.begin(16,2);
  431.    Serial.begin(9600);
  432.  
  433. menuSetup();
  434. Serial.println("Starting navigation (see source for description):");
  435. menu.moveDown();  //move to file
  436. /*menu.moveDown();  //move to file
  437. menu.moveDown();  //move to new
  438. menu.moveDown();  //move to open
  439. menu.moveDown();  //move to examples
  440. menu.moveRight(); //move to arduinoisp
  441. menu.use();       //use arduniisp
  442. menu.moveLeft();  //move to examples
  443. menu.moveUp();    //move to open
  444. menu.moveUp();    //move to new
  445. menu.moveUp();    //move to file
  446. menu.moveRight(); //move to edit
  447. menu.moveRight(); //move to sketch
  448. menu.moveDown();  //move to verify
  449. menu.use();       //use verify
  450. menu.moveBack();  //move back to sketch
  451. menu.moveBack();  //move back to edit
  452. menu.moveBack();  //move back to file
  453. menu.moveBack();  //move back to new
  454. menu.use();       //use new
  455.  
  456. //menu.use('V');    //use verify based on its shortkey 'V'
  457. */
  458. }
  459.  
  460. void loop()
  461. {
  462.  
  463.  if((millis() - last_read) >= 1000) {
  464.    
  465.  
  466.    
  467.    
  468.  }
  469.  
  470. if((millis() - last_read) >= DeBounceTime) {
  471.            
  472.        if(digitalRead(BTN_LEFT) == 1)
  473.          buttonClicked(BTN_LEFT);
  474.          digitalWrite(BTN_LEFT, LOW);
  475.          digitalWrite(pin, HIGH);   // turn the LED on (HIGH is the voltage level)
  476.  delay(1000);               // wait for a second
  477.  digitalWrite(pin, LOW);    // turn the LED off by making the voltage LOW
  478.  delay(1000);
  479.    }
  480.        if(digitalRead(BTN_RIGHT) == 1) {
  481.           buttonClicked(BTN_RIGHT);
  482.           digitalWrite(BTN_RIGHT, LOW);
  483.           digitalWrite(pin, HIGH);   // turn the LED on (HIGH is the voltage level)
  484.  delay(1000);               // wait for a second
  485.  digitalWrite(pin, LOW);    // turn the LED off by making the voltage LOW
  486.  delay(1000);
  487.        }
  488.       if (digitalRead(BTN_CONFIRM) == 1){
  489.          buttonClicked(BTN_CONFIRM);
  490.          digitalWrite(BTN_CONFIRM, LOW);
  491.          digitalWrite(pin, HIGH);   // turn the LED on (HIGH is the voltage level)
  492.  delay(1000);               // wait for a second
  493.  digitalWrite(pin, LOW);    // turn the LED off by making the voltage LOW
  494.  delay(1000);
  495.        }
  496.        //if(digitalRead(BTN_CANCEL) == 1) {
  497.         //  buttonClicked(BTN_CANCEL);
  498.         //  digitalWrite(BTN_CANCEL, LOW);
  499.        //}
  500.        if(digitalRead(BTN_DOWN) == 1) {
  501.           buttonClicked(BTN_DOWN);
  502.           digitalWrite(BTN_DOWN, LOW);
  503.           digitalWrite(pin, HIGH);   // turn the LED on (HIGH is the voltage level)
  504.  delay(1000);               // wait for a second
  505.  digitalWrite(pin, LOW);    // turn the LED off by making the voltage LOW
  506.  delay(1000);
  507.        }
  508.        if(digitalRead(BTN_UP) == 1) {
  509.           buttonClicked(BTN_UP);
  510.           digitalWrite(BTN_UP, LOW);
  511.           digitalWrite(pin, HIGH);   // turn the LED on (HIGH is the voltage level)
  512.  delay(1000);               // wait for a second
  513.  digitalWrite(pin, LOW);    // turn the LED off by making the voltage LOW
  514.  delay(1000);
  515.        }
  516.  
  517.    
  518.    
  519.       last_read = millis();
  520.    }
  521.  
  522.  
  523. void buttonClicked(int btn) {
  524.  digitalWrite(pin, HIGH);   // turn the LED on (HIGH is the voltage level)
  525.  delay(1000);               // wait for a second
  526.  digitalWrite(pin, LOW);    // turn the LED off by making the voltage LOW
  527.  delay(1000);
  528.  Serial.println(index);
  529.  if(btn == BTN_LEFT && index >= 0 && digitalRead(BTN_LEFT) == 1) {
  530.    index = index-1;
  531.    menu.moveLeft();
  532.  }
  533.  if (btn == BTN_RIGHT && index <= menuitems && digitalRead(BTN_RIGHT) == 1) {
  534.    index = index+1;
  535.    menu.moveRight();
  536.  }
  537.  if (btn == BTN_CONFIRM && digitalRead(BTN_CONFIRM) == 1) {
  538.  menu.use();
  539.  }
  540. // if (btn == BTN_CANCEL && digitalRead(BTN_RIGHT) == 1) {
  541.  //menu.moveBack();
  542.  //}
  543. if (btn == BTN_UP && digitalRead(BTN_UP) == 1) {
  544.  menu.moveUp();
  545.  }
  546.   if (btn == BTN_DOWN && digitalRead(BTN_DOWN) == 1) {
  547.  menu.moveDown();
  548.  }
  549. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement