Bayley Wang
/
foc-ed_in_the_bot_compact
robot
CommandProcessor/cmd_mode.cpp
- Committer:
- bwang
- Date:
- 2018-11-13
- Revision:
- 252:38644631ed97
- Parent:
- 247:da647f7185b7
File content as of revision 252:38644631ed97:
#include "mbed.h" #include "CommandProcessor.h" #include "PreferenceWriter.h" #include "prefs.h" #include "globals.h" #include "hardware.h" #include "defaults.h" #include "derived.h" #include "errors.h" #include "Calibration.h" void cmd_setp(Serial *pc, char *buf) { if (BREMS_src == CMD_SRC_TERMINAL) { float x = atof(buf); if (BREMS_op == OP_DRIVING && x < 0.0f) x = 0.0f; control.user_cmd = x; if (!checks_passed() && control.user_cmd != 0.0f) { pc->printf("%s\n", "Errors present, setting to 0.0"); control.user_cmd = 0.0f; } } } void cmdf_setp(Serial *pc, char c) { if (BREMS_src == CMD_SRC_TERMINAL) { float x = (float)(c - 127) / 128.0f; if (BREMS_op == OP_DRIVING && x < 0.0f) x = 0.0f; control.user_cmd = x; if (!checks_passed() && control.user_cmd != 0.0f) { pc->printf("%s\n", "Errors present, setting to 0.0"); control.user_cmd = 0.0f; } } } void cmd_mode(Serial *pc, char *buf) { if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) { pc->printf("%s\n", "Turn off motor first"); return; } int n = str_to_mode(buf); if (n < 0) { pc->printf("%s\n", "Invalid Mode"); return; } BREMS_mode = n; //ZERO and CHR are special modes - they execute run-once functions //and override commutation, then exit to CFG if (BREMS_mode == MODE_ZERO) { calibrate_position(&io); control.user_cmd = 0.0f; BREMS_mode = MODE_CFG; } else if (BREMS_mode == MODE_CHR) { control.user_cmd = 0.0f; BREMS_mode = MODE_CFG; } else { pc->printf("Set mode to %s\n", mode_to_str(n)); } } void cmd_src(Serial *pc, char *buf) { if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) { pc->printf("%s\n", "Turn off motor first"); return; } int n = str_to_src(buf); if (n < 0) { pc->printf("%s\n", "Invalid Source"); return; } BREMS_src = n; pc->printf("Set source to %s\n", src_to_str(n)); } void cmd_op(Serial *pc, char *buf) { if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) { pc->printf("%s\n", "Turn off motor first"); return; } int n = str_to_op(buf); if (n < 0) { pc->printf("%s\n", "Invalid operation"); return; } BREMS_op = n; pc->printf("Set operation to %s\n", op_to_str(n)); } void cmd_exit(Serial *pc) { if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) { pc->printf("%s\n", "Turn off motor first"); return; } BREMS_mode = MODE_RUN; pc->printf("%s\n", "Run mode ON"); }