使用Arduino Uno从winforms C#应用程序控制两个伺服器

问题描述 投票:0回答:1

我想弄清楚,如何从winfroms C#桌面应用程序中分别控制两个伺服器。

C#初始化:

 myport.PortName = "COM6";
 myport.BaudRate = 9600;
 myport.Open();

trackBar1控制:

private void trackBar1_Scroll(object sender, EventArgs e)
{
     if (myport.IsOpen)
     {
         myport.WriteLine(trackBar1.Value.ToString());
     }
}

Arduino代码使用pin 911移动伺服器,一个向左移动,同时向右移动:

#include <Servo.h>
Servo servo1;
Servo servo2;
int val;

void setup() {
    Serial.begin(9600);
    servo1.attach(9);
    servo2.attach(11);
}

void loop() {
  val = Serial.parseInt();
  if(val != 0){
    servo1.write(val);
    servo2.write(val);
  }
}

为了控制方向,我可以为servo1servo2创建具有不同角度值的单独函数void,但我无法弄清楚,如何从C#应用程序获得每个伺服的单独控制。我不确定,我必须在Arduino uploaded codeC#添加,例如,如果我想从servo2控制pin 11 trackBar2servo1pin 9 trackBar1private void trackBar2_Scroll(object sender, EventArgs e) { if (myport.IsOpen) { myport.WriteLine(trackBar2.Value.ToString()); } }

// in Arduino
void loop() {
  switch(Serial.read())
  {
    case 'A':
      servo1.write(Serial.parseInt());
      break;
    case 'B':
      servo2.write(Serial.parseInt());
      break;
  }
}


// in c#
myport.Write('B')
myport.WriteLine(trackBar2.Value.ToString());

任何建议,指南或示例都会非常有帮助

c# arduino arduino-uno servo
1个回答
1
投票

一种选择是,而不是只读取你的Arduino上的内注,等待字符'A'或'B',然后读取一个int。如果字符是'A'移动servo1,如果字符是'B'移动servo2。在.net应用中,在发送轨迹栏值之前写入“A”或“B”

注意:未经测试

qazxswpoi
© www.soinside.com 2019 - 2024. All rights reserved.