使用 Arduino Uno 从 winforms 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 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#
中添加什么,例如,如果我想用 trackBar2
和 pin 11
控制 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'移动servo1,如果字符是'B'移动servo2。在您的 .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());
我想弄明白,如何从 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 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#
中添加什么,例如,如果我想用 trackBar2
和 pin 11
控制 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'移动servo1,如果字符是'B'移动servo2。在您的 .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());