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++ でのシリアル インタラクションの「ルールを学ぶ」必要があります。ヘルプやガイダンスは大歓迎です。


アルドゥイーノのコード:

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