From b4dbfe735fd471025ce20ac2b5b6dd429a08b1ee Mon Sep 17 00:00:00 2001 From: 45coll <674148718@qq.com> Date: Sat, 9 Oct 2021 16:07:38 +0800 Subject: [PATCH] =?UTF-8?q?command=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- arduino/head_file_test/main/Command.cpp | 28 ++++++++ arduino/head_file_test/main/Command.h | 17 +++++ arduino/head_file_test/main/main.ino | 11 ++++ arduino/main/Command.cpp | 28 ++++++++ arduino/main/Command.h | 17 +++++ arduino/main/main.ino | 2 + ctest/{com.cpp => Command.cpp} | 14 ++-- ctest/{com.h => Command.h} | 8 +-- ctest/Command.o | Bin 0 -> 1706 bytes ctest/Makefile.win | 31 +++++++++ ctest/ctest1.cpp | 23 ++----- ctest/main.cpp | 32 +++++++++ ctest/main.o | Bin 0 -> 2302 bytes ctest/项目1.layout | 8 +++ ctest/项目2.dev | 82 ++++++++++++++++++++++++ ctest/{ctest1.exe => 项目2.exe} | Bin 133731 -> 134754 bytes ctest/项目2.layout | 8 +++ 17 files changed, 281 insertions(+), 28 deletions(-) create mode 100644 arduino/head_file_test/main/Command.cpp create mode 100644 arduino/head_file_test/main/Command.h create mode 100644 arduino/head_file_test/main/main.ino create mode 100644 arduino/main/Command.cpp create mode 100644 arduino/main/Command.h rename ctest/{com.cpp => Command.cpp} (53%) rename ctest/{com.h => Command.h} (72%) create mode 100644 ctest/Command.o create mode 100644 ctest/Makefile.win create mode 100644 ctest/main.cpp create mode 100644 ctest/main.o create mode 100644 ctest/项目1.layout create mode 100644 ctest/项目2.dev rename ctest/{ctest1.exe => 项目2.exe} (60%) create mode 100644 ctest/项目2.layout diff --git a/arduino/head_file_test/main/Command.cpp b/arduino/head_file_test/main/Command.cpp new file mode 100644 index 0000000..9c54a6b --- /dev/null +++ b/arduino/head_file_test/main/Command.cpp @@ -0,0 +1,28 @@ +#include "Command.h" + +void Command::run(char* str){ + for(int i=0; i < call_count; i++){ + if(isSentinel(call_ids[i],str)){ // case : call_ids = "T2" str = "T215.15" + call_list[i](str+strlen(call_ids[i])); // get 15.15 input function + break; + } + } +} +void Command::add(char* id, CommandCallback onCommand){ + call_list[call_count] = onCommand; + call_ids[call_count] = id; + call_count++; +} +void Command::scalar(float* value, char* user_cmd){ + *value = atof(user_cmd); +} +bool Command::isSentinel(char* ch,char* str) +{ + char s[strlen(ch)+1]; + strncpy(s,str,strlen(ch)); + s[strlen(ch)] = '\0'; //strncpy need add end '\0' + if(strcmp(ch, s) == 0) + return true; + else + return false; +} diff --git a/arduino/head_file_test/main/Command.h b/arduino/head_file_test/main/Command.h new file mode 100644 index 0000000..20e2fe5 --- /dev/null +++ b/arduino/head_file_test/main/Command.h @@ -0,0 +1,17 @@ +#include +// callback function pointer definiton +typedef void (* CommandCallback)(char*); //!< command callback function pointer +class Command +{ + public: + void add(char* id , CommandCallback onCommand); + void run(char* str); + void scalar(float* value, char* user_cmd); + bool isSentinel(char* ch,char* str); + private: + // Subscribed command callback variables + CommandCallback call_list[20];//!< array of command callback pointers - 20 is an arbitrary number + char* call_ids[20]; //!< added callback commands + int call_count;//!< number callbacks that are subscribed + +}; diff --git a/arduino/head_file_test/main/main.ino b/arduino/head_file_test/main/main.ino new file mode 100644 index 0000000..915d5ff --- /dev/null +++ b/arduino/head_file_test/main/main.ino @@ -0,0 +1,11 @@ +#include "Command.h" +Command command;//声明一个自己的该类的对象 +void setup() { + // put your setup code here, to run once: + +} + +void loop() { + // put your main code here, to run repeatedly: + +} diff --git a/arduino/main/Command.cpp b/arduino/main/Command.cpp new file mode 100644 index 0000000..9c54a6b --- /dev/null +++ b/arduino/main/Command.cpp @@ -0,0 +1,28 @@ +#include "Command.h" + +void Command::run(char* str){ + for(int i=0; i < call_count; i++){ + if(isSentinel(call_ids[i],str)){ // case : call_ids = "T2" str = "T215.15" + call_list[i](str+strlen(call_ids[i])); // get 15.15 input function + break; + } + } +} +void Command::add(char* id, CommandCallback onCommand){ + call_list[call_count] = onCommand; + call_ids[call_count] = id; + call_count++; +} +void Command::scalar(float* value, char* user_cmd){ + *value = atof(user_cmd); +} +bool Command::isSentinel(char* ch,char* str) +{ + char s[strlen(ch)+1]; + strncpy(s,str,strlen(ch)); + s[strlen(ch)] = '\0'; //strncpy need add end '\0' + if(strcmp(ch, s) == 0) + return true; + else + return false; +} diff --git a/arduino/main/Command.h b/arduino/main/Command.h new file mode 100644 index 0000000..20e2fe5 --- /dev/null +++ b/arduino/main/Command.h @@ -0,0 +1,17 @@ +#include +// callback function pointer definiton +typedef void (* CommandCallback)(char*); //!< command callback function pointer +class Command +{ + public: + void add(char* id , CommandCallback onCommand); + void run(char* str); + void scalar(float* value, char* user_cmd); + bool isSentinel(char* ch,char* str); + private: + // Subscribed command callback variables + CommandCallback call_list[20];//!< array of command callback pointers - 20 is an arbitrary number + char* call_ids[20]; //!< added callback commands + int call_count;//!< number callbacks that are subscribed + +}; diff --git a/arduino/main/main.ino b/arduino/main/main.ino index 62f5ec6..14f411d 100644 --- a/arduino/main/main.ino +++ b/arduino/main/main.ino @@ -7,6 +7,7 @@ Deng's FOC 闭环速度控制例程 测试库:SimpleFOC 2.1.1 测试硬件: 默认PID针对的电机是 GB6010 ,使用自己的电机需要修改PID参数,才能实现更好效果 */ #include +#include "Command.h" #include #include //引用以使用异步UDP #include // Source: https://github.com/TKJElectronics/KalmanFilter @@ -65,6 +66,7 @@ BLDCDriver3PWM driver = BLDCDriver3PWM(32, 33, 25, 22); //命令设置 +Command command; double target_velocity = 0; double target_angle = 91; double target_voltage = 0; diff --git a/ctest/com.cpp b/ctest/Command.cpp similarity index 53% rename from ctest/com.cpp rename to ctest/Command.cpp index 58c3cb1..3933a55 100644 --- a/ctest/com.cpp +++ b/ctest/Command.cpp @@ -1,8 +1,11 @@ -#include "com.h" +#include "Command.h" +#include +#include +#include void Command::run(char* str){ for(int i=0; i < call_count; i++){ - if(call_ids[i]){ - call_list[i](&str); + if(isSentinel(call_ids[i],str)){ // case : call_ids = "T2" str = "T215.15" + call_list[i](str+strlen(call_ids[i])); // get 15.15 input function break; } } @@ -15,10 +18,11 @@ void Command::add(char* id, CommandCallback onCommand){ void Command::scalar(float* value, char* user_cmd){ *value = atof(user_cmd); } -bool Commander::isSentinel(char* ch,char* str) +bool Command::isSentinel(char* ch,char* str) { - char s[strlen(ch)]; + char s[strlen(ch)+1]; strncpy(s,str,strlen(ch)); + s[strlen(ch)] = '\0'; //strncpy need add end '\0' if(strcmp(ch, s) == 0) return true; else diff --git a/ctest/com.h b/ctest/Command.h similarity index 72% rename from ctest/com.h rename to ctest/Command.h index 0c4a509..ff73c50 100644 --- a/ctest/com.h +++ b/ctest/Command.h @@ -5,12 +5,12 @@ class Command public: void add(char* id , CommandCallback onCommand); void run(char* str); - void Command::scalar(float* value, char* user_cmd); - bool Commander::isSentinel(char* ch); + void scalar(float* value, char* user_cmd); + bool isSentinel(char* ch,char* str); private: // Subscribed command callback variables CommandCallback call_list[20];//!< array of command callback pointers - 20 is an arbitrary number char* call_ids[20]; //!< added callback commands - int call_count = 0;//!< number callbacks that are subscribed + int call_count;//!< number callbacks that are subscribed -} +}; diff --git a/ctest/Command.o b/ctest/Command.o new file mode 100644 index 0000000000000000000000000000000000000000..e26f4f9f6b9fc6921e420a6c5cd7f0dc9ae74bd6 GIT binary patch literal 1706 zcmZuxPiWI%6#vqsTMu(BtZENC1nFUd#yX2S_0Te--^58_Mn#=n*FQSecBRc^4%9)M z7(>C67d?3N(37WK#C8+iv8c!n9(EB18z`Oziu1iMf0npC$d~ti@Av-XC3(5W9R#H! z5E5aUKqNIkqcYt*L?0mnN62g5v;%MxNoq{WWz>v|x0{+EsirhutL^4R ztqHWXDwvZx_@36!Mn!NyR{51TXA4Y#6f&eQJC!_D;r+<3J_sQgmf{JXZ%%hEz!1s0 zf5B|#8?EOTZrn;IZze}!E^gtvh52s2W84?xQk>xP3q0Hdyg$&78X;UbFdyc-#sjg= zv5tzr$+riulJt)Sd0jVEg zM~a|fj6fm~y_adXtULmF4q6Yx-Z!-r^|9G>wz-496+gacSmAr+3h)A%Vvt1 ks+=l#BaX% #include #include -#include "com.h" +#include "Command.h" +Command command; char buf[255]; void wifi_print(char * s,double num) { @@ -18,24 +19,8 @@ void re_command(float *num) { *num = *num + 1; } -char* str = "abc23"; -char* cmd_id = "abc"; +//void doTarget(char* cmd) { command.scalar(&v, cmd); } main() { - re_command(&v); - char s[strlen(cmd_id)]; - - strncpy(s,str,strlen(cmd_id)); - printf("%s", s); - if(strcmp(cmd_id, s) == 0) - { - printf("%f", v); - v = atof(str+strlen(cmd_id)); - printf("%f", v); - } - -// char* da; -// da = "123456"; -// if (da[0] == '2') - +command.run(); } diff --git a/ctest/main.cpp b/ctest/main.cpp new file mode 100644 index 0000000..b23785b --- /dev/null +++ b/ctest/main.cpp @@ -0,0 +1,32 @@ +#include +#include +#include +#include "Command.h" +Command command; +char buf[255]; +void wifi_print(char * s,double num) +{ + char str[255]; + char n[255]; + sprintf(n, "%.2f",num); + strcpy(str,s); + strcat(str, n); + strcat(buf+strlen(buf), str); + strcat(buf, ","); +} +float v = 0; +float a = 0; +void re_command(float *num) +{ + *num = *num + 1; +} +void doTarget_v(char* cmd) { command.scalar(&v, cmd); } +void doTarget_a(char* cmd) { command.scalar(&a, cmd); } +main() +{ + command.add("T", doTarget_v); + command.add("A", doTarget_a); + command.run("A2233"); + printf("%.2f",v); + printf("%.2f",a); +} diff --git a/ctest/main.o b/ctest/main.o new file mode 100644 index 0000000000000000000000000000000000000000..6bcc5b48803b23c3cb067adf499facb34d6a6490 GIT binary patch literal 2302 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 LJpDag74iQ7MgjN9 delta 20227 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