gpt4 book ai didi

c# - 端口.ReadExisting() : Input string was not in a correct format

转载 作者:行者123 更新时间:2023-11-30 04:42:40 26 4
gpt4 key购买 nike

我正在构建一个 C# 应用程序,它从 Arduino(按下按钮)获取信息,然后在 Web 浏览器中导航到相应的网站。我有 3 个按钮,分别向串行监视器打印 1、2 和 3。

随后,当按下软件按钮时,c# 应用程序使用端口(ReadExisting())读取 arduino 发送的数字,其中端口是我的串行端口的名称。

当我按下 Arduino 按钮时,它运行良好,我的应用程序读取数字并执行正确的操作。但是,我尝试在没有按下任何按钮时向串行监视器打印一个数字(我尝试了 0 和 4),但它似乎不起作用。 Arduino 上的串行监视器确实显示了没有按下任何按钮时出现的数字,但我的 c# 在尝试读取它时崩溃了。

当它崩溃时我得到的错误消息是“输入字符串的格式不正确”

c# 代码的相关部分(文本是荷兰语,但并不重要):

 private void updateBtn_Click(object sender, EventArgs e)
{
message = Convert.ToInt32(port.ReadExisting());
btnLab.Text = Convert.ToString(message);

if (message == 1)
{
MessageBox.Show("Er is drugsafval gedropt in Breda! Klik op alarm voor de locatie en op route voor de weg ernaartoe.");
logBox.Items.Add("Merodelaan Breda," + DateTime.Now);
} else if (message == 2)
{
MessageBox.Show("Er is drugsafval gedropt in Tilburg! Klik op alarm voor de locatie en op route voor de weg ernaartoe.");
logBox.Items.Add("Leijweg Tilburg," + DateTime.Now);
} else if (message == 3)
{
MessageBox.Show("Er is drugsafval gedropt in Breda! Klik op alarm voor de locatie en op route voor de weg ernaartoe.");
logBox.Items.Add("Bergsche Hoevenpad Oss," + DateTime.Now);
}
} else if (message == 0)
{
MessageBox.Show("Er is momenteel geen alarm.");

}

相关对应的Arduino代码(对于其中一个按钮,对于每个下一个按钮,它是完全相同的):

void loop() {
String input = Serial.readStringUntil('\n');
bredaState = digitalRead(bredaBtn);
tilburgState = digitalRead(tilburgBtn);
ossState = digitalRead(ossBtn);

if (bredaState == LOW)
{
digitalWrite(bredaLed, LOW);
Serial.println("0");
}
else {
Serial.println("1");
lcd.clear();

lcd.print("Alarm:Drugsafval");
lcd.setCursor(0,1);
lcd.print("in Breda!");
bredaState = digitalRead(bredaBtn);
for(int i=0; i<4; i++){
digitalWrite(bredaLed, HIGH);
delay(200);
digitalWrite(bredaLed, LOW);
delay(200);
digitalWrite(bredaLed, HIGH);
}

buzz();
lcd.clear();
lcd.print("Er is momenteel");
lcd.setCursor(0, 1);
lcd.print("geen alarm!");
}

最佳答案

首先尝试读取输入,然后使用 int.TryParse 以便在失败时不会抛出错误。您可能还想先对从 port.ReadExisting() 返回的值做一些额外的验证。下面的代码应该可以阻止错误的发生。

var input = port.ReadExisting();
int message;
if (int.TryParse(input, out message))
{
btnLab.Text = Convert.ToString(message);
if (message == 1)
{
MessageBox.Show("Er is drugsafval gedropt in Breda! Klik op alarm voor de locatie en op route voor de weg ernaartoe.");
logBox.Items.Add("Merodelaan Breda," + DateTime.Now);
}
else if (message == 2)
{
MessageBox.Show("Er is drugsafval gedropt in Tilburg! Klik op alarm voor de locatie en op route voor de weg ernaartoe.");
logBox.Items.Add("Leijweg Tilburg," + DateTime.Now);
}
else if (message == 3)
{
MessageBox.Show("Er is drugsafval gedropt in Breda! Klik op alarm voor de locatie en op route voor de weg ernaartoe.");
logBox.Items.Add("Bergsche Hoevenpad Oss," + DateTime.Now);
}
else if (message == 0)
{
MessageBox.Show("Er is momenteel geen alarm.");
}
}

关于c# - 端口.ReadExisting() : Input string was not in a correct format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58643338/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com