如何使用zedgraph将串行数据从Arduino发送到Visual Studio C#,反之亦然

时间:2016-09-18 07:27:17

标签: c# c visual-studio arduino

我正在研究一个从Arduino读取模拟数据的项目,然后用zedgraph在Visual C#中显示它。我的GUI上有一个启动按钮,用于从Arduino读取串行数据。我可以用private void read_Tick方法打开arduino端口,读取串行数据,在zedgraph上显示数据,然后每1秒关闭arduino。如果你在理解我的话时遇到困难,可以采用以下方法:

private void read_Tick(object sender, EventArgs e)
{
    try
    {

        arduino.Open();

        LineItem kurvaKonsentrasi = zedGraphKonsentrasi.GraphPane.CurveList[0] as LineItem;


        IPointListEdit listKonsentrasi = kurvaKonsentrasi.Points as IPointListEdit;

        double time = (Environment.TickCount - timeStart) / 1000.0;

        float dataKonsentrasi = float.Parse(arduino.ReadLine(), CultureInfo.InvariantCulture.NumberFormat);
        listKonsentrasi.Add(time,Convert.ToDouble(dataKonsentrasi));

        arduino.Close();

        Scale xScale = zedGraphKonsentrasi.GraphPane.XAxis.Scale;
        if (time > xScale.Max - xScale.MajorStep)
        {
            xScale.Max = time + xScale.MajorStep;
            xScale.Min = xScale.Max - 30.0;
        }

        zedGraphKonsentrasi.AxisChange();

        zedGraphKonsentrasi.Invalidate();

    }
    catch (Exception fail)
    {
        if (arduino.IsOpen)
        {
            arduino.Close();
        }
    }

}

单击开始按钮时调用此方法。所以,我的问题是,我想发送字符串数据" on"当我点击开始按钮。该字符串数据用于命令Arduino在模拟读数之前用void loop()中的代码移动附加的伺服。

if(Serial.available()>0){
    start = Serial.read();
      if(start == "on"){
        servoMotor.write(40);
  }
}

我知道我所做的事情有问题,因为我无法启动伺服。你能给我建议我应该做些什么来使Visual C#发送命令到arduino启动伺服一次然后arduino启动读数然后Visual C#读取它?

1 个答案:

答案 0 :(得分:0)

Serial.read()只返回一个字节,所以你不会得到" on"。你会得到" o"第一次,如果你再读一遍,你就会得到" n。"

如果您按照" on"用" \ n" (新行字符),你可以这样做:

char command[3];
if (Serial.available() > 0) {
   int bytesRead = Serial.readBytesUntil('\n', command, 2);
   command[2] = '\0';
   if strcmp(command, "on") == 0) {
      servoMotor.write(40);
   }
}