static msg_t periodic_thread(void *arg) { (void)arg; chRegSetThreadName("Main periodic"); int fault_print = 0; for(;;) { if (mcpwm_get_state() == MC_STATE_RUNNING) { ledpwm_set_intensity(LED_GREEN, 1.0); } else { ledpwm_set_intensity(LED_GREEN, 0.2); } if (mcpwm_get_fault() != FAULT_CODE_NONE) { ledpwm_set_intensity(LED_RED, 1.0); if (!fault_print && AUTO_PRINT_FAULTS) { fault_print = 1; comm_print_fault_code(mcpwm_get_fault()); } } else { ledpwm_set_intensity(LED_RED, 0.0); fault_print = 0; } if (mcpwm_get_state() == MC_STATE_DETECTING) { comm_send_rotor_pos(mcpwm_get_detect_pos()); } chThdSleepMilliseconds(25); } return 0; }
static THD_FUNCTION(periodic_thread, arg) { (void)arg; chRegSetThreadName("Main periodic"); int fault_print = 0; for(;;) { if (mc_interface_get_state() == MC_STATE_RUNNING) { ledpwm_set_intensity(LED_GREEN, 1.0); } else { ledpwm_set_intensity(LED_GREEN, 0.2); } mc_fault_code fault = mc_interface_get_fault(); if (fault != FAULT_CODE_NONE) { if (!fault_print && AUTO_PRINT_FAULTS) { fault_print = 1; commands_printf("%s\n", mc_interface_fault_to_string( mc_interface_get_fault())); } for (int i = 0; i < (int)fault; i++) { ledpwm_set_intensity(LED_RED, 1.0); chThdSleepMilliseconds(250); ledpwm_set_intensity(LED_RED, 0.0); chThdSleepMilliseconds(250); } chThdSleepMilliseconds(500); } else { ledpwm_set_intensity(LED_RED, 0.0); fault_print = 0; } if (mc_interface_get_state() == MC_STATE_DETECTING) { commands_send_rotor_pos(mcpwm_get_detect_pos()); } #if ENCODER_ENABLE commands_send_rotor_pos(encoder_read_deg()); // comm_can_set_pos(0, encoder_read_deg()); #endif chThdSleepMilliseconds(10); } }
static msg_t periodic_thread(void *arg) { (void)arg; chRegSetThreadName("Main periodic"); for(;;) { if (mcpwm_get_state() == MC_STATE_RUNNING) { ledpwm_set_intensity(LED_GREEN, 1.0); } else { ledpwm_set_intensity(LED_GREEN, 0.2); } if (IS_FAULT()) { ledpwm_set_intensity(LED_RED, 0.5); } else { ledpwm_set_intensity(LED_RED, 0.0); } #if USE_SERVO_INPUT // Use decoded servo inputs #endif // Gurgalof bicycle-throttle #if USE_THROTTLE_ADC #define MIN_PWR 0.24 float pwr = (float)ADC_Value[ADC_IND_EXT]; pwr /= 4095.0; if (pwr < MIN_PWR) { mcpwm_use_pid(0); mcpwm_set_duty(0); } else { mcpwm_use_pid(0); mcpwm_set_duty(pwr); } #endif chThdSleepMilliseconds(1); } return 0; }