5

我想知道是否有一种标准方法可以与有效的串行设备通信。我应该使用标准库吗?如果有,是哪一个?

现在我正在摆弄根据数字输入让 LED 以给定的数量点亮。(下面的Arduino代码)。只是练习的东西。

看我过于简单和低效的测试:

#include <iostream>
#include <stdio.h>
using namespace std;

int
main()
{
  FILE *file;
  //Opening device file

  int getnum;

  while (true)
    {
      file = fopen("/dev/ttyACM5", "w");
      cout << ">>" << endl;
      cin >> getnum;
      fprintf(file, "%d", getnum); //Writing to the file
      fclose(file);
    }

}

while 循环很可爱,但如果允许在不等待用户的情况下运行,则效率很低。我怀疑多余的fopen fclose使用是愚蠢的。

微控制器将感知设备的状态并向计算机发送信号。计算机将对所有这些值进行“处理”,并发送回消息以改变 arduino 的行为。除了需要人工键盘输入之外,基本上繁重的思考都被委托给了计算机。

当然这都是为了好玩,但正如你所见,我需要“学习”C++ 中串行交互的规则!非常感谢任何帮助或指导。


Arduino代码:

char incomingByte = 0;   // for incoming serial data
int led = 11;
int bright;
void
setup()
{
  Serial.begin(9600);     // opens serial port, sets data rate to 9600 bps

}

void
loop()
{

  // send data only when you receive data:
  if (Serial.available() > 0)
    {
      // read the incoming byte:
      incomingByte = Serial.read();

      switch (incomingByte)
        {
      case '1':
        bright = 10;
        break;
      case '2':
        bright = 50;
        break;
      case '3':
        bright = 255;
        break;

      default:
        bright = 0;
        break;
        }

      analogWrite(led, bright);

      Serial.println(incomingByte);
    }
}
4

1 回答 1

4

我想知道为什么这么长时间没有人回答这个问题。你为什么说这是一种低效的方法?如果您指的是,它不是在文件系统中创建物理文件。这实际上是正确的方法,只是不要在循环内打开和关闭文件描述符。如果您希望 Serial.read 读取单个值,请发送'\n', fprint (file, "%d\n", value)

于 2014-07-01T15:54:05.363 回答