C#串行命令移动Arduino伺服X度?

C#串行命令移动Arduino伺服X度?,c#,serial-port,arduino,C#,Serial Port,Arduino,我有一个Arduino连接伺服(引脚9,5.5v和地面),它将运行在Arduino上的任何ol'测试;然而,当我发送一个串行命令来移动它时,什么也没发生。rx灯闪烁,因此我知道Arduino正在获取信息。我认为问题在于我的字节转换 代码时间: Arduino代码: #include <Servo.h> Servo myservo; // create servo object to control a servo // a maximum of

我有一个Arduino连接伺服(引脚9,5.5v和地面),它将运行在Arduino上的任何ol'测试;然而,当我发送一个串行命令来移动它时,什么也没发生。rx灯闪烁,因此我知道Arduino正在获取信息。我认为问题在于我的字节转换

代码时间:

Arduino代码:

#include <Servo.h> 

Servo myservo;  // create servo object to control a servo 
                // a maximum of eight servo objects can be created 
void setup() 
{ 
    myservo.attach(9); 
    // attaches the servo on pin 9 to the servo object and sets the rotation to 0
    myservo.write(0); 
} 

int pos1= 0;
int pos2= 0;
int pos3= 0;
int totalMove = 0;

void loop() 
{ 
    if (Serial.available() > 0 && totalMove > 0)
    {
        pos1 = Serial.read() - '0'; 
        // pos2 = Serial.read() - '0'; 
        // pos3 = Serial.read() - '0'; 
        // totalMove = ((pos3) + (pos2*10) + pos1*100);

        myservo.write(pos1);
     }
} 

有什么想法吗?

您是否确保它可以使用其他软件工作?这通常是第一步,即使您必须使用超级终端。这将解决所有电缆问题,并为您提供正确的参数

另外,我推荐使用SysInternals。它允许您在应用程序运行时监视串行端口活动

确保您正在设置所有串行端口参数;波特率、数据位、停止位、奇偶校验、握手以及读写超时。还可以设置用于换行符的值


此外,您可以尝试自己读取数据,而不是依赖于接收到的数据事件。

您正在发送此字节

serialPort1.Write(new byte[] {57}, 0, 1);
基本上是字符
'9'
。接收器代码为

pos1 = Serial.read() - '0'; 
这意味着
pos1
的值为
9
(请注意缺少的
)。然后将该值直接写入
伺服
实例

myservo.write(pos1);

将所有部分相加:您可以有效地只将值0到9发送到伺服。但是告诉您,
write
需要0到180的范围。只向伺服发送0到9可能会稍微晃动它。

可能是因为您的逻辑级别

lpt和串行端口输出为2.5v,一些驱动器需要5v进行设置和复位


因此,您需要一个像max232这样的ic来将逻辑电平从2.5v转换为5v。

您如何实例化和初始化C#code?serialPort1=new System.IO.Ports.SerialPort(组件)中的
serialPort1
对象;serialPort1.PortName=“COM4”;serialPort1.BaudRate=9600;serialPort1.Open();喜欢that@Hans谢谢你!我选择通过代码,这似乎将工作!我到家后会测试出来,如果你想的话,你可以把它变成一个答案,我可以接受!这只是链接汤。在你自己的答案中张贴你最终使用的代码并接受它。谢谢;但是,连接正常,电路板正在接收数据(RX灯以C#app设置的1秒间隔闪烁),因此这不是问题所在。我很确定问题在于从int->byte->int的字节转换,我只是不知道事情到哪里去了。。。
myservo.write(pos1);