C 重置导致将低格式visual studio转换为arduino

C 重置导致将低格式visual studio转换为arduino,c,visual-studio,visual-studio-2010,arduino,C,Visual Studio,Visual Studio 2010,Arduino,我希望能够使用arduino的按钮打开红色led,并能够使用visual studio中的重置按钮重置它。问题是,如果程序没有重新启动,它要么继续运行而无法从重置按钮打开,要么关闭而无法再次打开。我将取消所有帮助 LED的arduino代码 void setup() { Serial.begin(9600); pinMode(BUTTON_SWITCH, INPUT_PULLUP); pinMode(BUTTON_ALARM, INPUT_PULLUP

我希望能够使用arduino的按钮打开红色led,并能够使用visual studio中的重置按钮重置它。问题是,如果程序没有重新启动,它要么继续运行而无法从重置按钮打开,要么关闭而无法再次打开。我将取消所有帮助

LED的arduino代码

    void setup() {
      Serial.begin(9600);
      pinMode(BUTTON_SWITCH, INPUT_PULLUP);
      pinMode(BUTTON_ALARM, INPUT_PULLUP);
      pinMode(RED_LED, OUTPUT);

    }

if (digitalRead(BUTTON_ALARM) == LOW) {
    displayAlarm();
  }

   void displayAlarm() {
  digitalWrite(RED_LED, HIGH);
  tone(BUZZER, 1500, 700);
    if (Serial.available()) {
        // Read entire buffer up to newline character
        // Since on the C# side, serialPort1.WriteLine appends a newline character
        String respond = Serial.readStringUntil('\n');
        if (respond == "RESET") {
            digitalWrite(RED_LED, LOW);
            digitalWrite(BUZZER, LOW);
        }
    }
重置按钮中的visual studio代码

 private void Button1_Click(object sender, EventArgs e)
    {

            serialPort1.WriteLine("RESET");


    }

您已经创建了一个
float
变量
respond
。这是一个数值,不是字符串,但“重置”是一个字符串,您无法真正将数字与字符串进行比较。您需要使用
respond
a
String
读取整行内容:


无效设置()
{
Serial.begin(9600);
pinMode(按钮开关、输入上拉);
pinMode(按钮报警、输入下拉);
引脚模式(红色发光二极管,输出);
}
void循环()
{
//如果按下报警按钮,则启用报警
如果(数字读取(按钮报警)=低){
显示报警();
}
//检查串行端口输入缓冲区中是否有数据
//如果存在,且为“重置”,则禁用报警
if(Serial.available()){
//读取整个缓冲区直到换行符
//因为在C#端,serialPort1.WriteLine附加了一个换行符
String respond=Serial.readStringUntil('\n');
如果(响应=“重置”){
数码写入(红色发光二极管,低电平);
数字写入(蜂鸣器,低电平);
}
}
}
void displayAlarm()
{
数码写入(红色发光二极管,高电平);
铃声(蜂鸣器,1500700);
}

默认情况下,
WriteLine
追加一个换行符。确保你没有修改它。参见:

旁注:ARDUNO代码是C++,不是C,VS代码是C。您应该相应地调整标记。String respond=Serial.readStringUntil('\n');添加了这行代码,但它仍然不工作,无法用windows窗体上的“重置”按钮关闭红色led。@gmatinski按照括号
{}
的方式,只有当
if(digitalRead(按钮报警)=低)时,代码才会尝试从串行端口读取{
是真的。这就是你想要的吗?我已经用我认为你想要的更新了我的答案。我想在警报打开蜂鸣器和红色led时按下按钮,当我按下表单应用程序中的重置按钮时,这两个按钮都会熄灭。我将编辑问题。这是我现在在arduino应用程序中从无效循环中得到的结果,但当我按下重置按钮led仍然不熄灭。@gmatinski您的编辑删除了
loop()
功能。但我认为您仍然存在同样的问题。它只会在按下按钮时检查串行端口。请参阅我更新的答案。