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

本文关键字:伺服 Arduino 移动 命令 | 更新日期: 2023-09-27 18:32:50

我有一个Arduino与伺服器连接(引脚9,5.5v和接地),它将在Arduino上进行任何测试时运行;但是,当我发送串行命令来移动它时,没有任何反应。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);
     }
} 

您会看到其他 pos 持有者,因为即使我希望能够发送大于 9 的值,但是现在我只需要让它响应:)

C# 代码:

public void moveServo()
{
    if (!serialPort1.IsOpen)
    {
        Console.WriteLine("Oops");
        serialPort1.Open();
        return;
    }
    serialPort1.DtrEnable = true;
    serialPort1.DataReceived += 
        new System.IO.Ports.SerialDataReceivedEventHandler(
            serialPort1_DataReceived);
    serialPort1.Write(new byte[] {57}, 0, 1);
}

有什么想法吗?

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

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

我也推荐来自SysInternals的PortMon。 它允许您在应用程序运行时监视串行端动。

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

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

您正在发送此字节

serialPort1.Write(new byte[] {57}, 0, 1);

这基本上是角色'9'。接收方代码为

pos1 = Serial.read() - '0'; 

这意味着pos1具有值9(请注意缺少的')。然后,此值将直接写入Servo实例。

myservo.write(pos1);

将所有部分相加:您可以有效地仅将值 0 到 9 发送到伺服。但参考页面告诉您,write需要 0 到 180 的范围。仅向伺服发送 0 到 9 可能会稍微摆动一下。

也许是因为你的逻辑水平。

LPT和串行端口输出为2.5V,某些驱动程序需要5V才能设置和重置。

因此,您需要像MAX232这样的IC将逻辑电平从2.5V转换为5V。