我想知道如何在 Arduino Uno(作为我的输入)和 Godot 游戏引擎(作为我的输出)之间建立串行端口通信?上下文是,我正在尝试使用 Arduino 上的传感器在 Godot 上移动/放置对象,因此我需要串行端口代码或有关如何实现该连接的指导。
感谢大家的帮助,谢谢大家!
您可以尝试插件GDSerCommPlugin。但它正在进行中,我没有测试它,所以我不知道它是否可用。
由于这个问题问了很长时间,我认为欢迎更新。 自 Godot 3.0 起,C# 得到了完全支持,我正在使用 Godot 3.3.2,我关于在 Godot 中处理串行通信的结论是:使用 C#
您将保留 Godot 的所有多平台开发优势,而无需编写任何(低级)代码行,以下是一个片段:
using System.IO.Ports; // for .NET SerialPort
然后在你的类中如果你想打开端口(假设定义了“SerialPort 端口”):
port = new SerialPort(portName, (Int32)baudRate, Parity.None, 8, StopBits.One);
然后使用_Process读取数据:
public override void _Process(float delta)
{
if (port != null)
{
if (port.BytesToRead > 0)
{
string serData = port.ReadExisting();
string[] str = serData.Split('\n'); // Just an example
parseLines(str); // Your implementation
}
}
}
Note1: 来自 SerialPort 的“DataReceived”事件不起作用(我不知道为什么,但我认为这是由于上下文不同),但是对于 Godot,这个函数没有用,因为你可以直接检查和解析中的数据_Process 函数。
注2:为了提高效率,最好在 _Process 函数的循环中使用 ReadExisting() 函数(并自己解析行)而不是 Readline() 函数。
注3: 立即发送到串口,例如:
port.Write("Hello\r");
C# 上的 System.IO.Ports 不是多平台的,仅适用于 Windows,我还没有尝试过 GDSerialcommPlugin,但我已经测试过 https://github.com/matrixant/serial_port 并且它适用于 Windows 和 linux。