我正在研究一些基于蓝牙的arduino到c#(在计算机上)通信。我一直在使用的很多代码来自示例,但这是当前的情况。
当我从我的arduino发送消息到我的电脑时,通过写入串口,它们出现 - 我通常需要包含一个换行符,但这不是什么大问题。
然而,当我向我的arduino发送消息时,它甚至从未承认它得到了它们。关于为什么会这样的任何想法?这是相关的代码。
(注意,我使用的是Arduino uno和基本的串行蓝牙调制解调器)。
char inChar; // Where to store the character read
void setup()
{
Serial.begin(9600);
}
void loop()
{
if (Serial.available() > 0)
{
inChar = Serial.read();
Serial.write("processing message...\n");
}
}
此程序中没有任何内容写入串行,表明它从未看到它有东西要读。
编辑:忘记发布C#代码。糟糕。 string message;
StringComparer stringComparer = StringComparer.OrdinalIgnoreCase;
Thread readThread = new Thread(Read);
// Create a new SerialPort object with default settings.
_serialPort = new SerialPort();
// Allow the user to set the appropriate properties.
_serialPort.PortName = SetPortName(_serialPort.PortName);
_serialPort.BaudRate = SetPortBaudRate(_serialPort.BaudRate);
_serialPort.Parity = SetPortParity(_serialPort.Parity);
_serialPort.DataBits = SetPortDataBits(_serialPort.DataBits);
_serialPort.StopBits = SetPortStopBits(_serialPort.StopBits);
_serialPort.Handshake = SetPortHandshake(_serialPort.Handshake);
// Set the read/write timeouts
_serialPort.ReadTimeout = 500;
_serialPort.WriteTimeout = 500;
_serialPort.Open();
_continue = true;
readThread.Start();
Console.WriteLine("Type QUIT to exit");
while (_continue)
{
message = Console.ReadLine();
if (stringComparer.Equals("quit", message))
{
_continue = false;
}
else
{
_serialPort.WriteLine(
String.Format(message));
}
}
readThread.Join();
_serialPort.Close();
}
答案 0 :(得分:1)
arduino代码只能读取串行中的一个字节并继续流程。您可能希望将 if 语句替换为 while 语句,如下所示:
while (Serial.available() > 0)
{
inChar[i] = Serial.read();
i++;
}
Serial.write("processing message...\n");
这会将收到的消息放入char数组中。 (你还需要将 inChar 声明为数组,例如 - char inChar [8]; )
除此之外它应该可以工作,除非你的C#代码有问题我现在无法测试,但看起来很好。
希望这有帮助。