【发布时间】:2018-09-03 13:45:56
【问题描述】:
我在想,如何从winfromsC#桌面应用程序中分别控制两个舵机。
在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 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);
}
}
为了控制方向,我可以为 servo1 和 servo2 创建具有不同角度值的单独函数 void,但我不知道如何从 C# 应用程序中获得对每个伺服的单独控制。我不确定,我必须在Arduino uploaded code 和C# 中添加什么,例如,如果我想从pin 11 和trackBar2 控制servo2 和servo1 从pin 9 和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”。
-
既然你想发送多个值,你应该设计一个协议。例如,您可以始终发送所有伺服值,或者您可以发送伺服 ID 和值。请注意,如果您打算稍后再做更多,您可能希望相应地使您的协议可扩展。
-
@ikkentim 你好,我是 Arduino 和控制器的新手,我不知道该怎么做,你能提供任何示例指南,我必须在哪里发送这个变量 A 和B 来自 C# 并在上传的代码中获取它?
-
@Fildor 你好,我是 Arduino 的新手,你能提供任何示例指南,说明如何设计协议以从 C# 发送伺服值或伺服 ID 并在上传的代码中获取它吗?
-
我首先发现了这个。 arduino.stackexchange.com/questions/4214/… 无论如何搜索 Arduino SE 可能是个好主意。
标签: c# arduino arduino-uno servo