int get_val(void)
{
  int val = 0;
  button = -1;
  //high(26);
  //freqout(4, 100, 4000);
  //low(26);
  pause(250);
  while(1)
  {
    val *= 10;
    button = sirc_button(10);
    if(button == ENTER)
    {
      if(val > 500) val = 500;
      if(val < -500) val = -500;
      button = -1;
      break;
    }
    else if(button != -1)
    {
      high(26);
      freqout(4, 100, 4000);
      low(26);
      if(button >= 0 && button <= 9)
        val += button;
      pause(250); 
      button = -1; 
    }      
  }          
  low(26);
  return val;
}  
int main()                                    // Main function
{
  int a;
  sirc_setTimeout(1000);
  while(1)
  {
    a=sirc_button(3);
    if(a==16)
    {
      wav_play("ouch.wav");
      pause(1000);
    }      
    else if(a==17)
    {
      wav_play("no.wav");
      pause(1000);
    }      
    else if(a==18)
    {
      wav_play("meow.wav");
      pause(1500);
    } 
    else if(a==19)
    {
      wav_play("hello1.wav");
      pause(1500);
    } 

  }  
}
int main()                              // Main - execution begins!
{
  xbee = fdserial_open(11, 10, 0, 9600);
  //dprint(xbee, "hello");
  //dprint(xbee, "hello");

  drive_speed(0,0);                     // Start servos/encoders cog
  drive_setRampStep(10);                // Set ramping at 10 ticks/sec per 20 ms
  sirc_setTimeout(50);                  // Remote timeout = 50 ms

  //drive_feedback(0);

  dt = CLKFREQ/10;
  t  = CNT;

  while(1)                               // Outer loop
  {
    int button = sirc_button(4);      // check for remote key press

    // Motion responses - if key pressed, set wheel speeds
    if(button == 2)
    {
      if(!running) 
        cogstart(&gofwd, NULL, fstack, sizeof fstack);
    }
    if(button == 8)
    {
      if(!running) 
        cogstart(&gobkwd, NULL, bstack, sizeof bstack);
    }
    if(button == CH_UP)drive_rampStep(100, 100); // Left turn      
    if(button == CH_DN)drive_rampStep(-100, -100); // Right turn 
    if(button == VOL_DN)drive_rampStep(-100, 100); // Left turn      
    if(button == VOL_UP)drive_rampStep(100, -100); // Right turn 
    if(button == MUTE)drive_rampStep(0, 0);        // Stop 
    
    if(button == ENTER)
    {
      getTicks();
      displayTicks();
    }

    if(CNT - t > dt)
    {
      t+=dt;
      i++;
      getTicks();
      if
      (
           ticksLeftCalc  != ticksLeftCalcOld 
        || ticksRightCalc != ticksRightCalcOld
        || ticksLeft      != ticksLeftOld
        || ticksRight     != ticksRightOld
      )
      {
        displayTicks();
      }
    }
  }
}
int main()                                    // Main function
{
  int a;
  sirc_setTimeout(1000);
  while(1)
  {
    a=sirc_button(3);
    if(a==16)
    high(3); 
    else if(a==17)
    high(5);  
    else if(a==18)
    high(4); 
    else if(a==19)
    high(6); 
    pause(100);
  }  
}
void set_mode(void)
{
  button = -1;
  high(26);
  freqout(4, 100, 4000);
  pause(250);
  while(button == -1)
  {
    button = sirc_button(10);
    if(button != -1)
      freqout(4, 100, 4000);
    if(button >-1 && button < 10)
    {
      mode = button;
      break;
    }
  }          
  low(26);
}  
int main()                                    // Main function
{
  int a;
  sirc_setTimeout(1000);
  while(1)
  {
    a=sirc_button(3);
    if(a==16)
    drive_speed(128,128);		//Move forward
    else if(a==17)
    drive_speed(-128,-128);		//Move backward
    else if(a==18)
    drive_goto(50,0);		//Move Right
    else if(a==19)
    drive_goto(0,50);		//Move left
    else if(a==20)
    drive_speed(0,0);		//Stop moving
    pause(100);
  }  
}
int main(void)
{
  //drive_pins(12, 13);
  sirc_setTimeout(60);
  simpleterm_close();
  pause(100);
  term = fdserial_open(31, 30, 0, 115200);
  pause(100);
  drive_open();
  while(1)
  {
    dprint(term, "%c", CLS);
    button = sirc_button(10);
    if(button == PWR)
    {
      set_mode();
    } 
    switch(mode)
    {
      case 0:  
        switch(button)
        {
          case CH_UP:
            //drive_speed(100, 100);
            drive_speed(smul, smul);
            break;
          case CH_DN:
            //drive_speed(-100, -100);
            drive_speed(-smul, -smul);
            break;
          case VOL_DN:
            //drive_speed(-100, 100);
            drive_speed(-smul, smul);
            break;
          case VOL_UP:
            //drive_speed(100, -100);
            drive_speed(smul, -smul);
            break;
          default:
            //drive_speed(0, 0);
            drive_speed(0, 0);
          break;
        }
        break; 
      case 1:
        for(int i = 0; i < 4; i++)
        {
          dist[i] = ping_cm(14+i);
          //dprint(term, "%d=%03d\n", i, dist[i]);
          pause(10);
        }

        speedL = 0;
        speedR = 0;

        if(dist[BACK] < 30)
        {
          speedL += 100;
          speedR += 100;
        }
        if(dist[FRONT] < 30)
        {
          speedL -= 100;
          speedR -= 100;
        }
        if(dist[LEFT] < 30)
        {
          if(speedL == 0)
            speedL -= 100;
          else if(speedL < 0)
            //speedR += 200;  
            speedR += 50;  
          else if(speedL > 0)
            //speedR -= 200;  
            speedR -= 50;  
        }
        if(dist[RIGHT] < 30)
        {
          if(speedR == 0)
            speedR -= 100;
          else if(speedR < 0)
            //speedL += 200;  
            speedL += 50;  
          else if(speedR > 0)
            //speedL -= 200;  
            speedL -= 50;  
        }
        drive_speed(speedL, speedR);
        pause(100);
        break;
      case 2:
        smul = 50;
        mode = 0;
        break;
      case 3:
        smul = 100;
        mode = 0;
        break;
      /*  
      case 4:
        val = get_val();
        dprint(term, "val = %d\n", val);
        pause(3000);
      break;
      */
    }  
  }    
}