主に PC とマイコン間での通信に用います。
マイコンから PC
マイコン側
setMessage
関数が送信処理を行うため、高周期で setMessage
を呼び出すと PC にデータが送られすぎます。適度な delay が必要です。
void setup()
{
Serial.begin(115200);
}
void loop()
{
delay(10);
}
Serial 送信クラス
Definition SerialWriter.hpp:22
void setMessage(const Message &rhs)
送信内容を更新
Definition SerialWriter.hpp:38
PC 側 (OpenSiv3D)
getMessage
は受信処理を行わないため、呼び出しコストは低いです。受信処理は受信スレッドによって行われます。
#include <Siv3D.hpp>
void Main()
{
Serial serial;
while (System::Update())
{
if (not serial)
{
serial.open(U"COM10", 115200);
}
if (const auto message = reader.getMessage())
{
Print << *message;
}
else
{
Print << U"no message";
}
}
}
OpenSiv3D用 Serial 受信クラス
Definition SivSerialReader.hpp:23
PC からマイコン
PC 側 (OpenSiv3D)
#include <Siv3D.hpp>
void Main()
{
Serial serial;
while (System::Update())
{
if (not serial)
{
serial.open(U"COM10", 115200);
}
writer.setMessage(Time::GetMicrosec());
}
}
OpenSiv3D用 Serial 送信クラス
Definition SivSerialWriter.hpp:23
マイコン側
void setup()
{
Serial.begin(115200);
}
void loop()
{
if (const auto message = reader.getMessage())
{
uint32_t value = *message;
}
delay(10);
}
Serial 受信クラス
Definition SerialReader.hpp:22
OpenSiv3D COMポート列挙方法
System::EnumerateSerialPorts
関数から、接続されているシリアルポート情報 SerialPortInfo
の配列を取得できます。例では map 関数を使って String の配列に変換しています。
void Main()
{
const Array<String> ports = System::EnumerateSerialPorts().map([](const SerialPortInfo& info)
{
return info.port;
});
Print << ports;
while (System::Update()) {}
}