我目前正在尝试使用我的arduino构建一个非常基本的串行shell。
我能够使用Serial.read()从设备获取输出,并且可以获得它输出的字符,但是我无法弄清楚如何将该字符添加到更长的时间以形成完整的命令。
我尝试了合乎逻辑的东西,但它不起作用:
char Command[];
void loop(){
if(Serial.available() > 0){
int clinput = Serial.read();
Command = Command + char(clinput);
}
有人可以帮忙吗?谢谢。
答案 0 :(得分:3)
您必须逐个字符地写入数组。 例如:
#define MAX_COMMAND_LENGTH 20
char Command[MAX_COMMAND_LENGTH];
int commandLength;
void loop(){
if(Serial.available() > 0){
int clinput = Serial.read();
if (commandLength < MAX_COMMAND_LENGTH) {
Command[commandLength++] = (char)clinput;
}
}
BTW:这还不完整。例如。 commandLength必须用0初始化。
答案 1 :(得分:1)
您需要在command
中分配足够的空间来保持最长的命令
然后在进入时将字符写入其中。当你用完字符时,
你null终止命令然后返回。
char Command[MAX_COMMAND_CHARS];
void loop() {
int ix = 0;
// uncomment this to append to the Command buffer
//ix = strlen(Command);
while(ix < MAX_COMMAND_CHARS-1 && Serial.available() > 0) {
Command[ix] = Serial.read();
++ix;
}
Command[ix] = 0; // null terminate the command
}
答案 2 :(得分:0)
如果可以,请使用std :: string。如果你不能:
snprintf(Command, sizeof(Command), "%s%c", Command, clinput);
或(记得检查命令不会增长太多......)
size_t len = strlen(Command);
Command[len] = clinput;
Command[len + 1] = '\0';
答案 3 :(得分:0)
std::ostringstream使用std::string:
#include <sstream> #include <string> std::string loop() { std::ostringstream oss; while ( Serial.available() > 0 ){ oss << static_cast<char>(Serial.read()); } return oss.str(); }
您还可以使用operator +连接std :: string的多个实例。
答案 4 :(得分:0)
因为它也标记了C,
char *command = (char *)malloc(sizeof(char) * MAXLENGTH);
*command = '\0';
void loop(){
char clinput[2] = {}; //for nullifying the array
if(Serial.available() > 0){
clinput[0] = (char)Serial.read();
strcat(command, clinput);
}
答案 5 :(得分:-1)
char command[MAX_COMMAND];
void loop(){
char *p = command;
if(Serial.available() > 0){
int clinput = Serial.read();
command[p++] = (char)clinput;
}
}