LED を点滅させる
1 秒点けて 1 秒消すのを繰り返します。すべての出発点です。
サンプル
実際のオープンソースプロジェクトでよくある組み合わせから選んだ Arduino スケッチです。コードは一行も変えずに、そのままシミュレーションし、そのまま PCB になります。
基礎
5本1 秒点けて 1 秒消すのを繰り返します。すべての出発点です。
2 番ピンのボタンの状態を 0 か 1 でシリアルに出し続けます。
A0 の可変抵抗を 0〜1023 の数値として読み、出力します。
analogWrite で 9 番ピンの LED を明るく暗くを繰り返します。
可変抵抗の 0〜1023 を 0〜5 V の電圧に換算して出します。
デジタル入出力
9本ボタンが押されている間だけ 13 番ピンの LED を点けます。
抵抗を付けずに INPUT_PULLUP でボタンを読みます。押すと 0 です。
ボタンは押した瞬間に何度も接触します。50 ms 待って 1 回として数えます。
押されているかではなく「今押された」瞬間を検出して数えます。
delay で止まらず、時刻を見て点滅します。同時に別の処理をするならこの形です。
音の高さと長さを配列に書いて順に鳴らします。
A0 の値をそのまま音の高さに変換して鳴らします。
複数のセンサーを読み、押された場所の音を鳴らします。
tone() は同時に 1 つだけです。noTone() で止めてから次を鳴らします。
アナログ
6本A0 の値をそのまま delay に使い、回した分だけ点滅が速く/遅くなります。
0〜1023 の値を 0〜255 に縮めて LED の明るさにします。map() を学ぶ例です。
2 つの for ループで明暗を作ります。前の Fade と同じ結果を別の書き方で。
直近 10 個の平均を取って値のばらつきを抑えます。センサーでは必ず出会う問題です。
最初の 5 秒で見た最小・最大を覚え、その範囲を基準に換算します。
読んだ値が大きいほど多くの LED を点けます。値を目で見る一番簡単な方法です。
制御文
6本読んだ値が決めたしきい値を超えたときだけ LED を点けます。if の基本です。
for 文で複数の LED を順に点けたり消したりします。ループを学ぶ例です。
ボタンが押されている間 while の中に留まり、処理を続けます。
読んだ値をいくつかの範囲に分け、範囲ごとに別の処理をします。if の連続より読みやすい形です。
シリアルモニタから a〜e を送ると、対応する LED が点きます。
LED のピン番号を配列に書き、順に使います。番号を一つずつ書かずに済みます。
プロジェクト
13本ボタンを押している間だけ 13 番ピンの LED が点きます。ここから始めましょう。
可変抵抗を回すと、サーボのホーンが同じ角度まで動きます。
照度センサーが暗いほど LED を明るく点けます。明るさは analogWrite のデューティです。
PIR センサーが動きを捉えると点灯し、最後の動きから 3 秒間そのまま点いています。
超音波で距離を測り、近いほどビープの間隔が短くなります。30 cm 以内なら LED も点きます。
ボタンを押すたびに 1 ずつ増え、4 桁の 7 セグメントに表示されます。
ボタンを押すと NeoPixel リングが青く光り、ブザーが 2 音鳴ります。
BME280 が読んだ値を 2 秒ごとにシリアルと OLED に出します。
可変抵抗を回した分だけサーボが動き、DHT22 の湿度が LCD に出ます。
リモコンの +/- で 12 V ファンを調節し、暗くなると自動で半分に落とします。
DS3231 の時刻を 4 桁表示器に出しますが、人感センサーが人を見たときだけ点けます。
加速度センサーの値を microSD の motion.csv に書き続け、LED で記録中を示します。
DS18B20 が 28 °C を超えるとリレーを入れ、超音波で距離も測ります。
文字列
14本String の作り方をひとつずつシリアルに出して見せます。
数値と文字を + でつないで 1 つの文にします。
+= で文字列の後ろに足し続けます。
文字列の長さを測り、長くなったら先頭を切ります。
文字列の両端の空白を取ると長さがどう縮むかを見せます。
文字列の中で目的の文字が何番目かを探します。
文字列から必要な区間だけ切り出します。
文字列の中の一部を別のものに置き換えます。
文字列全体を一度に大文字や小文字にします。
文字列を ==, >, < で比べるとどうなるかを見せます。数値とは違います。
文字列が特定の文字で始まる/終わるかを調べます。
1 文字が数字か文字か空白かを判定します。
シリアルで受け取った文字を数値に変えて計算に使います。入力を扱うなら必須です。
受け取った文字が数字か英字か記号かをシリアルで答えます。