我使用this Arduino库来标记和解析通过串口接收的命令,但我有一些奇怪的指针问题。我在stackoverflow上看到了一些其他解决方案(如建议的那样),但它们都没有帮助我解决我的问题。
请告诉我这个addCommand
功能的错误。一切似乎都很好
调用pingHandler,传递" PING"字符串到函数定义&这就是全部。
#include <SoftwareSerial.h>
#include "SerialCommand.h"
SerialCommand sCmd;
void pingHandler (const char *command) {
Serial.println("PONG");
}
void setup() {
Serial.begin(9600);
while (!Serial);
sCmd.addCommand("PING", pingHandler);
}
void loop() {
// put your main code here, to run repeatedly:
if(Serial.available() > 0){
sCmd.readSerial();
}
}
我收到错误
C:\Users\GK_Desk_07\Documents\Arduino\ArduinoSerialCommand\ArduinoUnity\ArduinoUnity.ino: In function 'void setup()':
C:\Users\GK_Desk_07\Documents\Arduino\ArduinoSerialCommand\ArduinoUnity\ArduinoUnity.ino:13:38: warning: invalid conversion from 'void (*)(const char*)' to 'void (*)()' [-fpermissive]
sCmd.addCommand("PING", pingHandler);
^
In file included from C:\Users\GK_Desk_07\Documents\Arduino\ArduinoSerialCommand\ArduinoUnity\ArduinoUnity.ino:2:0:
sketch\SerialCommand.h:84:8: note: initializing argument 2 of 'void SerialCommand::addCommand(const char*, void (*)())'
void addCommand(const char *, void(*)()); // Add commands to processing dictionary
^
答案 0 :(得分:4)
void addCommand(const char *, void(*)()); // Add commands to processing dictionary
所以它期望void(*)()
(C ++中没有任何参数的函数,C中有任意参数),但是你给它一个const char*
参数
将pingHandler
更改为
void pingHandler (void) {
由于Arduino是C ++,你不需要括号内的void
部分
void pingHandler () {
答案 1 :(得分:3)
addCommand
的第二个参数应该是指向 无参数 的函数的指针,如the example所示。
尝试将pingHandler
更改为:
void pingHandler () {
const char *command = sCmd.next();
Serial.println("PONG");
}