eepoo が 2021年03月06日19時54分40秒 に編集
初版
タイトルの変更
シリアルモニター
タグの変更
シリアルモニター
Serial
monitor
Arduino_Pro_Mini
Arduino
メイン画像の変更
記事種類の変更
製作品
本文の変更
マイコンのシリアル出力をそのまま受け取って表示するハードウェアがあると便利かも、、 と思って作ってみました。    藤色の部品はボトムカバー。pro miniは締結用の穴などないので、ボトムカバーに対しては厚めの両面テープで止めています。 使ったマイコンは Pro mini 168 5V 買ったときには168と328があるとは知らず、適当に買ったら、168で Adafruitのライブラリを使うとメモリが足りず動かなかったので、軽量なライブラリを探し、SSD1306Ascii にしました。 ■パーツリスト pro mini 168 5V ピンソケット SSD1306( OLED 128x64 モノクロ I2C display) タクトスイッチx2 (キャップは適当に) タクトスイッチ用基板(ユニバーサル基板を加工) 筐体 3D CADで設計し 3D printerで出力 ■結線 pro mini SSD1306 A4 SDA A5 SCL VCC VCC GND GND タクトスイッチはそれぞれ片方を GNDに 片方を D2,D3に接続。 ピンソケットはDTR,TX,RXなどの方に 6pin のピンソケットを立てる。 ソースは以下の通り ```シリアルモニター bool halt = false; #define HALTPIN 2 #define BRCHANGE 3 unsigned long nextButton = 0; #define CMASK 200 #define LED 13 #define VER 1.0 unsigned long currBR = 9600;//9600を115200をトグル #include <Wire.h> #include "SSD1306Ascii.h" #include "SSD1306AsciiWire.h" #define I2C_ADDRESS 0x3C SSD1306AsciiWire oled; void setup() { Serial.begin(currBR); Wire.begin(); Wire.setClock(400000L); oled.begin(&Adafruit128x64, I2C_ADDRESS); oled.setFont(System5x7); oled.setScrollMode(SCROLL_MODE_AUTO); pinMode(HALTPIN, INPUT_PULLUP); pinMode(BRCHANGE, INPUT_PULLUP); pinMode(LED, OUTPUT); digitalWrite(LED, HIGH); oled.print("Serial Monitor ver:"); oled.println(VER); } void loop() { if (Serial.available() > 0) { // 受信したデータが存在する char aByte = Serial.read(); // 受信データを読み込む if (!halt) { oled.print(aByte); } } if (digitalRead(HALTPIN) == LOW) { if (millis() > nextButton) { halt = ! halt; if (!halt) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } nextButton = millis() + CMASK; } } if (digitalRead(BRCHANGE) == LOW) { if (millis() > nextButton) { switch (currBR) { case 9600: currBR = 115200; break; case 115200: currBR = 9600; break; } Serial.end(); oled.print("***** "); oled.println(currBR); Serial.begin(currBR); nextButton = millis() + CMASK; } } } ``` 見てわかる通り、D3に繋いだ方のタクトスイッチを押すことでシリアル通信のスピードを変更します。今回は 9600と115200をトグルするだけにしましたが、容易に増やせますね、、 D2に繋いだボタンを押すと表示更新を止めます。 見たいところで止められる機能というわけです。 わかりやすいところにLEDを引き出しておくべきでしたが、まぁ、スペースもないことで、pro miniの オンボードLEDの光が隙間から見えるので、これでモニター中かストップ中か判別することにします。 接続は GND,VCCと対象のマイコンのTXをこちらのRXに繋ぐだけです。 対象のマイコンが Serialに書き出したものをせっせと表示します。 このライブラリはスクロールモードというのがあって、すごく簡単にスクロールしてくれるので楽でした。  3Dプリントの仕上がりが雑で恥ずかしいです。 送信側は Serial.println(millis()); delay(1000); という感じです。 ちなみに、 FTDIボードをこんな風にさしてFWのバージョンアップを行えます。  最初FTDIボードを裏返しに差し込んで、書き込めないなぁ~ と悩みました。 裏返しに差し込んでも壊れないということがわかりました。