Example #1
0
static void prvCanRxTask(void* pvParameters)
{
  xCANMsg msg;

  for (;;)
    {
      vLEDToggle(LED_GREEN);

      vCANReceiveNonVitalMsg(&msg);
      switch (msg.eID)
        {
        default:
          break;
        case MSG_REMOTECMD:
          break;
        case MSG_USERCMD:
          break;
        case MSG_SPEED:
          break;
        case MSG_BATTERYLVL:
          if (bBtInited) {
            int xParameters[] = {msg.xData.words.low};

            prvBtSendMsg('b', xParameters, 1);
          }
          break;
        case MSG_CTRLSTATE:
          if (bBtInited) {
            int xParameters[] = {msg.xData.words.low, msg.xData.words.high};
          
            prvBtSendMsg('S', xParameters, 2);
          }
        }
    }
}
Example #2
0
void vLEDFlashTask( void *pvParameters )
{
    portTickType xLastExecutionTime = xTaskGetTickCount();
    for (;;)
    {

        vTaskDelayUntil( &xLastExecutionTime, 1000/portTICK_RATE_MS ); 
        vLEDToggle( D4_PORT, D4_PIN );
             
        taskYIELD();
    }
    
}
Example #3
0
static void prvCanVitalRxTask(void* pvParameters)
{
  xCANMsg msg;
  int iBtMsgCountdown = 10;

  for (;;)
    {
      vLEDToggle(LED_RED);

      vCANReceiveVitalMsg(&msg);
      switch (msg.eID)
        {
        default:
          break;
        case MSG_STOP:
          DBGLOG(bDebugComm, "STOP received\r\n");
          stopped = 1;
          break;
        case MSG_RESET:
          DBGLOG(bDebugComm, "RESET received\r\n");
          vTaskDelay(1);
          NVIC_SystemReset();
          break;
        case MSG_ANGLE_ANGVEL:
          break;
        case MSG_ENCINFO:
          break;
        case MSG_MOTORCMD:
          xSemaphoreTake(xVMutex, portMAX_DELAY);
          Vleft = msg.xData.values.first;
          Vright = msg.xData.values.second;
          xSemaphoreGive(xVMutex);

          if (bBtInited && !(iBtMsgCountdown--)) {
            int xParameters[] = {-msg.xData.values.first * 100 / 480,
                                 -msg.xData.values.second * 100 / 480};

            prvBtSendMsg('m', xParameters, 2);

            iBtMsgCountdown = 10;
          }
          break;
        case MSG_DANGER:
          break;
        }
    }
}
Example #4
0
static void prvComputeTask(void* pvParameters)
{
  xCANMsg msg;
  accelero_values_t accelero_values;
  double gyroscope_y = 0;
  double accelero_x = 0;
  double accelero_z = 0;
  portTickType time = xTaskGetTickCount();
  int i = 0;
  static char buf[80];
  static double previous_angle = 0;
  double d = 0;
  int iBtMsgCountdown = 10;

  uart_puts("\r\nSensorboard started...\r\n");
  uart_puts("Processor UID: ");
  uart_puts(itoa(UID, buf));
  uart_puts("\r\n");
  uart_puts("Version: ");
  uart_puts(version);
  uart_puts("\r\n");

  for (;;)
    {
      if (i++ == 100)
        {
          vLEDToggle(LED_YELLOW);
          i = 0;
        }

      if (stopped)
        vTaskDelay(portMAX_DELAY);

      vTaskDelayUntil(&time, 5 / portTICK_RATE_MS);

      accelero_get_values(&accelero_values);

      gyroscope_y = (double)gyroscope_get_value(Y) * PI / 180 / GYROSCOPE_SENSITIVITY;
      accelero_x  = (double)accelero_values.x  / ACCELERO_SENSITIVITY_TYP_6G;
      accelero_z  = (double)accelero_values.z  / ACCELERO_SENSITIVITY_TYP_6G;

      DBGLOG(bDebugKalman, itoa(atan2(accelero_x, -accelero_z) * 1000, buf));
      DBGLOG(bDebugKalman, " ");
      DBGLOG(bDebugKalman, itoa(gyroscope_y * 1000, buf));
      DBGLOG(bDebugKalman, " ");

      xSemaphoreTake(xVMutex, portMAX_DELAY);
      kalman_state_update(gyroscope_y, 0.005);
      xSemaphoreGive(xVMutex);

      kalman_cov_update(accelero_x, accelero_z);

      DBGLOG(bDebugKalman, itoa(kalman_get_angle() * 1000, buf));
      DBGLOG(bDebugKalman, " ");
      DBGLOG(bDebugKalman, itoa(kalman_get_rate() * 1000, buf));
      DBGLOG(bDebugKalman, " ");
      d = dAlpha * d + (1 - dAlpha) * kalman_get_rate();
      DBGLOG(bDebugKalman, itoa(d * 1000, buf));
      DBGLOG(bDebugKalman, "\r\n");
      previous_angle = kalman_get_angle();

      msg.eID = MSG_ANGLE_ANGVEL;
      msg.xData.values.first = kalman_get_angle();
      msg.xData.values.second = d;

      vCANSendMsg(&msg);

      if (bBtInited && !(iBtMsgCountdown--)) {
        int xParameters[1] = {-RAD2DEG(kalman_get_angle())};

        prvBtSendMsg('a', xParameters, 1);

        iBtMsgCountdown = 10;
      }
    }
}
Example #5
0
void item_1_callback(unsigned char button_down)
{
	if (button_down)
		vLEDToggle(D4_PORT, D4_PIN);
}