Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. import processing.serial.*;
  2. import controlP5.*;
  3. import JMyron.*;
  4.  
  5. JMyron m;
  6.  
  7. ControlP5 controlP5;
  8. CheckBox checkbox;
  9. Button b;
  10.  
  11. float boxX;
  12. float boxY;
  13. int boxSize = 20;
  14. boolean mouseOverBox = false;
  15. byte[] previousFlags = new byte[32];
  16. byte[] flagsToSend = new byte[32];
  17. Serial port;
  18. String outString;
  19.  
  20. int helicopterUpSpeed = 0;
  21. int helicopterPitch = 63;
  22. int helicopterYaw = 68;
  23.  
  24. void setup() {
  25.   m = new JMyron();
  26.   m.start(640,480);
  27.   size(640, 480);
  28.  
  29.   controlP5 = new ControlP5(this);
  30.   checkbox = controlP5.addCheckBox("checkBox", 20, 20);  
  31.   // make adjustments to the layout of a checkbox.
  32.   checkbox.setColorForeground(color(120));
  33.   checkbox.setColorActive(color(255));
  34.   checkbox.setColorLabel(color(128));
  35.   checkbox.setItemsPerRow(8);
  36.   checkbox.setSpacingColumn(30);
  37.   checkbox.setSpacingRow(10);
  38.   // add items to a checkbox.
  39.   checkbox.addItem("1", 0);
  40.   checkbox.addItem("2", 0);
  41.   checkbox.addItem("3", 0);
  42.   checkbox.addItem("4", 0);
  43.   checkbox.addItem("5", 0);
  44.   checkbox.addItem("6", 0);
  45.   checkbox.addItem("7", 0);
  46.   checkbox.addItem("8", 0);
  47.   checkbox.addItem("9", 0);
  48.   checkbox.addItem("10", 0);
  49.   checkbox.addItem("11", 0);
  50.   checkbox.addItem("12", 0);
  51.   checkbox.addItem("13", 0);
  52.   checkbox.addItem("14", 0);
  53.   checkbox.addItem("15", 0);
  54.   checkbox.addItem("16", 0);
  55.   checkbox.addItem("17", 0);
  56.   checkbox.addItem("18", 0);
  57.   checkbox.addItem("19", 0);
  58.   checkbox.addItem("20", 0);
  59.   checkbox.addItem("21", 0);
  60.   checkbox.addItem("22", 0);
  61.   checkbox.addItem("23", 0);
  62.   checkbox.addItem("24", 0);
  63.   checkbox.addItem("25", 0);
  64.   checkbox.addItem("26", 0);
  65.   checkbox.addItem("27", 0);
  66.   checkbox.addItem("28", 0);
  67.   checkbox.addItem("29", 0);
  68.   checkbox.addItem("30", 0);
  69.   checkbox.addItem("31", 0);
  70.   checkbox.addItem("32", 0);
  71.  
  72.   checkbox.deactivateAll();
  73.  
  74.  
  75.   controlP5.addButton("Up", 0, 120, 120, 35, 20);
  76.   controlP5.addButton("Down", 0, 120, 160, 35, 20);
  77.  
  78.   controlP5.addButton("Forward", 0, 180, 120, 45, 20);
  79.   controlP5.addButton("Backward", 0, 180, 160, 45, 20);  
  80.  
  81.   controlP5.addButton("TurnLeft", 0, 60, 120, 40, 20);
  82.   controlP5.addButton("TurnRight", 0, 60, 160, 40, 20);  
  83.  
  84.  
  85.   port = new Serial(this, Serial.list()[0], 9600);
  86.  
  87.   for (int i=0;i<32;i++)
  88.   {
  89.     flagsToSend[i] = 0;
  90.     previousFlags[i] = 0;
  91.   }
  92.  
  93.   addMouseWheelListener(new java.awt.event.MouseWheelListener() {
  94.     public void mouseWheelMoved(java.awt.event.MouseWheelEvent evt) {
  95.       mouseWheel(evt.getWheelRotation());
  96.     }
  97.   }
  98.   );
  99.  
  100.   startSetUp();
  101. }
  102.  
  103. String addForwardZeroesTT(String inputString, int totalLength)
  104. {
  105.  
  106.   String outString = "";
  107.   for (int i = 0; i < (totalLength - inputString.length()); i++)
  108.     outString += "0";
  109.  
  110.   outString = outString + inputString;
  111.  
  112.   return outString;
  113. }
  114.  
  115.  
  116. //Incremental like bits
  117. //0000, 0001, 0010, 0011, 0100, etc
  118. void Up()
  119. {
  120.   String currentSpeed = addForwardZeroesTT(binary(helicopterUpSpeed), 7);
  121.  
  122.   if(helicopterUpSpeed <= 125)
  123.     helicopterUpSpeed += 1;
  124.  
  125.   String newSpeed = addForwardZeroesTT(binary(helicopterUpSpeed), 7);
  126.  
  127.   setNewSpeed(currentSpeed, newSpeed);
  128. }
  129.  
  130. void Down()
  131. {
  132.   String currentSpeed = addForwardZeroesTT(binary(helicopterUpSpeed), 7);
  133.   if (helicopterUpSpeed > 0)
  134.     helicopterUpSpeed -= 1;
  135.   String newSpeed = addForwardZeroesTT(binary(helicopterUpSpeed), 7);
  136.  
  137.   setNewSpeed(currentSpeed, newSpeed);
  138. }
  139.  
  140.  
  141. void Backward()
  142. {
  143.   String currentSpeed = addForwardZeroesTT(binary(helicopterPitch), 7);
  144.  
  145.   helicopterPitch += 1;
  146.  
  147.   String newSpeed = addForwardZeroesTT(binary(helicopterPitch), 7);
  148.  
  149.    setNewPitch(currentSpeed, newSpeed);
  150. }
  151.  
  152. void Forward()
  153. {
  154.   String currentSpeed = addForwardZeroesTT(binary(helicopterPitch), 7);
  155.  
  156.   helicopterPitch -= 1;
  157.  
  158.   String newSpeed = addForwardZeroesTT(binary(helicopterPitch), 7);
  159.  
  160.    setNewPitch(currentSpeed, newSpeed);
  161. }
  162.  
  163. void TurnLeft()
  164. {
  165.   String currentSpeed = addForwardZeroesTT(binary(helicopterYaw), 7);
  166.  
  167.   helicopterYaw -= 1;
  168.  
  169.   String newSpeed = addForwardZeroesTT(binary(helicopterYaw), 7);
  170.  
  171.   setNewYaw(currentSpeed, newSpeed);
  172. }
  173.  
  174. void TurnRight()
  175. {
  176.   String currentSpeed = addForwardZeroesTT(binary(helicopterYaw), 7);
  177.  
  178.   helicopterYaw += 1;
  179.  
  180.   String newSpeed = addForwardZeroesTT(binary(helicopterYaw), 7);
  181.  
  182.   setNewYaw(currentSpeed, newSpeed);
  183. }
  184.  
  185.  
  186. void setNewSpeed(String currentSpeed, String newSpeed)
  187. {
  188.  
  189.   //Compare each bit and see if it needs changing.
  190.   if  (newSpeed.charAt(6) != currentSpeed.charAt(6) )
  191.     checkbox.toggle(23);
  192.  
  193.   if  (newSpeed.charAt(5) != currentSpeed.charAt(5) )
  194.     checkbox.toggle(22);
  195.  
  196.   if  (newSpeed.charAt(4) != currentSpeed.charAt(4) )
  197.     checkbox.toggle(21);    
  198.  
  199.   if  (newSpeed.charAt(3) != currentSpeed.charAt(3) )
  200.     checkbox.toggle(20);    
  201.  
  202.   if  (newSpeed.charAt(2) != currentSpeed.charAt(2) )
  203.     checkbox.toggle(19);    
  204.  
  205.   if  (newSpeed.charAt(1) != currentSpeed.charAt(1) )
  206.     checkbox.toggle(18);    
  207.  
  208.   if  (newSpeed.charAt(0) != currentSpeed.charAt(0) )
  209.     checkbox.toggle(17);
  210. }
  211.  
  212. void setNewPitch(String currentSpeed, String newSpeed)
  213. {
  214.   if  (newSpeed.charAt(6) != currentSpeed.charAt(6) )
  215.     checkbox.toggle(15);
  216.  
  217.   if  (newSpeed.charAt(5) != currentSpeed.charAt(5) )
  218.     checkbox.toggle(14);
  219.  
  220.   if  (newSpeed.charAt(4) != currentSpeed.charAt(4) )
  221.     checkbox.toggle(13);    
  222.  
  223.   if  (newSpeed.charAt(3) != currentSpeed.charAt(3) )
  224.     checkbox.toggle(12);    
  225.  
  226.   if  (newSpeed.charAt(2) != currentSpeed.charAt(2) )
  227.     checkbox.toggle(11);    
  228.  
  229.   if  (newSpeed.charAt(1) != currentSpeed.charAt(1) )
  230.     checkbox.toggle(10);    
  231.  
  232.   if  (newSpeed.charAt(0) != currentSpeed.charAt(0) )
  233.     checkbox.toggle(9);
  234. }
  235.  
  236. void setNewYaw(String currentSpeed, String newSpeed)
  237. {
  238.   if  (newSpeed.charAt(6) != currentSpeed.charAt(6) )
  239.     checkbox.toggle(7);
  240.  
  241.   if  (newSpeed.charAt(5) != currentSpeed.charAt(5) )
  242.     checkbox.toggle(6);
  243.  
  244.   if  (newSpeed.charAt(4) != currentSpeed.charAt(4) )
  245.     checkbox.toggle(5);    
  246.  
  247.   if  (newSpeed.charAt(3) != currentSpeed.charAt(3) )
  248.     checkbox.toggle(4);    
  249.  
  250.   if  (newSpeed.charAt(2) != currentSpeed.charAt(2) )
  251.     checkbox.toggle(3);    
  252.  
  253.   if  (newSpeed.charAt(1) != currentSpeed.charAt(1) )
  254.     checkbox.toggle(2);    
  255.  
  256.   if  (newSpeed.charAt(0) != currentSpeed.charAt(0) )
  257.     checkbox.toggle(1);
  258. }
  259.  
  260. void startSetUp()
  261. {
  262.   //First clear the arduino.
  263.   port.write('a');
  264.   port.write('b');
  265.   port.write('c');
  266.   port.write('d');
  267.   port.write('e');
  268.   port.write('f');
  269.   port.write('g');
  270.   port.write('h');
  271.   port.write('i');
  272.   port.write('j');
  273.   port.write('k');
  274.   port.write('l');
  275.   port.write('m');
  276.   port.write('o');
  277.   port.write('p');
  278.   port.write('q');
  279.   port.write('r');
  280.   port.write('s');
  281.   port.write('t');
  282.   port.write('u');
  283.   port.write('v');
  284.   port.write('w');
  285.   port.write('x');
  286.   port.write('y');
  287.   port.write('z');
  288.   port.write('1');
  289.   port.write('3');
  290.   port.write('5');
  291.   port.write('7');
  292.   port.write('9');
  293.   port.write('@');
  294.   port.write('$');
  295.   port.write('^');
  296.  
  297.  
  298.   //Set the pulse to the basic configuration.
  299.   checkbox.toggle(1);
  300.   checkbox.toggle(6);
  301.  
  302.  
  303.   checkbox.toggle(10);
  304.   checkbox.toggle(11);
  305.  
  306.   checkbox.toggle(12);
  307.   checkbox.toggle(13);
  308.   checkbox.toggle(14);
  309.   checkbox.toggle(15);
  310.   checkbox.toggle(16);
  311.  
  312.   checkbox.toggle(25);
  313.  
  314.   checkbox.toggle(28);
  315.   checkbox.toggle(29);
  316.   checkbox.toggle(30);
  317. }
  318.  
  319.  
  320. void draw()
  321. {
  322.   background(200);
  323.  
  324.   m.update();
  325.   int[] img = m.image();
  326.  
  327.   //first draw the camera view onto the screen
  328.   loadPixels();
  329.  
  330.   for(int i=0;i<640*480;i++){
  331.       pixels[i] = img[i];
  332.   }
  333.   updatePixels();
  334.    noFill();
  335.   int[][] a;
  336.    
  337.   CheckHelicopterPosition();  
  338.  
  339.  
  340.   text(" Current Speed: " + helicopterUpSpeed, 230, 135);
  341.   text(" Pitch: " + helicopterPitch, 230, 165);
  342.   text(" Yaw: " + helicopterYaw, 230, 195);  
  343. }
  344.  
  345.  
  346. void CheckHelicopterPosition()
  347. {
  348.  
  349.   noFill();
  350.   int[][] a;
  351.  
  352.   m.trackColor(255,255,0,255);
  353.   //draw bounding boxes of globs
  354.   a = m.globBoxes();
  355.   stroke(255,0,0);
  356.  
  357.   int averageY = 0;
  358.  
  359.   for(int i=0;i<a.length;i++){
  360.     int[] b = a[i];
  361.     rect(b[0], b[1], b[2], b[3]);
  362.    
  363.     averageY += b[1];
  364.    
  365.   }
  366.  
  367.   if (a.length > 0)
  368.   {
  369.   averageY = averageY / a.length;
  370.   line(0,averageY,640,averageY);
  371.  
  372.     text(" Average Y: " + averageY, 230, 215);  
  373.    
  374.     if (averageY > 240)
  375.      {
  376.       text(" Action: up ", 350, 20);
  377.       delay(150);
  378.       //Up();
  379.      }
  380.      else
  381.      {
  382.       text(" Action down ", 350,20);
  383.       //delay(250);
  384.       //Down();
  385.      }
  386.   }  
  387.  
  388.  
  389. }  
  390.  
  391.  
  392.  
  393. void controlEvent(ControlEvent theEvent) {
  394.   if (theEvent.isGroup()) {
  395.  
  396.     for (int i=0;i<theEvent.group().arrayValue().length;i++)
  397.     {
  398.       byte n = (byte)theEvent.group().arrayValue()[i];
  399.       flagsToSend[i] = n;
  400.       //there was a change in the flags, send the update.
  401.       if (previousFlags[i] != flagsToSend[i])
  402.       {
  403.         println(i);
  404.  
  405.         if (i==0) {  
  406.           if (n == 0) {
  407.             port.write('a');
  408.           }
  409.           else {
  410.             port.write('A');
  411.           }
  412.         }
  413.         if (i==1) {  
  414.           if (n == 0) {
  415.             port.write('b');
  416.           }
  417.           else {
  418.             port.write('B');
  419.           }
  420.         }
  421.         if (i==2) {  
  422.           if (n == 0) {
  423.             port.write('c');
  424.           }
  425.           else {
  426.             port.write('C');
  427.           }
  428.         }
  429.         if (i==3) {  
  430.           if (n == 0) {
  431.             port.write('d');
  432.           }
  433.           else {
  434.             port.write('D');
  435.           }
  436.         }                
  437.         if (i==4) {  
  438.           if (n == 0) {
  439.             port.write('e');
  440.           }
  441.           else {
  442.             port.write('E');
  443.           }
  444.         }    
  445.         if (i==5) {  
  446.           if (n == 0) {
  447.             port.write('f');
  448.           }
  449.           else {
  450.             port.write('F');
  451.           }
  452.         }  
  453.         if (i==6) {  
  454.           if (n == 0) {
  455.             port.write('g');
  456.           }
  457.           else {
  458.             port.write('G');
  459.           }
  460.         }
  461.         if (i==7) {  
  462.           if (n == 0) {
  463.             port.write('h');
  464.           }
  465.           else {
  466.             port.write('H');
  467.           }
  468.         }
  469.         if (i==8) {  
  470.           if (n == 0) {
  471.             port.write('i');
  472.           }
  473.           else {
  474.             port.write('I');
  475.           }
  476.         }
  477.         if (i==9) {  
  478.           if (n == 0) {
  479.             port.write('j');
  480.           }
  481.           else {
  482.             port.write('J');
  483.           }
  484.         }
  485.         if (i==10) {  
  486.           if (n == 0) {
  487.             port.write('k');
  488.           }
  489.           else {
  490.             port.write('K');
  491.           }
  492.         }
  493.         if (i==11) {  
  494.           if (n == 0) {
  495.             port.write('l');
  496.           }
  497.           else {
  498.             port.write('L');
  499.           }
  500.         }
  501.         if (i==12) {  
  502.           if (n == 0) {
  503.             port.write('m');
  504.           }
  505.           else {
  506.             port.write('M');
  507.           }
  508.         }
  509.         if (i==13) {  
  510.           if (n == 0) {
  511.             port.write('o');
  512.           }
  513.           else {
  514.             port.write('O');
  515.           }
  516.         }  
  517.         if (i==14) {  
  518.           if (n == 0) {
  519.             port.write('p');
  520.           }
  521.           else {
  522.             port.write('P');
  523.           }
  524.         }
  525.         if (i==15) {  
  526.           if (n == 0) {
  527.             port.write('q');
  528.           }
  529.           else {
  530.             port.write('Q');
  531.           }
  532.         }
  533.         if (i==16) {  
  534.           if (n == 0) {
  535.             port.write('r');
  536.           }
  537.           else {
  538.             port.write('R');
  539.           }
  540.         }
  541.         if (i==17) {  
  542.           if (n == 0) {
  543.             port.write('s');
  544.           }
  545.           else {
  546.             port.write('S');
  547.           }
  548.         }
  549.         if (i==18) {  
  550.           if (n == 0) {
  551.             port.write('t');
  552.           }
  553.           else {
  554.             port.write('T');
  555.           }
  556.         }
  557.         if (i==19) {  
  558.           if (n == 0) {
  559.             port.write('u');
  560.           }
  561.           else {
  562.             port.write('U');
  563.           }
  564.         }
  565.         if (i==20) {  
  566.           if (n == 0) {
  567.             port.write('v');
  568.           }
  569.           else {
  570.             port.write('V');
  571.           }
  572.         }
  573.         if (i==21) {  
  574.           if (n == 0) {
  575.             port.write('w');
  576.           }
  577.           else {
  578.             port.write('W');
  579.           }
  580.         }
  581.         if (i==22) {  
  582.           if (n == 0) {
  583.             port.write('x');
  584.           }
  585.           else {
  586.             port.write('X');
  587.           }
  588.         }
  589.         if (i==23) {  
  590.           if (n == 0) {
  591.             port.write('y');
  592.           }
  593.           else {
  594.             port.write('Y');
  595.           }
  596.         }
  597.         if (i==24) {  
  598.           if (n == 0) {
  599.             port.write('z');
  600.           }
  601.           else {
  602.             port.write('Z');
  603.           }
  604.         }
  605.         if (i==25) {  
  606.           if (n == 0) {
  607.             port.write('1');
  608.           }
  609.           else {
  610.             port.write('2');
  611.           }
  612.         }
  613.         if (i==26) {  
  614.           if (n == 0) {
  615.             port.write('3');
  616.           }
  617.           else {
  618.             port.write('4');
  619.           }
  620.         }
  621.         if (i==27) {  
  622.           if (n == 0) {
  623.             port.write('5');
  624.           }
  625.           else {
  626.             port.write('6');
  627.           }
  628.         }
  629.         if (i==28) {  
  630.           if (n == 0) {
  631.             port.write('7');
  632.           }
  633.           else {
  634.             port.write('8');
  635.           }
  636.         }
  637.         if (i==29) {  
  638.           if (n == 0) {
  639.             port.write('9');
  640.           }
  641.           else {
  642.             port.write('!');
  643.           }
  644.         }
  645.         if (i==30) {  
  646.           if (n == 0) {
  647.             port.write('@');
  648.           }
  649.           else {
  650.             port.write('#');
  651.           }
  652.         }
  653.         if (i==31) {  
  654.           if (n == 0) {
  655.             port.write('$');
  656.           }
  657.           else {
  658.             port.write('%');
  659.           }
  660.         }
  661.         if (i==32) {  
  662.           if (n == 0) {
  663.             port.write('^');
  664.           }
  665.           else {
  666.             port.write('&');
  667.           }
  668.         }
  669.       }
  670.  
  671.       previousFlags[i]=n;
  672.     }
  673.   }
  674. }
  675.  
  676.  
  677. void mouseWheel(int delta) {
  678.   if (delta == 1)
  679.     Down();
  680.   else
  681.     Up();
  682. }