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();
      }
    }
  }
}
Ejemplo n.º 2
0
int main()
{

  // Close the simpleterm half duplex connection
  simpleterm_close();

  // Start the sensor cog(s)
	cogstart(&pollPingSensors, NULL, pstack, sizeof pstack);

  // Blinken Lights!
  const int pauseTime = 50;
  const int startLED = 17; // 16 is used for the pollPingSensors cog to indicate activity.
  const int endLED = 23;
  high(startLED);
  pause(pauseTime);
  low(startLED);
  while(1) {
  pause(5);
  if(isActive == 1) {
      for (int led = startLED + 1; led <= endLED; led++) {
        high(led);
        pause(pauseTime);
        low(led);
      }
      for (int led = endLED - 1; led >= startLED; led--) {
        high(led);
        pause(pauseTime);
        low(led);
      }
    isActive = 0;
    }
  }
}
Ejemplo n.º 3
0
void square_wave(int pin, int channel, int freq)
{
  if(!cog)     cog = cogstart(&square_wave_cog, NULL,
                   stack, sizeof(stack)) + 1;

  int ctr, frq;
  square_wave_setup(pin, freq, &ctr, &frq);
  if(!channel)
  {
    ctra = ctr;
    frqa = frq;
    if(pin < 0)
    {
      pin = -pin;
      ctra = 0;
      frqb = 0;
    }
  }
  else 
  {
    ctrb = ctr;
    frqb = frq;
    if(pin < 0)
    {
      pin = -pin;
      ctrb = 0;
      frqb = 0;
    }
    //printf("ctrb = %s\n", itoa(ctrb, s, 2));
    //printf("frqb = %s\n", itoa(frqb, s, 2));
  }  
}
Ejemplo n.º 4
0
int pwm_start(unsigned int cycleMicroseconds)
{
  //us = CLKFREQ/1000000;
  tCycle = cycleMicroseconds * st_usTicks;
  pwcog = cogstart(pw, NULL, pwstack, sizeof(pwstack)) + 1;  
  return pwcog;
}
Ejemplo n.º 5
0
void MessageStart()
{
    lock = locknew();
    lockclr(lock);
    simpleterm_close();
    msg_serial = fdserial_open(31, 30, 0, 115200);    
    cogstart(&HandleSerial, NULL, msg_stack, sizeof(msg_stack));
}
Ejemplo n.º 6
0
void SensorsStart()
{
    uint8_t ii;
    
    memset(&SensorState, 0, sizeof(SensorState));
    
    cogstart(&PollSensors, NULL, sensor_stack, sizeof(sensor_stack));
}
Ejemplo n.º 7
0
int servo_start(void)                          // Take cog & start servo process
{
  lockID = locknew();                         // Check out a lock
  if (lockID == -1) return -1;                // Return -1 if no locks
  servo_stop();                                // Stop in case cog is running
  servoCog = cogstart(&servo, NULL, stack,    // Launch servo into new cog
             sizeof(stack)) + 1;
  return servoCog;                            // Return cog that was taken
}
Ejemplo n.º 8
0
void dac_ctr(int pin, int channel, int dacVal)
{
  if(dacCtrBits == 0) dacCtrBits = 8;
  int dacBitX = 32 - dacCtrBits;
  
  if(!cog) cog = cogstart(&dac_ctr_cog, NULL,
                          stack, sizeof(stack)) + 1;
  if(!channel)
  {
    ctra = (DUTY_SE + pin);
    frqa = (dacVal << dacBitX);
  }
  else
  {
    ctrb = (DUTY_SE + pin);
    frqb = (dacVal << dacBitX);
  }  
}
Ejemplo n.º 9
0
int *cog_runStackTest(void (*function)(void *par), int stacksize)
{
  srand(stacksize);
  //srand(0);
  int stackSizeBytes = stacksize * (sizeof(int));
  //print("stackSizeBytes = %d bytes, %d ints\n", stackSizeBytes, stackSizeBytes/sizeof(int));
  int stackOverhead = sizeof(_thread_state_t) + (3 * sizeof(unsigned int));
  //print("stackOverhead = %d bytes, %d ints\n", stackOverhead, stackOverhead/sizeof(int));
  int cogRunTestOverhead = 2 * sizeof(int);
  //print("cogRunTestOverhead = %d bytes, %d ints\n", cogRunTestOverhead, cogRunTestOverhead/sizeof(int));
  int stackBytes = stackSizeBytes + stackOverhead + cogRunTestOverhead;
  //print("stackBytes = %d bytes, %d ints\n", stackBytes, stackBytes/sizeof(int));
  int stackInts = stackBytes / sizeof(int);
  //print("stackInts = %d ints\n", stackInts);

  int *addr;

  addr = malloc(stackBytes);
  int n = 0;
  for(int *i = addr+2; i < (addr + (stackInts)); i++)
  {
    // *i = n;
    *i = rand();
    n++;
  }

  *addr = 1 + cogstart(function, NULL, addr + cogRunTestOverhead/sizeof(int), stackBytes - cogRunTestOverhead);
  if(*addr == 0)
  {
    free(addr);
    return (int*) 0;
  }

  //print("\n\n---[ cog_run ]--- \n\n");
  //print("Cog Address = %d, Cog Value = %d\n", (int) addr, *addr);
  *(addr+1) = stackInts;
  //print("Stack Count Address = %d, Stack Count = %d\n\n", (int)(addr+1), *(addr+1));
  //  //  print("(int)(addr+2) = %d\n", (int)(addr+2));
  return addr;  
}
Ejemplo n.º 10
0
void da_out(int channel, int daVal)
{
  if(abvolts_daCtrBits == 0) abvolts_daCtrBits = 8;
  int daBitX = 32 - abvolts_daCtrBits;

  if(!cog)
  {
    cog = cogstart(&da_ctr_cog, NULL,
                  stack, sizeof(stack)) + 1;
  }

  if(!channel)
  {
    ctra = (DUTY_SE + pinCh0);
    frqa = (daVal << daBitX);
  }
  else
  {
    ctrb = (DUTY_SE + pinCh1);
    frqb = (daVal << daBitX);
  }  
}
int gps_open(int gpsSin, int gpsSout, int gps_baud)   // Open reader, start reading
{

  stopping = 0;
  cog = cogstart(&gps_run, NULL, stack, sizeof(stack));

  if(cog < 0)
  {
    //a valid cog was NOT grabbed, clear the GPS data structure and pin info
    memset(&gps_data, 0, sizeof(nmea_data));
    memset(&_gps_rx_pin, 0, (sizeof(int)*3));         
  }
  else
  {
    //the GPS parser cog was started
    _gps_rx_pin = gpsSin;
    _gps_tx_pin = gpsSout;
    _gps_baud = gps_baud;
  }

  return(cog < 0 ? FALSE:TRUE);
}
Ejemplo n.º 12
0
/* Binds a pin to this servo object and sets the limits.
 */
