如何在使用后清除 c 变量以再次使用它?
How do I clear a c variable after use to use it again?
如果我第一次通过串行发送消息,它收到正确的代码时它可以工作,但之后它就停止工作了。
const unsigned int MAX_MESSAGE_LENGTH = 32;
const char EMPTY[1] = {'[=10=]'};
void setup() {
Serial.begin(9600);//bPS
}
String readserial(){
char message[MAX_MESSAGE_LENGTH];
static unsigned int message_pos = 0;
while (Serial.available() > 0 ){
char inbyte = Serial.read();
if(inbyte != '\n' && (message_pos < MAX_MESSAGE_LENGTH - 1)){
message[message_pos] = inbyte;
message_pos += 1;
} else {
message[message_pos] = '[=10=]';
//Serial.println(message);
return message;
}
}
return EMPTY;
}
void loop() {
static String message;
message = readserial();
if(message == "Hi"){
Serial.println("Hello");
}else{
//Serial.println(message);
}
}
仅当我先说 Hi 时,输出才会显示 hello 如果我输入任何其他内容,它就不起作用。
我曾尝试在其他地方寻找答案,但我被卡住了。
我假设您想在遇到换行符时开始一个新字符串。在这种情况下,您只需要在 else
.
中将 message_pos
重置为 0
if(inbyte != '\n' && (message_pos < MAX_MESSAGE_LENGTH - 1)){
message[message_pos] = inbyte;
message_pos += 1;
} else {
message[message_pos] = '[=10=]';
message_pos = 0; // <<---- THIS LINE ADDED
return message;
}
您的消息长度message_pos
没有被重置为零。无论它有什么值,该值都将被“保留”,因为您已将其声明为 static
。如果删除 static
关键字,每次 您调用 readserial()
.
时,message_pos
将重置为零
正如所指出的,您还可以在 return 字符串时将 message_pos
设置为零。
但是,由于您实际上并不使用(或不需要)message_pos
作为 static
,我建议您直接删除关键字。
如果我第一次通过串行发送消息,它收到正确的代码时它可以工作,但之后它就停止工作了。
const unsigned int MAX_MESSAGE_LENGTH = 32;
const char EMPTY[1] = {'[=10=]'};
void setup() {
Serial.begin(9600);//bPS
}
String readserial(){
char message[MAX_MESSAGE_LENGTH];
static unsigned int message_pos = 0;
while (Serial.available() > 0 ){
char inbyte = Serial.read();
if(inbyte != '\n' && (message_pos < MAX_MESSAGE_LENGTH - 1)){
message[message_pos] = inbyte;
message_pos += 1;
} else {
message[message_pos] = '[=10=]';
//Serial.println(message);
return message;
}
}
return EMPTY;
}
void loop() {
static String message;
message = readserial();
if(message == "Hi"){
Serial.println("Hello");
}else{
//Serial.println(message);
}
}
仅当我先说 Hi 时,输出才会显示 hello 如果我输入任何其他内容,它就不起作用。 我曾尝试在其他地方寻找答案,但我被卡住了。
我假设您想在遇到换行符时开始一个新字符串。在这种情况下,您只需要在 else
.
message_pos
重置为 0
if(inbyte != '\n' && (message_pos < MAX_MESSAGE_LENGTH - 1)){
message[message_pos] = inbyte;
message_pos += 1;
} else {
message[message_pos] = '[=10=]';
message_pos = 0; // <<---- THIS LINE ADDED
return message;
}
您的消息长度message_pos
没有被重置为零。无论它有什么值,该值都将被“保留”,因为您已将其声明为 static
。如果删除 static
关键字,每次 您调用 readserial()
.
message_pos
将重置为零
正如所指出的,您还可以在 return 字符串时将 message_pos
设置为零。
但是,由于您实际上并不使用(或不需要)message_pos
作为 static
,我建议您直接删除关键字。