robot

Dependencies:   FastPWM3 mbed

Committer:
bwang
Date:
Sat Nov 10 08:37:08 2018 +0000
Revision:
232:47f6cf4f9126
Parent:
205:5cfe6d7e08a3
Child:
234:ad68d7f8eff1
11/10/2018 03:36 - restructured code to allow for proper encoder zeroing - MODE_ZERO and MODE_CHR execute run-once functions when they are entered, then drop to MODE_CFG

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bwang 181:d3510c8beab6 1 #include "mbed.h"
bwang 181:d3510c8beab6 2 #include "CommandProcessor.h"
bwang 181:d3510c8beab6 3 #include "PreferenceWriter.h"
bwang 181:d3510c8beab6 4
bwang 181:d3510c8beab6 5 #include "prefs.h"
bwang 181:d3510c8beab6 6 #include "globals.h"
bwang 181:d3510c8beab6 7
bwang 196:7172e6e28867 8 #include "hardware.h"
bwang 185:5c102874b490 9 #include "defaults.h"
bwang 185:5c102874b490 10 #include "derived.h"
bwang 181:d3510c8beab6 11
bwang 232:47f6cf4f9126 12 #include "Calibration.h"
bwang 232:47f6cf4f9126 13
bwang 181:d3510c8beab6 14 void cmd_setp(Serial *pc, char *buf) {
bwang 181:d3510c8beab6 15 if (BREMS_src == CMD_SRC_TERMINAL) control.user_cmd = atof(buf);
bwang 181:d3510c8beab6 16 }
bwang 181:d3510c8beab6 17
bwang 181:d3510c8beab6 18 void cmd_mode(Serial *pc, char *buf) {
bwang 200:4999d5e6c63d 19 if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) {
bwang 200:4999d5e6c63d 20 pc->printf("%s\n", "Turn off motor first");
bwang 200:4999d5e6c63d 21 return;
bwang 200:4999d5e6c63d 22 }
bwang 181:d3510c8beab6 23 int n = str_to_mode(buf);
bwang 181:d3510c8beab6 24 if (n < 0) {
bwang 181:d3510c8beab6 25 pc->printf("%s\n", "Invalid Mode");
bwang 181:d3510c8beab6 26 return;
bwang 181:d3510c8beab6 27 }
bwang 181:d3510c8beab6 28 BREMS_mode = n;
bwang 232:47f6cf4f9126 29
bwang 232:47f6cf4f9126 30 //ZERO and CHR are special modes - they execute run-once functions
bwang 232:47f6cf4f9126 31 //and override commutation, then exit to CFG
bwang 232:47f6cf4f9126 32 if (BREMS_mode == MODE_ZERO) {
bwang 232:47f6cf4f9126 33 calibrate_position(&io);
bwang 232:47f6cf4f9126 34 control.user_cmd = 0.0f;
bwang 232:47f6cf4f9126 35 BREMS_mode = MODE_CFG;
bwang 232:47f6cf4f9126 36 }
bwang 232:47f6cf4f9126 37 else if (BREMS_mode == MODE_CHR) {
bwang 232:47f6cf4f9126 38 control.user_cmd = 0.0f;
bwang 232:47f6cf4f9126 39 BREMS_mode = MODE_CFG;
bwang 232:47f6cf4f9126 40 }
bwang 232:47f6cf4f9126 41 else
bwang 232:47f6cf4f9126 42 {
bwang 232:47f6cf4f9126 43 pc->printf("Set mode to %s\n", mode_to_str(n));
bwang 232:47f6cf4f9126 44 }
bwang 181:d3510c8beab6 45 }
bwang 181:d3510c8beab6 46
bwang 181:d3510c8beab6 47 void cmd_src(Serial *pc, char *buf) {
bwang 200:4999d5e6c63d 48 if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) {
bwang 200:4999d5e6c63d 49 pc->printf("%s\n", "Turn off motor first");
bwang 200:4999d5e6c63d 50 return;
bwang 200:4999d5e6c63d 51 }
bwang 181:d3510c8beab6 52 int n = str_to_src(buf);
bwang 181:d3510c8beab6 53 if (n < 0) {
bwang 181:d3510c8beab6 54 pc->printf("%s\n", "Invalid Source");
bwang 181:d3510c8beab6 55 return;
bwang 181:d3510c8beab6 56 }
bwang 181:d3510c8beab6 57 BREMS_src = n;
bwang 181:d3510c8beab6 58 pc->printf("Set source to %s\n", src_to_str(n));
bwang 181:d3510c8beab6 59 }
bwang 181:d3510c8beab6 60
bwang 181:d3510c8beab6 61 void cmd_op(Serial *pc, char *buf) {
bwang 200:4999d5e6c63d 62 if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) {
bwang 200:4999d5e6c63d 63 pc->printf("%s\n", "Turn off motor first");
bwang 200:4999d5e6c63d 64 return;
bwang 200:4999d5e6c63d 65 }
bwang 181:d3510c8beab6 66 int n = str_to_op(buf);
bwang 181:d3510c8beab6 67 if (n < 0) {
bwang 181:d3510c8beab6 68 pc->printf("%s\n", "Invalid Source");
bwang 181:d3510c8beab6 69 return;
bwang 181:d3510c8beab6 70 }
bwang 181:d3510c8beab6 71 BREMS_op = n;
bwang 181:d3510c8beab6 72 pc->printf("Set operation to %s\n", op_to_str(n));
bwang 181:d3510c8beab6 73 }
bwang 181:d3510c8beab6 74
bwang 181:d3510c8beab6 75 void cmd_exit(Serial *pc) {
bwang 205:5cfe6d7e08a3 76 if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) {
bwang 205:5cfe6d7e08a3 77 pc->printf("%s\n", "Turn off motor first");
bwang 205:5cfe6d7e08a3 78 return;
bwang 205:5cfe6d7e08a3 79 }
bwang 181:d3510c8beab6 80 BREMS_mode = MODE_RUN;
bwang 181:d3510c8beab6 81 pc->printf("%s\n", "Run mode ON");
bwang 181:d3510c8beab6 82 }