我正在研究一个从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#读取它?
答案 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);
}
}