我有一个程序通过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语句中的功能。
非常感谢任何帮助。非常感谢。
答案 0 :(得分:2)
我的猜测是你所比较的字符串并不完全相同。 Arduino's documentation for its println()函数声明串行打印以回车符('\ r')结尾,后跟换行符('\ n')。 SerialPort.ReadLine()函数读取并返回字符串“直到输入缓冲区中的NewLine值”(found here),因此'\ r'字符可能仍在{ {1}}。
如果这是您的问题,您可以通过删除最后一个字符来解决它:
dataString