robot

Dependencies:   FastPWM3 mbed

Committer:
bwang
Date:
Tue Nov 13 17:46:23 2018 +0000
Revision:
252:38644631ed97
Parent:
247:da647f7185b7
11/13/2018 12:45 - hitting <return> on empty line prints "\r>", so that hitting enter after intially connecting to the controller generates a prompt

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 234:ad68d7f8eff1 12 #include "errors.h"
bwang 232:47f6cf4f9126 13 #include "Calibration.h"
bwang 232:47f6cf4f9126 14
bwang 181:d3510c8beab6 15 void cmd_setp(Serial *pc, char *buf) {
bwang 234:ad68d7f8eff1 16 if (BREMS_src == CMD_SRC_TERMINAL) {
bwang 242:ac30f04fd6f7 17 float x = atof(buf);
bwang 242:ac30f04fd6f7 18 if (BREMS_op == OP_DRIVING && x < 0.0f) x = 0.0f;
bwang 242:ac30f04fd6f7 19 control.user_cmd = x;
bwang 236:29ee9e1ccf61 20 if (!checks_passed() && control.user_cmd != 0.0f) {
bwang 234:ad68d7f8eff1 21 pc->printf("%s\n", "Errors present, setting to 0.0");
bwang 235:fe49ec4e9c97 22 control.user_cmd = 0.0f;
bwang 234:ad68d7f8eff1 23 }
bwang 234:ad68d7f8eff1 24 }
bwang 181:d3510c8beab6 25 }
bwang 181:d3510c8beab6 26
bwang 247:da647f7185b7 27 void cmdf_setp(Serial *pc, char c) {
bwang 247:da647f7185b7 28 if (BREMS_src == CMD_SRC_TERMINAL) {
bwang 247:da647f7185b7 29 float x = (float)(c - 127) / 128.0f;
bwang 247:da647f7185b7 30 if (BREMS_op == OP_DRIVING && x < 0.0f) x = 0.0f;
bwang 247:da647f7185b7 31 control.user_cmd = x;
bwang 247:da647f7185b7 32 if (!checks_passed() && control.user_cmd != 0.0f) {
bwang 247:da647f7185b7 33 pc->printf("%s\n", "Errors present, setting to 0.0");
bwang 247:da647f7185b7 34 control.user_cmd = 0.0f;
bwang 247:da647f7185b7 35 }
bwang 247:da647f7185b7 36 }
bwang 247:da647f7185b7 37 }
bwang 247:da647f7185b7 38
bwang 181:d3510c8beab6 39 void cmd_mode(Serial *pc, char *buf) {
bwang 200:4999d5e6c63d 40 if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) {
bwang 200:4999d5e6c63d 41 pc->printf("%s\n", "Turn off motor first");
bwang 200:4999d5e6c63d 42 return;
bwang 200:4999d5e6c63d 43 }
bwang 181:d3510c8beab6 44 int n = str_to_mode(buf);
bwang 181:d3510c8beab6 45 if (n < 0) {
bwang 181:d3510c8beab6 46 pc->printf("%s\n", "Invalid Mode");
bwang 181:d3510c8beab6 47 return;
bwang 181:d3510c8beab6 48 }
bwang 181:d3510c8beab6 49 BREMS_mode = n;
bwang 232:47f6cf4f9126 50
bwang 232:47f6cf4f9126 51 //ZERO and CHR are special modes - they execute run-once functions
bwang 232:47f6cf4f9126 52 //and override commutation, then exit to CFG
bwang 232:47f6cf4f9126 53 if (BREMS_mode == MODE_ZERO) {
bwang 232:47f6cf4f9126 54 calibrate_position(&io);
bwang 232:47f6cf4f9126 55 control.user_cmd = 0.0f;
bwang 232:47f6cf4f9126 56 BREMS_mode = MODE_CFG;
bwang 232:47f6cf4f9126 57 }
bwang 232:47f6cf4f9126 58 else if (BREMS_mode == MODE_CHR) {
bwang 232:47f6cf4f9126 59 control.user_cmd = 0.0f;
bwang 232:47f6cf4f9126 60 BREMS_mode = MODE_CFG;
bwang 232:47f6cf4f9126 61 }
bwang 232:47f6cf4f9126 62 else
bwang 232:47f6cf4f9126 63 {
bwang 232:47f6cf4f9126 64 pc->printf("Set mode to %s\n", mode_to_str(n));
bwang 232:47f6cf4f9126 65 }
bwang 181:d3510c8beab6 66 }
bwang 181:d3510c8beab6 67
bwang 181:d3510c8beab6 68 void cmd_src(Serial *pc, char *buf) {
bwang 200:4999d5e6c63d 69 if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) {
bwang 200:4999d5e6c63d 70 pc->printf("%s\n", "Turn off motor first");
bwang 200:4999d5e6c63d 71 return;
bwang 200:4999d5e6c63d 72 }
bwang 181:d3510c8beab6 73 int n = str_to_src(buf);
bwang 181:d3510c8beab6 74 if (n < 0) {
bwang 181:d3510c8beab6 75 pc->printf("%s\n", "Invalid Source");
bwang 181:d3510c8beab6 76 return;
bwang 181:d3510c8beab6 77 }
bwang 181:d3510c8beab6 78 BREMS_src = n;
bwang 181:d3510c8beab6 79 pc->printf("Set source to %s\n", src_to_str(n));
bwang 181:d3510c8beab6 80 }
bwang 181:d3510c8beab6 81
bwang 181:d3510c8beab6 82 void cmd_op(Serial *pc, char *buf) {
bwang 200:4999d5e6c63d 83 if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) {
bwang 200:4999d5e6c63d 84 pc->printf("%s\n", "Turn off motor first");
bwang 200:4999d5e6c63d 85 return;
bwang 200:4999d5e6c63d 86 }
bwang 181:d3510c8beab6 87 int n = str_to_op(buf);
bwang 181:d3510c8beab6 88 if (n < 0) {
bwang 240:2aaffa217627 89 pc->printf("%s\n", "Invalid operation");
bwang 181:d3510c8beab6 90 return;
bwang 181:d3510c8beab6 91 }
bwang 181:d3510c8beab6 92 BREMS_op = n;
bwang 181:d3510c8beab6 93 pc->printf("Set operation to %s\n", op_to_str(n));
bwang 181:d3510c8beab6 94 }
bwang 181:d3510c8beab6 95
bwang 181:d3510c8beab6 96 void cmd_exit(Serial *pc) {
bwang 205:5cfe6d7e08a3 97 if (control.user_cmd != 0.0f || control.torque_percent != 0.0f) {
bwang 205:5cfe6d7e08a3 98 pc->printf("%s\n", "Turn off motor first");
bwang 205:5cfe6d7e08a3 99 return;
bwang 205:5cfe6d7e08a3 100 }
bwang 181:d3510c8beab6 101 BREMS_mode = MODE_RUN;
bwang 181:d3510c8beab6 102 pc->printf("%s\n", "Run mode ON");
bwang 181:d3510c8beab6 103 }