効率的なシリアル デバイスと通信する標準的な方法があるかどうかを知りたいです。標準ライブラリを使用する必要がありますか? もしそうなら、どれですか?
現在、数値入力に基づいて特定の量で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);
}
}