Windowsのタスクスケジューラでスケジュールされたコンソールアプリケーションを構築して、設定した時間に毎日コードを実行します。要約すると、このアプリケーションはSerialPort
によって読み書きされます。アルドゥイーノに何かを送るとき、私が送ったものを完成させてコマンドを実行するために、何かを受け取る必要があります。C#のシリアルポートとの間でデータを読み書きする
言い換えれば、私はドアが開いているかどうかを確認するために何かを送信します。アプリケーションがそれを閉じるコードを実行する場合は、参照してください。ドアがすでに閉じている場合は、Arduino Led Displayに表示するキャラクターの束を送信します。
私はコードを開発しましたが、可能であれば、それが完全に正しいかどうかはわかりません。私が作ることができる変更がありますか?
static void Main(string[] args)
{
SerialPort comport = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
comport.Open();
string start = "?";
string carriageReturn = "\r";
string text = string.Empty;
string mensage = "@" + "r" + "\r";
string mensage2 = "@" + "{" + texto + "\r";
try
{
while (true)
{
//Send to the Arduino
comport.Write(start+ "*" + carriageReturn);
//If the serial port have bytes to read
if (comport.BytesToRead > 0)
{
//Buffer with data
byte[] dados = HexStringToByteArray(mensage);
//Handle data
comport.Read(dados, 0, dados.Length);
//Send again to execute the the command
comport.Write(start + "*" + carriageReturn);
}
if (comport.BytesToRead > 0)
{
comport.Write(start + "*" + carriageReturn);
byte[] dados2 = HexStringToByteArray(mensage2);
comport.Read(dados2, 0, dados2.Length);
comport.Write(text);
}
comport.Close();
}
}
catch(Exception ex)
{
}
}
private static byte[] HexStringToByteArray(string s)
{
s = s.Replace(" ", "");
byte[] buffer = new byte[s.Length/2];
for (int i = 0; i < s.Length; i += 2)
buffer[i/2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
return buffer;
}
EDIT:
私の基本的な入出力マッピング/関係は以下のとおりです。
私は、私は答えを待っています、アルドゥイーノに?*\r
を送信します。
Arduinoの回答が@r\r
の場合は、?*\r
を再度送信します。
Arduinoからの回答が@{/r
の場合、私は彼に文字列を送信します。
これは、StackOverflowのトピックではありません。コードレビューを取得するには、[codereview.stackexchange.com](http://codereview.stackexchange.com/)に質問を投稿してください。 – dymanoid
既にコメントが更新されています....英語で。これはポルトガル語のbtw @MongZhu – Forrobodo
なぜ 'byte []'を埋めて、それを 'SerialPort'から読み込んだ値で上書きするのですか? –