ubuntu と Arduino 間でシリアル通信してみます。
ubuntu では cu コマンドを利用します。まずはインストール。
$ sudo apt install cu
起動・接続は以下。切断・終了は「~.」ですが、Arduino で受信したデータを送り返すスケッチを動かしていると ~. も折り返されてくるだけで終了できません (^_^;) 正しい方法かどうかわからないのですが、Ctrl+c 押した後に ~. で終了できました。
$ cu -s 9600 -l /dev/ttyACM0
シリアルモニタとは動作が異なります。
シリアルモニタでは入力した文字列が「送信」ボタンを押すことで一括して送られましたが、cu では入力ごとに即送信され、たとえば「A」キーを押すとすぐに「65」が返ってきます。
そこで、数字を 3つ入力するとその値で LED の明るさを制御するようなスケッチを書いてみました。
LED は 3番ピンに繋ぎますが、最大で 20mA 程度流しますので LED 駆動用にトランジスタを 1個入れてます。まぁ毎度の回路です。電源は USB を刺しているので、Arduino の 5V 出力を利用しました。
-
const int ledPin=3;
-
void setup() {
-
pinMode(ledPin, OUTPUT);
-
Serial.begin(9600);
-
}
-
void loop() {
-
while(0 < Serial.available()) {
-
int data = Serial.read();
-
Serial.println(data);
-
-
static int val[3];
-
static int i=0;
-
val[i]=data-48;
-
i++;
-
if(2<i) {
-
int bri = val[0]*100+val[1]*10+val[2];
-
bri = constrain(bri, 0, 255);
-
Serial.print("Brightness: ");
-
Serial.println(bri);
-
analogWrite(ledPin, bri);
-
i=0;
-
}
-
}
-
}
Arduino へ書き込んだら IDE を終了します。
cu を起動し接続。数字を 3つ押すごとに LED への出力が変化します。「255」 と押すと LED が 100% で点灯します。「128」なら 50% 、「000」で消灯です。入力値が 255 を超える場合は 255 にしますが、contrain() なんて便利な関数があったので使ってみました。
受信したデータは 48 を引くことで数値に変換しています。3つデータを受けたら 3桁の数字に計算しているだけですが、このあたりがどうもエクセレントじゃないですよねぇ (^_^;)