如何在使用后清除 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,我建议您直接删除关键字。