【发布时间】:2017-01-26 01:56:00
【问题描述】:
我正在做一个项目,从 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 在模拟读数之前移动我在void loop() 中附有此代码的伺服器。
if(Serial.available()>0){
start = Serial.read();
if(start == "on"){
servoMotor.write(40);
}
}
我知道我正在做的事情有问题,因为我无法启动伺服。你能给我建议我应该怎么做才能让 Visual C# 将命令发送到 arduino 以启动伺服一次然后 arduino 开始读数然后 Visual C# 读取它?
【问题讨论】:
-
你有 arduino 在另一边监听串行输入吗?
-
对不起,这就是我的意思。您是否检查过以确保您的代码可以移动伺服,只是为了确保它是串行输入问题而不是其他类型的问题?这可能是另一个问题,例如,没有正确设置引脚或将伺服器连接到它
-
@swmcdonnell 我在 Visual C# 上有
SerialPort arduino = new SerialPort("COM3",115200); -
@swmcdonnell 我已经做到了,但是当我结合模拟读数时,它就不起作用了。
标签: c# c visual-studio arduino