Arduino命令解析库(Commander)的使用和实现如何高效优化?

摘要:Arduino命令解析库(Commander)的使用和实现 在嵌入式系统中,特别是在Arduino平台上,命令解析是一种常见的通信方式。 本文将介绍一个简单的Arduino命令解析库(Commander),并提供使用示例、头文件和源文件。
Arduino命令解析库(Commander)的使用和实现 在嵌入式系统中,特别是在Arduino平台上,命令解析是一种常见的通信方式。 本文将介绍一个简单的Arduino命令解析库(Commander),并提供使用示例、头文件和源文件。 内容摘自simpleFOC的Commander部分。 使用示例 以下是一个简单的使用示例,演示如何在Arduino中使用Commander库: #include <Commander.h> Commander command = Commander('\n', false); Commander command2 = Commander('\n', false); // 一级命令 void doL(char *cmd) { // L-0.02 // 取出cmd中的带符号浮点数 float value_1 = atof(cmd); Serial.printf("L: %f\n", value_1); // 将后续目录进行解析 command2.run(cmd); }; // 二级命令 void doLA(char *cmd) { // LA-0.02 // 取出cmd中的带符号浮点数 float value_1 = atof(cmd); Serial.printf("LA: %f\n", value_1); }; void setup() { Serial.begin(115200); // 添加新命令 (命令关键字,回调函数,标签文本) command.add('L', doL, "getL"); command2.add('A', doLA, "getLA"); delay(100); } void loop() { delay(2); command.run(Serial); } 在这个示例中,我们创建了两个Commander实例:command和command2,分别用于处理一级命令和二级命令。通过定义回调函数 doL 和 doLA,我们可以在收到相应命令时执行自定义的操作。 Commander.h #ifndef COMMANDS_H #define COMMANDS_H #include "Arduino.h" // commander configuration #define CMD_SCAN '?' //!< command scaning the network - only for commander #define CMD_VERBOSE '@' //!< command setting output mode - only for commander #define CMD_DECIMAL '#' //!< command setting decimal places - only for commander #define MAX_COMMAND_LENGTH 20 // Commander用于显示用户类型的详细信息 enum VerboseMode : uint8_t { nothing = 0x00, // 无显示 - 适合监控 on_request = 0x01, // 仅在用户请求时显示 user_friendly = 0x02 // 向用户显示文本消息 }; // 回调函数指针定义 typedef void (*CommandCallback)(char *); //!< 命令回调函数指针 /** * 这是一个Commander类,它实现了基于IDvalue(例如"AB5.321" - 命令ID A,子命令ID B,值 5.321)的字符串通信协议。 * - 该类可以与HardwareSerial实例结合使用,它将读写,或者可以用来解析从用户外部获得的字符串。 * - Commander还提供了一个非常简单的命令>回调接口,使用户可以将回调函数附加到某个命令ID,详见函数add()。 */ class Commander { public: /** * 默认构造函数接收一个串行接口,它用于输出值。 * 如果使用run()函数,它将使用此串行实例读取串行用户命令。
阅读全文