c#serial read不对某些串行输入起作用

时间:2016-02-21 21:36:39

标签: c# arduino serial-port

我有一个程序通过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语句中的功能。

非常感谢任何帮助。非常感谢。

1 个答案:

答案 0 :(得分:2)

我的猜测是你所比较的字符串并不完全相同。 Arduino's documentation for its println()函数声明串行打印以回车符('\ r')结尾,后跟换行符('\ n')。 SerialPort.ReadLine()函数读取并返回字符串“直到输入缓冲区中的NewLine值”(found here),因此'\ r'字符可能仍在{ {1}}。

如果这是您的问题,您可以通过删除最后一个字符来解决它:

dataString