使用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可能是个好主意。谢谢,非常有用的答案