Arduino无法从串口读取?

时间:2013-12-02 04:04:34

标签: c# arduino

我正在研究一些基于蓝牙的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();
}

1 个答案:

答案 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#代码有问题我现在无法测试,但看起来很好。

希望这有帮助。