Advertisement
KRITSADA

IPST-SE STEM FESTIVAL 2016 Second Round

Nov 7th, 2016
286
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.81 KB | None | 0 0
  1. #include <ipst.h>   // IPST-SE Board
  2. word L, R, A, B, C,BAR, i;
  3. word refL=350,refR=450;
  4. int N=50,E=122,S=168,W=300;
  5. void setup() {
  6.    rdSensor();
  7.   OK();
  8.   barCode();  
  9.   fd(30);delay(500);
  10.   if(A){ R_Fire();}
  11.   else{  L_Fire();}
  12.   trackUntilBall();ao();L180();ao();FFF();FFF();FFF();trackTime(2000);bk(30);delay(500);R180();
  13. }
  14.  
  15. void loop() {
  16. if(BAR==2){Ball1();Ball2();}
  17. else if(BAR==3){Ball1();Ball3();}
  18. else if(BAR==4){Ball1();Ball4();}
  19. else if(BAR==5){Ball2();Ball3();}
  20. else if(BAR==6){Ball2();Ball4();}
  21. else if(BAR==7){Ball3();Ball4();}
  22.  
  23. }
  24. void Ball3(){
  25. FFF();LLL();trackUntilBall();L180();LLL();L180();L180();FFF();trackTime(2000);bk(30);delay(500);R180();
  26.  
  27. }
  28. void Ball1(){
  29. LLL();trackUntilBall();L180();LLL();L180();L180();trackTime(2000);bk(30);delay(500);R180();
  30.  
  31. }
  32. void Ball2(){
  33. RRR();trackUntilBall();L180();LLL();trackTime(2000);bk(30);delay(500);R180();
  34.  
  35. }
  36. void Ball4(){
  37. FFF();RRR();trackUntilBall();L180();LLL();FFF();trackTime(2000);bk(30);delay(500);R180();
  38. }
  39.  
  40. word whiteBrown=500,blackBrown=290;  // 700 //400// 200
  41. void barCode() {
  42.   setTextSize(2);
  43.   setTextColor(GLCD_BLACK);
  44.   setTextBackgroundColor(GLCD_WHITE);
  45.   while (analog(1)>100){fd(20);} ao(); delay(400);
  46.   while (analog(1)<100){fd(20);delay(12);}delay(50); ao(); delay(400);
  47.   while (analog(1)>blackBrown&&analog(1)<whiteBrown){fd(30);} ao(); delay(400);
  48.   if (analog(1)<blackBrown){
  49.     glcd(2,0,"BLACK"); A=1;
  50.     while (analog(1)<blackBrown){fd(30);}delay(50); ao(); delay(400);
  51.   }
  52.   else if (analog(1)>whiteBrown){
  53.     glcd(2, 0, "WHITE"); A = 0;
  54.     while (analog(1)>whiteBrown){fd(30);}delay(50); ao(); delay(400);
  55.   }
  56.  
  57.   while(analog(1)>blackBrown && analog(1)<whiteBrown){fd(30);}ao(); delay(400);
  58.     if (analog(1)<blackBrown) {
  59.       glcd(3,0,"BLACK"); B=2;
  60.       while(analog(1)<blackBrown){fd(30);}delay(50); ao(); delay(400);
  61.     }
  62.     else if(analog(1)>whiteBrown){
  63.       glcd(3,0,"WHITE"); B=0;
  64.       while(analog(1)>whiteBrown){fd(30);}delay(50);   ao(); delay(400);
  65.     }
  66.    
  67.   while (analog(1)>blackBrown&&analog(1)<whiteBrown){fd(30);} ao(); delay(400);
  68.   if (analog(1)<blackBrown){
  69.     glcd(4,0,"BLACK");C=4;
  70.     while (analog(1)<blackBrown){fd(30);}delay(50);ao(); delay(400);
  71.   }
  72.   else if (analog(1)>whiteBrown) {
  73.     glcd(4,0,"WHITE"); C=0;
  74.     while (analog(1)>whiteBrown) {fd(30);}delay(50);ao();delay(400);
  75.   }
  76.  
  77.   BAR = A + B + C;
  78.   glcdFillScreen(GLCD_BLUE);
  79.   setTextSize(10);
  80.   setTextBackgroundColor(GLCD_BLUE);
  81.   setTextColor(GLCD_YELLOW);
  82.   glcd(0, 1, "%d ", A + B + C);
  83.  
  84. }
  85.  
  86. void fire(int t) {
  87.   out(12, 1);
  88.   delay(t);
  89.   out(12, 0);
  90. }
  91.  
  92.  
  93. void L_Fire(){
  94. FFF();FFF();LLL();trackTime(600);fire(2000);bk(30);delay(50);R180();LLL();
  95. }
  96. void R_Fire(){
  97. FFF();FFF();RRR();trackTime(500);fire(2000);bk(30);delay(50);R180();RRR();
  98.  
  99. }
  100.  
  101.  
  102. void FFF() {
  103.   while (1) {
  104.     L=analog(0); R=analog(1);
  105.     if (L<refL&&R<refR){fd2(30,33);}
  106.     else if(L>refL&&R<refR){sl(40);}
  107.     else if (L<refL&&R>refR){sr(40);}
  108.     else if (L>refL&&R>refR){
  109.       fd(30);delay(200);
  110.       break;
  111.     }
  112.  }
  113. }
  114. void LLL() {
  115.   while (1) {
  116.     L = analog(0);R = analog(1);
  117.     if (L<refL&&R<refR){fd2(30,33);}
  118.     else if (L>refL&&R<refR){sl(40);}
  119.     else if (L<refL&&R>refR){sr(40);}
  120.     else if (L>refL&&R>refR) {
  121.       fd(30); delay(200);
  122.       while (analog(0)<refL){sl(40);}
  123.       while (analog(0)>refL){sl(40);}
  124.       break;
  125.     }
  126.   }
  127. }
  128. void RRR() {
  129.   while(1) {
  130.     L=analog(0);R=analog(1);
  131.     if (L<refL&&R<refR) {fd2(30,33);}
  132.     else if(L>refL&&R<refR) {sl(40);}
  133.     else if (L<refL&&R>refR){sr(40);}
  134.     else if (L>refL&&R>refR){
  135.       fd(30); delay(200);
  136.       while (analog(1)<refR) {sr(40);}
  137.       while (analog(1)>refR) {sr(40);}
  138.       break;
  139.     }
  140.   }
  141. }
  142. void trackTime(long t) {
  143.   long m=millis();
  144.   while (millis()<(m+t)) {
  145.     L=analog(0);R=analog(1);
  146.     if (L<refL&&R<refR) {fd2(30,33);}
  147.     else if(L>refL&&R<refR){sl(40);}
  148.     else if (L<refL&&R>refR){sr(40);}
  149.   }
  150.   ao();
  151. }
  152. void trackUntilWall(){
  153.    while(in(27)){
  154.       L=analog(0);
  155.       R=analog(1);
  156.       if(L<refL&&R<refR){fd2(30,33);}
  157.       else if(L>refL&&R<refR){sl(40);}
  158.       else if(L<refL&&R>refR){sr(40);}
  159.    }
  160.    ao();
  161. }
  162. void trackUntilBall(){
  163.   while(analog(5)<150){
  164.       L=analog(0);R=analog(1);
  165.       if(L<refL&&R<refR){fd2(30,30);}
  166.       else if(L>refL&&R<refR){sl(40);}
  167.       else if(L<refL&&R>refR){sr(40);}
  168.    }ao();
  169. }
  170. void R180(){
  171.     while (analog(1)<refR){sr(30);}
  172.     while (analog(1)>refR){sr(30);}
  173.     ao();
  174. }
  175. void L180(){
  176.     while (analog(0)<refL){sl(30);}
  177.     while (analog(0)>refL){sl(30);}
  178.     ao();
  179. }
  180.  
  181. void rdSensor() {
  182.   setTextSize(2); glcdMode(1);
  183.   while (sw_1() == 0) {
  184.     L = analog(0); R = analog(1);
  185.     glcd(0, 0, "L=%d   ", L);
  186.     glcd(1, 0, "R=%d   ", R);
  187.     glcd(2, 0, "R=%d   ", analog(5));
  188.     glcd(3, 0, "%d  ", compass_read());
  189.   }
  190. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement