Skip to content

Commit cf987e2

Browse files
committed
more flexible monitoring + slight changes to the commander to be able to get monitoring_variables
1 parent 99c95f6 commit cf987e2

File tree

4 files changed

+43
-28
lines changed

4 files changed

+43
-28
lines changed

README.md

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,13 @@ Therefore this is an attempt to:
2525
- See also [@byDagor](https://github.com/byDagor)'s *fully-integrated* ESP32 based board: [Dagor Brushless Controller](https://github.com/byDagor/Dagor-Brushless-Controller)
2626

2727
> NEXT RELEASE 📢 : <span class="simple">Simple<span class="foc">FOC</span>library</span> v2.3.0
28-
> - Teensy 3.x inital support for 6pwm
29-
> - Teensy 4.x inital support for 6pwm
28+
> - Teensy 3.x initial support for 6pwm
29+
> - Teensy 4.x initial support for 6pwm
3030
> - Example for v3.1 SimpleFOCShield
31-
> - bugfix - current sense align - added offset exchange when exchaning pins
31+
> - More flexible monitoring API
32+
> - start, end and separator characters
33+
> - decimal places (settable through commander)
34+
> - bugfix - current sense align - added offset exchange when exchanging pins
3235
## Arduino *SimpleFOClibrary* v2.2.3
3336

3437
<p align="">

src/common/base_classes/FOCMotor.cpp

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -94,20 +94,19 @@ void FOCMotor::monitor() {
9494
bool printed = 0;
9595

9696
if(monitor_variables & _MON_TARGET){
97-
if(!printed) monitor_port->print(monitor_start_char);
98-
else monitor_port->print(monitor_separation);
97+
if(!printed && monitor_start_char) monitor_port->print(monitor_start_char);
9998
monitor_port->print(target,monitor_decimals);
10099
printed= true;
101100
}
102101
if(monitor_variables & _MON_VOLT_Q) {
103-
if(!printed) monitor_port->print(monitor_start_char);
104-
else monitor_port->print(monitor_separation);
102+
if(!printed && monitor_start_char) monitor_port->print(monitor_start_char);
103+
else if(printed) monitor_port->print(monitor_separator);
105104
monitor_port->print(voltage.q,monitor_decimals);
106105
printed= true;
107106
}
108107
if(monitor_variables & _MON_VOLT_D) {
109-
if(!printed) monitor_port->print(monitor_start_char);
110-
else monitor_port->print(monitor_separation);
108+
if(!printed && monitor_start_char) monitor_port->print(monitor_start_char);
109+
else if(printed) monitor_port->print(monitor_separator);
111110
monitor_port->print(voltage.d,monitor_decimals);
112111
printed= true;
113112
}
@@ -120,32 +119,34 @@ void FOCMotor::monitor() {
120119
c.d = LPF_current_d(c.d);
121120
}
122121
if(monitor_variables & _MON_CURR_Q) {
123-
if(!printed) monitor_port->print(monitor_start_char);
124-
else monitor_port->print(monitor_separation);
122+
if(!printed && monitor_start_char) monitor_port->print(monitor_start_char);
123+
else if(printed) monitor_port->print(monitor_separator);
125124
monitor_port->print(c.q*1000, monitor_decimals); // mAmps
126125
printed= true;
127126
}
128127
if(monitor_variables & _MON_CURR_D) {
129-
if(!printed) monitor_port->print(monitor_start_char);
130-
else monitor_port->print(monitor_separation);
128+
if(!printed && monitor_start_char) monitor_port->print(monitor_start_char);
129+
else if(printed) monitor_port->print(monitor_separator);
131130
monitor_port->print(c.d*1000, monitor_decimals); // mAmps
132131
printed= true;
133132
}
134133
}
135134

136135
if(monitor_variables & _MON_VEL) {
137-
if(!printed) monitor_port->print(monitor_start_char);
138-
else monitor_port->print(monitor_separation);
136+
if(!printed && monitor_start_char) monitor_port->print(monitor_start_char);
137+
else if(printed) monitor_port->print(monitor_separator);
139138
monitor_port->print(shaft_velocity,monitor_decimals);
140139
printed= true;
141140
}
142141
if(monitor_variables & _MON_ANGLE) {
143-
if(!printed) monitor_port->print(monitor_start_char);
144-
else monitor_port->print(monitor_separation);
142+
if(!printed && monitor_start_char) monitor_port->print(monitor_start_char);
143+
else if(printed) monitor_port->print(monitor_separator);
145144
monitor_port->print(shaft_angle,monitor_decimals);
146145
printed= true;
147146
}
148-
if(printed) monitor_port->println(monitor_end_char);
149-
150-
}
147+
if(printed){
148+
if(monitor_end_char) monitor_port->println(monitor_end_char);
149+
else monitor_port->println("");
150+
}
151+
}
151152

