Advertisement
KRITSADA

ATX2 Multi Function Demo (I-BOT)

Jun 22nd, 2016
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.13 KB | None | 0 0
  1. #include <ipst.h>  // Include library for IPST Board
  2. int REF = 100;  // Reference for Fire detected
  3. void setup()
  4. {
  5.   glcdMode(3);  // Set direction display GLCD
  6.   //glcdFillScreen(GLCD_GREEN);
  7. }
  8. void readCompass()
  9. {
  10.   glcdClear();
  11.   setTextColor(GLCD_WHITE);
  12.   setTextSize(1);
  13.   glcd(12,0,"<SW1> Exit menu");
  14.  
  15.   setTextSize(2);
  16.   setTextColor(GLCD_GREEN);
  17.   while(1)
  18.   {
  19.     glcd(3,0,"compass = %d      ",compass_read());  // Read and display angle
  20.     if(sw1())
  21.     {
  22.       glcdClear();
  23.       sound(20,1500,100);
  24.       break;
  25.     }
  26.   }
  27. }
  28. void readLight()
  29. {
  30.   glcdClear();
  31.   setTextColor(GLCD_WHITE);
  32.   setTextSize(1);
  33.   glcd(12,0,"<SW1> Exit menu");
  34.   setTextSize(2);
  35.   while(1)
  36.   {
  37.     int left = 1023-analog(1);
  38.     int right = 1023-analog(2);
  39.     setTextColor(GLCD_BLUE);
  40.     glcd(0,0,"Left    Right");
  41.     setTextColor(GLCD_WHITE);
  42.     glcd(1,0,"%d   ",left);
  43.     glcd(1,8,"%d   ",right);  
  44.     if(sw1())
  45.     {
  46.       glcdClear();
  47.       sound(20,1500,100);
  48.       break;
  49.     }
  50.   }
  51. }
  52. void robotFindLight()
  53. {
  54.   glcdClear();
  55.   setTextSize(2);
  56.   setTextColor(GLCD_RED);
  57.   glcd(2,0,"    Robot");
  58.   glcd(3,0," find light.");
  59.   setTextColor(GLCD_WHITE);
  60.   setTextSize(1);
  61.   glcd(12,0,"<SW1> Exit menu");
  62.   while(1)
  63.   {
  64.     int left = 1023-analog(1);  // Get Analog form ZX-Photo left side
  65.   int right = 1023-analog(2);  // Get Analog form ZX-Photo right side
  66.   if(left>REF && right>REF)  // Robot detects fire?
  67.   {
  68.     fd(40);
  69. //    ao();  // Robot stop
  70. //    out(13,1);  // Rotor motor on
  71. //    delay(3000);  // Delay 3 second
  72. //    int l = 1023-analog(1);  // Get Analog form ZX-Photo left side
  73. //    int r = 1023-analog(2);  // Get Analog form ZX-Photo right side
  74. //    if(l<REF && r<REF)  // Recheck Fire off?
  75. //    {
  76. //      out(13,0);  // Rotor motor off
  77. //      bk(40); delay(400);    // Robot backward few time
  78. //      sr(40); delay(600);    // Robot spin right a few time
  79. //      ao();  // Ensure Robot stop
  80. //      glcdMode(1);  
  81. //      setTextSize(2);
  82. //      glcdClear();
  83. //      glcd(5,0,"  completed!");
  84. //      while(1);  // Break program
  85. //    }
  86.   }
  87.   else if(left<REF && right>REF)  // Fire were right?
  88.   {
  89.     sr(40); delay(20);    // Robot spin right a few time
  90.     fd(40); delay(20);    // Robot forward a few time
  91.   }
  92.   else if(left>REF && right<REF)  // Fire were left?
  93.   {
  94.     sl(40); delay(20);    // Robot spin left a few time
  95.     fd(40); delay(20);    // Robot forward a few time
  96.   }
  97.   else  // Fire not found?
  98.   {
  99.     ao();
  100. //    if(left>right)   // Fire were left over?
  101. //    {
  102. //      sl(40); delay(20);  // Robot spin left a few time
  103. //      fd(40); delay(20);  // Robot forward a few time
  104. //    }
  105. //    else
  106. //    {
  107. //      sr(40); delay(20);  // Robot spin right a few time
  108. //      fd(40); delay(20);  // Robot forward a few time
  109. //    }
  110.   }
  111.     if(sw1())
  112.     {
  113.       glcdClear();
  114.       sound(20,1500,100);
  115.       break;
  116.     }
  117.   }
  118. }
  119. void objectAvoider()
  120. {
  121.   glcdClear();
  122.   setTextSize(2);
  123.   setTextColor(GLCD_SKY);
  124.   glcd(2,0,"    Robot");
  125.   glcd(3,0,"ObjectAvoider");
  126.   setTextColor(GLCD_WHITE);
  127.   setTextSize(1);
  128.   glcd(12,0,"<SW1> Exit menu");
  129.   while(1)
  130.   {
  131.     fd(40);  // Robot backward
  132.   if(!in(17))  // Left sensor pressed?
  133.   {
  134.     bk(40);  // Robot backward
  135.     delay(800);  // Delay 0.8 second
  136.     sr(40);  // Robot spin right
  137.     delay(500);  // Delay 0.5 second
  138.   }
  139.   if(!in(16))  // Right sensor pressed?
  140.   {
  141.     bk(40);  // Robot backward
  142.     delay(800);  // Delay 0.8 second
  143.     sl(40);  // Robot spin left
  144.     delay(500);  // Delay 0.5 second
  145.   }  
  146.     if(sw1())
  147.     {
  148.       glcdClear();
  149.       sound(20,1500,100);
  150.       break;
  151.     }
  152.   }
  153. }
  154. void bleJoystickControl()
  155. {
  156.   Serial1.begin(9600);
  157.   glcdClear();
  158.   setTextSize(2);
  159.   setTextColor(GLCD_BLUE);
  160.   glcd(2,0,"    Robot");
  161.   glcd(3,0," BLE Joystick");
  162.   setTextColor(GLCD_WHITE);
  163.   setTextSize(1);
  164.   glcd(11,0,"<Triangle Button> Wind ON");
  165.   glcd(12,0,"<SW1> Exit menu");
  166.   while(1)
  167.   {
  168.     if(Serial1.available()>0)
  169.   {
  170.     char inbyte = Serial1.read();
  171.     //Serial1.print(inbyte);
  172.     //beep();
  173.     //glcd(5,0,"receive: %c ",inbyte);
  174.     if(inbyte=='a' || inbyte=='A')
  175.     {
  176.       fd(40);
  177.       //delay(50);
  178.     }
  179.     else if(inbyte=='b'|| inbyte=='B')
  180.     {
  181.       sr(40);
  182.       //delay(50);
  183.     }
  184.     else if(inbyte=='c'|| inbyte=='C')
  185.     {
  186.       bk(40);
  187.       //delay(50);
  188.     }
  189.     else if(inbyte=='d' || inbyte=='D')
  190.     {
  191.       sl(40);
  192.       //delay(50);
  193.     }
  194.     else if(inbyte=='e' || inbyte=='E')
  195.     {
  196.       out(13,1);
  197.       //sound(20,1200,100);
  198.       //delay(50);
  199.     }
  200.     else if(inbyte=='F')
  201.     {
  202.       //out(13,1);
  203.       sound(20,500,100);
  204.       //delay(50);
  205.     }
  206.     else if(inbyte=='G')
  207.     {
  208.       //out(13,1);
  209.       sound(20,1000,100);
  210.       //delay(50);
  211.     }
  212.     else if(inbyte=='H')
  213.     {
  214.       //out(13,1);
  215.       sound(20,2000,100);
  216.       //delay(50);
  217.     }
  218.     else if(inbyte==0x00)  // When joystick release key from hold down
  219.     {
  220.       ao();
  221.       out(13,0);
  222.     }
  223.   }
  224.     if(sw1())
  225.     {
  226.       glcdClear();
  227.       sound(20,1500,100);
  228.       break;
  229.     }
  230.   }
  231. }
  232. void loop()
  233. {
  234.  int menu = map(analog(3),0,1023,1,6);
  235.  
  236.  setTextColor(GLCD_WHITE);
  237.  setTextSize(1);
  238.  glcd(12,0,"<SW1> Select menu");
  239.  if(menu==1)
  240.  {
  241.    setTextSize(2);
  242.    glcd(2,0,"  <Menu:1> ");
  243.    glcd(3,0," Read Compass ");
  244.    if(sw1())
  245.   {
  246.     sound(20,1500,100);
  247.     readCompass();
  248.   }
  249.  }
  250.  else if(menu==2)
  251.  {
  252.    setTextSize(2);
  253.    glcd(2,0,"  <Menu:2> ");
  254.    glcd(3,0," Read Light   ");
  255.    if(sw1())
  256.   {
  257.     sound(20,1500,100);
  258.     readLight();
  259.   }
  260.  }
  261.  else if(menu==3)
  262.  {
  263.    setTextSize(2);
  264.    glcd(2,0,"  <Menu:3> ");
  265.    glcd(3,0," Find Light  ");
  266.    if(sw1())
  267.   {
  268.     sound(20,1500,100);
  269.     robotFindLight();
  270.   }
  271.  }
  272.  else if(menu==4)
  273.  {
  274.    setTextSize(2);
  275.    glcd(2,0,"  <Menu:4> ");
  276.    glcd(3,0,"ObjectAvoider  ");
  277.    if(sw1())
  278.   {
  279.     sound(20,1500,100);
  280.     objectAvoider();
  281.   }
  282.  }
  283.  else if(menu==5 || menu==6)
  284.  {
  285.    setTextSize(2);
  286.    glcd(2,0,"  <Menu:5> ");
  287.    glcd(3,0,"  Joystick    ");
  288.    if(sw1())
  289.   {
  290.     sound(20,1500,100);
  291.     bleJoystickControl();
  292.   }
  293.  }
  294.  
  295.  
  296. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement