Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Arduino Uno从winfroms C#应用程序控制两个伺服_C#_Arduino_Arduino Uno_Servo - Fatal编程技术网

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

使用Arduino Uno从winfroms C#应用程序控制两个伺服,c#,arduino,arduino-uno,servo,C#,Arduino,Arduino Uno,Servo,我想弄清楚,如何从winfromsC#桌面应用程序中分别控制两个伺服 在C#初始化中: myport.PortName = "COM6"; myport.BaudRate = 9600; myport.Open(); 由trackBar1控制: private void trackBar1_Scroll(object sender, EventArgs e) { if (myport.IsOpen) { myport.WriteLine(trackB

我想弄清楚,如何从
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());
     }
}
private void trackBar2_Scroll(object sender, EventArgs e)
{
    if (myport.IsOpen)
    {
        myport.WriteLine(trackBar2.Value.ToString());
    }
}
Arduino代码使用
引脚9
11
移动伺服,一个向左,另一个向右同步:

#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);
  }
}

任何建议、指南或示例都会非常有用

一个选项是,不只是在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());

一个选项是,不只是在Arduino上读取整数,而是等待字符“A”或“B”,然后读取整数。如果字符是“A”移动伺服1,如果字符是“B”移动伺服2。在你的.net应用程序中,在发送轨迹栏值之前,先写上“A”或“B”。既然你想发送多个值,那么你应该设计一个协议。例如,您可以始终发送所有伺服值,也可以发送伺服id和值。请注意,如果您打算以后再做更多的工作,您可能希望使您的协议具有相应的可扩展性。@ikkentim您好,我对Arduino和控制器一无所知,我不知道如何做,您能否提供一些示例指南,让我从C#发送变量A和B,并在上载的代码中获取这些变量?@Fildor Hello,我是Arduino的新手,你能提供一些例子来指导如何设计协议,从C#发送伺服值或伺服id,并将其上传到代码中吗?我发现这是一个开始。搜索Arduino SE可能是个好主意。谢谢,非常有用的答案