src/common/base_classes/FOCMotor.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,9 @@ class FOCMotor
223223
*/
224224
void monitor();
225225
unsigned int monitor_downsample = DEF_MON_DOWNSMAPLE; //!< show monitor outputs each monitor_downsample calls
226-
char monitor_start_char = 0; //!< monitor starting character
227-
char monitor_end_char = 0; //!< monitor outputs ending character
228-
char monitor_separation = '\t'; //!< monitor outputs separation character
226+
char monitor_start_char = '\0'; //!< monitor starting character
227+
char monitor_end_char = '\0'; //!< monitor outputs ending character
228+
char monitor_separator = '\t'; //!< monitor outputs separation character
229229
unsigned int monitor_decimals = 4; //!< monitor outputs decimal places
230230
// initial monitoring will display target, voltage, velocity and angle
231231
uint8_t monitor_variables = _MON_TARGET | _MON_VOLT_Q | _MON_VEL | _MON_ANGLE; //!< Bit array holding the map of variables the user wants to monitor

src/communication/Commander.cpp

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ void Commander::motor(FOCMotor* motor, char* user_command) {
109109
char cmd = user_command[0];
110110
char sub_cmd = user_command[1];
111111
// check if there is a subcommand or not
112-
int value_index = (sub_cmd >= 'A' && sub_cmd <= 'Z') ? 2 : 1;
112+
int value_index = (sub_cmd >= 'A' && sub_cmd <= 'Z') || (sub_cmd == '#') ? 2 : 1;
113113
// check if get command
114114
bool GET = isSentinel(user_command[value_index]);
115115
// parse command values
@@ -311,12 +311,23 @@ void Commander::motor(FOCMotor* motor, char* user_command) {
311311
motor->monitor_variables = (uint8_t) 0;
312312
println(F("clear"));
313313
break;
314+
case CMD_DECIMAL:
315+
printVerbose(F("decimal: "));
316+
motor->monitor_decimals = value;
317+
println((int)motor->monitor_decimals);
318+
break;
314319
case SCMD_SET:
315-
if(!GET) motor->monitor_variables = (uint8_t) 0;
320+
if(!GET){
321+
// set the variables
322+
motor->monitor_variables = (uint8_t) 0;
323+
for(int i = 0; i < 7; i++){
324+
if(isSentinel(user_command[value_index+i])) break;
325+
motor->monitor_variables |= (user_command[value_index+i] - '0') << (6-i);
326+
}
327+
}
328+
// print the variables
316329
for(int i = 0; i < 7; i++){
317-
if(isSentinel(user_command[value_index+i])) break;
318-
if(!GET) motor->monitor_variables |= (user_command[value_index+i] - '0') << (6-i);
319-
print( (user_command[value_index+i] - '0') );
330+
print( (motor->monitor_variables & (1 << 6-i)) >> (6-i));
320331
}
321332
println("");
322333
break;

0 commit comments

Comments
 (0)