2016-09-18 34 views
0

我正在从Arduino读取模拟数据并使用zedgraph在Visual C#中显示它。我的GUI上有一个开始按钮,用于开始从Arduino读取串行数据。我可以使用private void read_Tick方法来打开arduino端口,读取串行数据,在zedgraph上显示数据,然后每1秒关闭一次arduino。如果您在理解我的单词时遇到困难,请按以下方法操作:如何使用zedgraph将串行数据从Arduino发送到Visual Studio C#同时使用zedgraph或反之亦然

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移动到void loop()中。

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

我知道我在做什么有什么问题,因为我无法启动伺服。你能给我一些建议吗?我应该怎么做才能使Visual C#发送命令到arduino来启动伺服,然后arduino开始读取,然后Visual C#读取它?

+0

你有Arduino的监听串行输入的另一面? – swmcdonnell

+0

对不起,这就是我的意思。你有没有检查过,以确保你的代码可以移动伺服,只是为了确保它是一个串行输入问题,而不是其他类型的问题?这可能是另一个问题,例如,不设置引脚或正确连接伺服器 – swmcdonnell

+0

@swmcdonnell我有'SerialPort arduino = new SerialPort(“COM3”,115200);'在Visual C上# – bnrfly

回答

0

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

如果按照“上”与“\ 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); 
    } 
} 
相关问题