繁体   English   中英

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

[英]Control two servos from winfroms C# application with Arduino Uno

我试图弄清楚,如何与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 pin 9移动伺服器,一个同步地移到左侧,另一个同步地移到右侧:

#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#应用程序中为每个servo2获得单独的控制。 我不确定,我必须在Arduino uploaded codeC#添加些什么,例如,如果我想通过servo2pin 11控制servo2 pin 11trackBar2 servo1pin 9 pin 11控制servo2 trackBar1

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

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

一种选择是,不只是在Arduino上读取整数,而是等待字符“ A”或“ B”,然后读取一个整数。 如果字符为“ A”,则移动伺服1,如果字符为“ B”,则移动伺服2。 在您的.net应用中,在发送跟踪栏值之前输入“ A”或“ B”

注意:未经测试

// 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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM