c# 串行读取在某些串行输入上不起作用
c# serial read doesn't do function on certain serial input
我有一个程序可以通过 com 端口从 arduino 读取串行数据。
当我对其进行编程以将串行数据打印到控制台时,它成功地工作了,它确实如此。
例如arduino说输出“21”,控制台写“21”。
但是如果我做一个 if 语句说 If(data == "21"){/*dosomething*/}
即使数据打印为“21”它也不起作用。
以下是我的代码中与此问题相关的部分。
Arduino
if(digitalRead(i) == HIGH && stat[i-2] == false){
Serial.print(i); Serial.println(1);
stat[i-2] = true;
}
如果没有其余代码,arduino 代码有点难以理解,但它所做的只是扫描所有端口以查看其中一个端口是否很高。如果是,它会打印端口号和旁边的 1。例如,如果端口 2 为高电平,则输出“21”。当端口 2 为低电平时也会发生同样的情况,它输出“20”。
C#(事件处理程序)
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort serialPort1 = sender as SerialPort;
string dataString = (serialPort1).ReadLine();
screen.clearline();
Console.Write(dataString);
if (dataString == "connectAlready")
{
connect.con();
}
if (dataString == "20")
{
Console.WriteLine("pdown");
}
if (dataString == "21")
{
Console.WriteLine("pup");
}
}
这是接收到数据时调用的事件处理程序。
它将数据打印到屏幕,例如“21”、“20”,但它不执行 If 语句中的功能。
任何帮助将不胜感激,非常感谢。
我猜你比较的字符串不完全相等。 Arduino's documentation for its println() function states that the serial print ends in a carriage return character ('\r'), followed by the newline character ('\n'). The SerialPort.ReadLine() function reads and returns the string "up to the NewLine value in the input buffer" (found here), 所以 '\r' 字符可能还在 dataString
.
如果这是你的问题,你可以通过删除最后一个字符来解决它,例如:
dataString = dataString.TrimEnd('\r');
我有一个程序可以通过 com 端口从 arduino 读取串行数据。 当我对其进行编程以将串行数据打印到控制台时,它成功地工作了,它确实如此。
例如arduino说输出“21”,控制台写“21”。
但是如果我做一个 if 语句说 If(data == "21"){/*dosomething*/}
即使数据打印为“21”它也不起作用。
以下是我的代码中与此问题相关的部分。
Arduino
if(digitalRead(i) == HIGH && stat[i-2] == false){
Serial.print(i); Serial.println(1);
stat[i-2] = true;
}
如果没有其余代码,arduino 代码有点难以理解,但它所做的只是扫描所有端口以查看其中一个端口是否很高。如果是,它会打印端口号和旁边的 1。例如,如果端口 2 为高电平,则输出“21”。当端口 2 为低电平时也会发生同样的情况,它输出“20”。
C#(事件处理程序)
private static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort serialPort1 = sender as SerialPort;
string dataString = (serialPort1).ReadLine();
screen.clearline();
Console.Write(dataString);
if (dataString == "connectAlready")
{
connect.con();
}
if (dataString == "20")
{
Console.WriteLine("pdown");
}
if (dataString == "21")
{
Console.WriteLine("pup");
}
}
这是接收到数据时调用的事件处理程序。 它将数据打印到屏幕,例如“21”、“20”,但它不执行 If 语句中的功能。
任何帮助将不胜感激,非常感谢。
我猜你比较的字符串不完全相等。 Arduino's documentation for its println() function states that the serial print ends in a carriage return character ('\r'), followed by the newline character ('\n'). The SerialPort.ReadLine() function reads and returns the string "up to the NewLine value in the input buffer" (found here), 所以 '\r' 字符可能还在 dataString
.
如果这是你的问题,你可以通过删除最后一个字符来解决它,例如:
dataString = dataString.TrimEnd('\r');