【问题标题】:Reseting Led to LOW form visual studio to arduino将 Led 重置为 LOW 从 Visual Studio 到 arduino
【发布时间】:2020-03-04 01:08:09
【问题描述】:

我希望能够使用 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");


    }

【问题讨论】:

  • 旁注:Arduino 代码是 C++,而不是 C,VS 代码是 C#。你应该相应地调整你的标签。

标签: c visual-studio visual-studio-2010 arduino


【解决方案1】:

您已经创建了一个float 变量respond。这是一个数值而不是字符串,但“RESET”是一个字符串,您无法真正将数字与字符串进行比较。您需要将respond 设为String 并使用readStringUntil() 阅读整行:


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

void loop()
{
    // If BUTTON_ALARM pressed, enable alarm
    if (digitalRead(BUTTON_ALARM) == LOW) {
        displayAlarm();
    }

    // Check if there is data in the serial port input buffer
    // If there is and it is "RESET", disable the alarm
    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);
        }
    }
}

void displayAlarm()
{
    digitalWrite(RED_LED, HIGH);
    tone(BUZZER, 1500, 700);
}

默认情况下,WriteLine 附加一个换行符。确保你没有修改它。见:SerialPort.NewLine Property

【讨论】:

  • 字符串响应 = Serial.readStringUntil('\n');添加了这行代码,但仍然无法正常工作,无法使用 windows 窗体上的重置按钮关闭红色 LED。
  • @gmatinski 括号{ } 的方式,代码只会在if (digitalRead(BUTTON_ALARM) == LOW) { 为真时尝试从串口读取。那是你要的吗?我已经用我认为你想要的更新了我的答案。
  • 我想在警报响起蜂鸣器和红色 LED 时按下按钮,当我按下表单应用程序中的重置按钮时,它们都熄灭。我将编辑问题。
  • 这是我现在在 arduino 应用程序中从 void 循环向下的内容,但是当我按下重置按钮时,LED 仍然不熄灭。
  • @gmatinski 您的编辑删除了loop() 函数。但我认为你仍然有同样的问题。它只会在按下按钮时检查串行端口。请参阅我的更新答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多