uint8_t Servo::attach(int16_t pin, int16_t min, int16_t max)
{
  // capture the config for future write methods.
  _min  = (MIN_PULSE_WIDTH - min)/4; //resolution of min/max is 4 uS
  _max  = (MAX_PULSE_WIDTH - max)/4; 

  // Set lock before touching the shared properties array
  while(lockset(Servo::_lockID));

  // If cog not started, start it.
  if (Servo::_servoCog == 0)
  {
    Servo::_servoCog = cogstart(&servoLoop, NULL, stack, sizeof(stack)) + 1;
  }

  Servo::_slots[_idx]._pin = pin;
  pinMode(Servo::_slots[_idx]._pin, OUTPUT);

  // Increment when a servo is attached.
  Servo::_attachedCount++;

  // Clear lock
  lockclr(Servo::_lockID);
}
Ejemplo n.º 13
0
int mstime_start()
{
  mstime_stop();
  cog = 1 + cogstart(&ms_timer, NULL, stack, sizeof(stack));
}
Ejemplo n.º 14
0
/* Start SpeedControl function in separate cog*/
void initMotorControl(void){
  int cog = cogstart(&motorControl, NULL, stack, sizeof(stack));
}
Ejemplo n.º 15
0
int pwm_start(unsigned int cycleMicroseconds)
{
  us = CLKFREQ/1000000;
  tCycle = cycleMicroseconds * us;
  pwcog = cogstart(&pw, NULL, pwstack, sizeof(pwstack)) + 1;  
}