Arduino UNO R4を入手したので基本のLチカ(LED点滅)をいくつかの記述方法で試してみました。
UNO R4 入手後、まずはLチカで簡単な稼働確認と思って PC とUSB接続して、サンプルスケッチを書き込みました。
なんの問題も無くLED点滅。これだけではつまらないので、delayを使用したいろいろな記述方法でLチカを試してみました。R3でも同様の内容を行ってますがR4でも同じことを行ってみます。最後はレジスタ制御でのピン操作も試してみました。
delayを使った基本のLチカ
void loop() { digitalWrite(13, HIGH); delay(100); digitalWrite(13, LOW); delay(100); }
良く見かけるソースかと思います。単純にdelayを使ってLEDのOn/Offを繰り返しいるソース。サンプルスケッチを微妙に変えてます。R4でもオンボードLEDは13pinに割り当てされているよう。
IFを使った記述①
void loop() { if (digitalRead(13) == 0) digitalWrite(13, HIGH); else digitalWrite(13, LOW); delay(100); }
digitalReadでピン状態を確認して、13ピンの出力を反転してます。記述が一行減りました。
IFを使った記述②
void loop() { digitalWrite(13, digitalRead(13) == LOW ? 1 : 0); delay(500); }
条件演算子を使用した記述です。内容はIF分と同じ。13ピンの状態を確認して、出力を反転してます。さらに1行減って、2行でLチカできます。
変数使用①
bool LED; void loop() { LED = 1 - LED; digitalWrite(13, LED); delay(150); }
変数「LED」を使用して13pinの出力を反転させてます。
変数使用②
bool LED; void loop() { LED = !LED; digitalWrite(13, LED); delay(2000); }
論理否定で反転する記述方法。
void loop() { digitalWrite(13, !digitalRead(13)); delay(500); }
論理否定を使えばもう少し簡素に記述できます。
ここまでは R3 でもR4でも同様の記述で動作します。
UNO R4のレジスタ制御
void loop() { R_PORT1->PODR ^= 0x800; delay(50); }
R4のみの記述方法。オンボードLEDのLチカです。R3ではこの記述は使えません。RA4M1のレジスタを直接制御している記述。ここまでくると Arduino 使う意味があまりなくなりそう。また別途記事にしますがR3同様に処理時間はやはり高速になりました。
R4のテスト稼働をするついでにいくつかのLチカを記述を試してみました。またR3との速度比較とかしてみたいですね。
今回、R4を使うついでにIDEのバージョンを 1.8.13 ⇒ 2.2.1 にしたのですが、ソースを「HTML形式でコピー」する機能が無くなってました。重宝していたので残念です。
▼delayを使用しないLチカはこちら▼
▼参考サイト▼
コメント