1.はじめに
Arduinoのコーディングで、プロトタイプの次の段階で使いそうな記述方法をまとめた。
2.開発環境
(1)VSCode設定
(2)プロジェクトのディレクトリ構成
/ | プロジェクト・ルート |
src/ | ビルド対象でIDEに表示させないソースコード。再帰検索OK |
data/ | ビルド対象にせず、スケッチに含めたいもの。 |
(9)その他
3.C++
(1)使える型の一覧
(2)コーディング・テクニック
C++の書き方
- C++でクリーンなコードの書き方 #オブジェクト指向 - Qiita
- C++ ヘッダとソースでファイルを分ける 応用編 #C++ - Qiita
- Arduino で C++クラスを学ぶ (1) – クラスの宣言 | meyon's STUDY
- プリプロセッサとインクルードガードについて #C++ - Qiita
- 実践C++入門講座 | Theolizer®
- privateメンバへアクセスするコードの調査 #C++ - Qiita
関数呼び出し
- Arduino(C++11)で関数呼出の引数に配列を直接指定する #C++ - Qiita
- Arduino(C++11)でコールバック関数を無名関数として書く(名前空間の汚染について) #ラムダ式 - Qiita
データ構造
周辺機能
- RS485
- SPI
- CAN
4.RS-485通信
送受信の自動切り替えの書き方です。
ATmega328
送受信ピンの制御には、ハードウェア割込を使います。
#define TX_EN 3 void setup() { // UARTの送信完了後の割込を有効にする UCSR0B |= (1<<TXCIE0); // フラグに使う指定のピンモードを出力に変更 pinMode(TX_EN , OUTPUT); // UARTを初期化 Serial.begin(9600); } // UARTの送信完了後の割込 ISR (USART_TX_vect) { //送信終わったらLにする digitalWrite(TX_EN , LOW); } void loop() { byte data[100]; // フラグH digitalWrite(TX_EN , HIGH); // データを送信 Serial.write(data,100); delay(1000); }
ATmega32u4
送受信ピンの制御には、UNOとは異なったハードウェア割込を使います。
#define TX_EN 3 void setup() { // UART1の送信完了後の割込を有効にする UCSR1B |= (1<<TXCIE1); // フラグに使う指定のピンモードを出力に変更 pinMode(TX_EN , OUTPUT); // UART1を初期化 Serial1.begin(9600); } // UART1の送信完了後の割込 ISR (USART_TX_vect) { // H→L digitalWrite(TX_EN , LOW); } void loop() { byte data[100]; // L→H digitalWrite(TX_EN , HIGH); // データを送信 Serial1.write(data,100); delay(1000); }
Teensy
- 参考
送受信ピンの制御は、設定しておくと勝手にやってくれます。
#define TX_EN 3 void setup() { // フラグに使うピン番号を、事前に指定しておきます SERIALHW.transmitterEnable(TX_EN); // フラグに使う指定のピンモードを出力に変更 pinMode(TX_EN , OUTPUT); // UART0を初期化 Serial1.begin(9600); } void loop() { byte data[100]; // L→H。送信終わったら自動的にLにしてくれます digitalWrite(TX_EN , HIGH); // データを送信 Serial1.write(data,100); delay(1000); }
Raspberry Pi PICO
#define TX_EN 3 void setup() { // フラグに使う指定のピンモードを出力に変更 pinMode(TX_EN , OUTPUT); Serial1.begin(9600); } void loop() { byte data[100]; // L→H digitalWrite(TX_EN , HIGH); // データを送信 Serial1.write(data,100); // 送信完了待ち Serial1.flush(); // H→L digitalWrite(TX_EN , LOW); delay(1000); }
8.マイコンボード固有
(1)共通・ハードウェア割込
(2)Pro micro
(3)Teensy
ピン配置(pinout)