Arduinoでもっと電子工作を2
Lesson1
手始めは定番のLチカから。先ずは外部回路を使わずArduino Nanoボード単体で行います。
グローバル定義
inoファイルの文頭にグローバル定義を記述します。I/Oポート番号はプログラムコード内で指定するよりも、ここで定義した方が分かり易く後の変更も楽です。プログラム全般で共有する変数も定義します。nano Everyの場合はレジスタエミュレーションを使うと、nanoと同じくD13で内蔵LEDを指定する事が出来ます。
#define NANO_LED 13
byte gFalshCount = 0;
byte gLED_State = 0;
//Task Schedule
unsigned long gPreviousL1;
セットアップ処理
void setup() {
// put your setup code here, to run once:
pinMode( NANO_LED, OUTPUT);
gPreviousL1 = millis();
}
ループ処理
void loop() {
// put your main code here, to run repeatedly:
if( (millis() - gPreviousL1) > 100) {
//Reset task
gPreviousL1 = millis();
gFalshCount++;
if (gFalshCount > 4) {
gLED_State ^= HIGH;
digitalWrite(NANO_LED, gLED_State);
gFalshCount = 0;
}
}
}
スケッチ書き込み
- USBケーブルでパソコンとArduino Nano Everyを接続
- ボードの[Arduino megaAVR Boards]の[Arduino Nano Every]を選択
Resisters emulation:はATMEGA328を選択 - Arduino Nanoまたはその互換器の場合は
ボードの[Arduino AVR Boards]の[Arduino Nano]を選択
旧タイプのArduino Nanoはプロセッサーで[Old Bootloader]を選択 - シリアルポートを選択
アイコンの「マイコンボードに書き込む」でスケッチを書き込む
※書き込まずにエラーチェックをするにはアイコンをクリックします。
※megaAVR Boardsボードの完成度?
ビルドしたバージョンは1.8.7ですが、以前のバージョンで制御が働かないIOピンがありました。Everyでビルドする場合は常に最新版にアップデートしておく事をお勧めします。
« Arduinoでもっと電子工作を | トップページ | Arduinoでもっと電子工作を3 »
「電子工作」カテゴリの記事
- Arduinoでもっと電子工作を11(2021.08.24)
- Arduinoでもっと電子工作を10(2021.06.22)
- Arduinoでもっと電子工作を9(2021.06.06)
- Arduinoでもっと電子工作を8(2021.05.18)
- Arduinoでもっと電子工作を7(2021.05.15)
コメント
この記事へのコメントは終了しました。
「C-TypeサイズMM/DCCコントローラ」のご返答ありがとうございます。
私も、Arduinoのプログラミングができるようになりたいと思っているので、今後の記事を楽しみにしています。
しかし、
gLED_State ^= HIGH
この演算子でつまづきました。
すみません。
0.5秒ごとに出力を反転しているのかな、と理解しているのですが、なれていないもので・・・
いままでC言語などをかじったことがあるのですが、プログラミングの何につまづいたかを思い出すと、
・演算子の意味
・変数の型の宣言が必要なこと
・ポインタの概念(Arduinoでは必要ないようですね)
・プログラムがループしている範囲を追いかけること
・つまり全体として、プログラムが、各行で何をしているのか、を追い切れていない
・プログラムのサイズを小さくする目的で、複雑な論理構造がとられると、もっと追いきれなくなる
Arduinoの言語はC言語などに比べると、簡略化されているようですが、それでもなおスムーズに習得するのは難しいようです。
結局、N88BASICから脱しきれていない・・・
投稿: Märklin_V200 | 2021年5月 4日 (火) 15時25分
Märklin_V200さん、お世話になります。
すみません、詳細は結構ブラックボックスにして、アウトラインを紹介出来たらと思いながら記事を書き進めています。
^=はXOR演算子です。2進で表現すると
0b00000000 ^= 0b11111111 で、0b11111111に変わります。もう一度XORを捕ると元の0に戻る事でLチカさせます。
変数の型は、BASIC等でバリアント変数を多用するとバグの元になるので、私は型定義必須の言語の方が好みです。バリアント変数って結局すべての型を内部に持っていて都合よくコンパイラしてるだけなんで無駄にコードが膨らんでマイコン向きじゃ無いですね。
YaasanさんのDCCライブラリはポインタが使われていたと思います。このシリーズで現れない事を祈ります。
ループの範囲ってのは肝で、此処に混乱を来さない記事を心がけないとならないと思っています。今後ともよろしくお願い申し上げます。
投稿: twaydcc | 2021年5月 4日 (火) 22時45分