Roambot

From Randomdata wiki
Revision as of 19:44, 7 June 2011 by Zkyp (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

Roambot

Is the bot that won the HiTB2011AMS hackerspaces challenge.

Here's the code!


  1. define DROP_DISTANCE 25

task main() {

   SetSensorLight(IN_1);
   SetSensorLight(IN_2);
   SetSensorType(IN_1,IN_TYPE_LIGHT_INACTIVE);
   SetSensorType(IN_2,IN_TYPE_LIGHT_INACTIVE);
   SetSensorMode(IN_1,SENSOR_MODE_PERCENT);
   SetSensorMode(IN_2,SENSOR_MODE_PERCENT);
   
   SetSensorLowspeed(IN_3);
   SetSensorTouch(IN_4);
   
   int lightambient = 100;
   int lighttreshold = 75;
   for (int i = 0; i < 3; i++)
   {
       PlayTone(440, 100);
       Wait(1000);
   }
   
   int bouncecounter = 0;
   int lightsource = 0;
   
   OnFwd(OUT_A, 40);
   OnRev(OUT_B, 40);
   for (int i = 0; i < 20; i++)
   {
       if (Sensor(IN_1) < lightambient) lightambient = Sensor(IN_1);
       if (Sensor(IN_2) < lightambient) lightambient = Sensor(IN_2);
       if (Sensor(IN_1) > lightsource) lightsource = Sensor(IN_1);
       if (Sensor(IN_2) > lightsource) lightsource = Sensor(IN_2);
       PlayTone(440, 20);
       Wait(100);
   }
   Off(OUT_AB);
   lighttreshold = 5 + (lightambient + lightsource) / 2;
   
   PlayTone(784, 125);
   Wait(150);
   PlayTone(660, 125);
   Wait(150);
   PlayTone(660, 275);
   Wait(300);
   PlayTone(588, 125);
   Wait(150);
   PlayTone(660, 125);
   Wait(150);
   PlayTone(784, 125);
  
   OnFwd(OUT_C, 50);
  
   while(1) 
   {
       ClearScreen();
       NumOut(1, 20, SensorUS(IN_3));
       //NumOut(1, 30, Sensor(IN_4));        
       NumOut(1, 40, lighttreshold);
       NumOut(1, 50, lightambient);
       if (Sensor(IN_4) || SensorUS(IN_3) > DROP_DISTANCE)
       {
           OnFwd(OUT_AB, 30);
           Wait(1000);
           bouncecounter++;
           if (bouncecounter == 10)
           {
               bouncecounter = 0;
               lightambient = 100;
               lightsource = 0;
               OnFwd(OUT_A, 40);
               OnRev(OUT_B, 40);
               for (int i = 0; i < 20; i++)
               {
                   if (Sensor(IN_1) < lightambient) lightambient = Sensor(IN_1);
                   if (Sensor(IN_2) < lightambient) lightambient = Sensor(IN_2);
                   if (Sensor(IN_1) > lightsource) lightsource = Sensor(IN_1);
                   if (Sensor(IN_2) > lightsource) lightsource = Sensor(IN_2);
                   PlayTone(440, 20);
                   Wait(100);
               }
               Off(OUT_AB);
               lighttreshold = 5 + (lightambient + lightsource) / 2;
           }
       }
       else
       {
       
           int x1 = SENSOR_1;
           int x2 = SENSOR_2;
           NumOut(1, 1, x1);
           NumOut(1, 10, x2);
           if ((x1 < lighttreshold) && (x2 < lighttreshold))
           {
               TextOut(1,20,"A");
               OnRev(OUT_A, 75);
               OnFwd(OUT_B, 75);
           }
           else if (x1 < lighttreshold)
           {
               TextOut(1,20,"D");
               int d1 = x2 - x1;
               OnRev(OUT_A, 50 - d1);
               OnRev(OUT_B, 60);
           }
           else if (x2 < lighttreshold)
           {
               TextOut(1,20,"C");
               int d1 = x1 - x2;
               OnRev(OUT_B, 50 - d1);
               OnRev(OUT_A, 60);
           }
           else
           {
               TextOut(1,20,"B");
               OnRev(OUT_AB, 75);
           }
       }
   }

}