当前位置: 首页 > 知识库问答 >
问题:

如何使用zedgraph将Arduino的串行数据发送到Visual Studio C#,同时将其发送到Visual Studio C#

祖麻雀
2023-03-14

我正在做一个项目,从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();
        }
    }

}

当我单击开始按钮时调用此方法。所以,我的问题是,当我点击开始按钮时,我想“打开”发送字符串数据。此字符串数据用于订购Arduino在模拟读数之前将伺服I与此代码连接在空循环()中。

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

我知道我在做的事情有问题,因为我无法启动伺服。你能给我一些建议吗?我该怎么做才能让Visual C#向arduino发送命令,一旦arduino启动伺服,然后arduino启动读数,然后Visual C#读取它?

共有1个答案

胡利
2023-03-14

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);
   }
}
 类似资料:
  • 我试图让Arduino在串口读取字符“s”时触发一个中继。该字符“s”由python根据从屏幕读取的图像发送。 我的问题是arduino似乎无法从串行端口读取数据,因为它从不执行if条件。我的猜测是这两者之间存在某种死锁(这就是为什么我将ardu.close()放在函数foo中) 这是我的arduino代码: 这是我的python代码:

  • 我成功地将一个整数从处理发送到Arduino,但现在我想发送一个由三个整数组成的数组,但我无法让它工作。我想使用Arduino创建一个蜂鸣器反馈,哪个处理将控制激活哪个蜂鸣器。例如,从处理发送的数据应该是[1,0,1],这意味着传感器1和3应该开始工作。蜂鸣器应该能够同时激活,以防[1,1,1]通过。 这是我到目前为止的代码:我试图理解什么数据被发送回Arduino,以了解如何使用它,我不断得到一

  • 问题内容: 朋友,我想在JAVA中连接数据并将其传输到COM PORT(虚拟或原始)吗? 问题答案: 引用一些。 我个人从推荐的SerialPort http://serialio.com - 它不是免费的,但它是非常值得的开发商(无稿费)牌费,任何商业项目 。可悲的是,它不再是免版税的,SerialIO.com似乎已重新成为硬件销售商。我不得不在SerialPort上搜索信息。 从个人经验来看,

  • 问题内容: 我是Rails和Web开发的新手。 我正在Matlab中生成一堆对象,我想将这些对象发送到我的Rails应用程序中的数据库中。谁能建议我该怎么做? 到目前为止,在Rails端,我已经为数据生成了基本的支架。我可以使用“ / myobjects / new”中的表单将对象添加到数据库中。 在Matlab端,我一直在尝试使用HTTP POST请求添加对象,如下所示: 这将失败,并将以下内容

  • 我有一个片段,它打开一个对话框fragment来获取用户输入(一个字符串和一个整数)。我该如何将这两样东西送回碎片? 这是我的对话片段: 我需要在单击按钮之后和 以下是数据需要发送到的片段: 因此,一旦用户在Dialogfragment中选择日期,它必须返回月份和年份。 然后,按钮上的文本应更改为用户指定的月份和年份。

  • 问题内容: 我正在使用Flask创建一个网站,并且希望能够使用页面中的数据执行python代码。我知道我可以简单地使用表单,但是它是一个页面,它在接收用户输入时会不断更新,并且每次发生任何事情时都要重新加载页面,这是一个很大的麻烦。我知道我可以在javascript内执行操作,但是如何使用js变量在javascript内执行操作?到目前为止,我唯一能想到的就是用js更新外部数据库(如MongoDB