差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン | ||
gimmickkouza:electronic_basic:5:4_stepup [2024/06/16 19:55] – [配線図] lutamesta | gimmickkouza:electronic_basic:5:4_stepup [2024/06/20 22:39] (現在) – ★動画追加 lutamesta | ||
---|---|---|---|
行 2: | 行 2: | ||
折角なので、本章で覚えた関数を組み合わせて楽しむ応用編をやってみましょう! | 折角なので、本章で覚えた関数を組み合わせて楽しむ応用編をやってみましょう! | ||
もちろん配線図もサンプルコードも用意してありますのでご安心ください。 | もちろん配線図もサンプルコードも用意してありますのでご安心ください。 | ||
+ | |||
===== 5-4-1_switch_with_LED ===== | ===== 5-4-1_switch_with_LED ===== | ||
まずはデジタル入力と出力の組み合わせです。 | まずはデジタル入力と出力の組み合わせです。 | ||
タクトスイッチを押すことで、LEDのON/ | タクトスイッチを押すことで、LEDのON/ | ||
+ | |||
+ | {{youtube> | ||
==== 配線図 ==== | ==== 配線図 ==== | ||
行 70: | 行 72: | ||
</ | </ | ||
なんてことはないピン番号の設定です。 | なんてことはないピン番号の設定です。 | ||
- | ちなみにアナログピンを「A(番号)」と呼ぶように、プログラムの解説ではデジタルピンは一般的に「D(番号)」と呼ばれることが多いです。 | + | ちなみに**アナログピンを「A(番号)」と呼ぶように、プログラムの解説ではデジタルピンは一般的に「D(番号)」と呼ばれることが多いです。** |
慣れるためにも今後は略称で行きます。 | 慣れるためにも今後は略称で行きます。 | ||
行 82: | 行 84: | ||
== 7行目 == | == 7行目 == | ||
< | < | ||
- | pinMode(SWpib, INPUT); // | + | pinMode(SWpin, INPUT); // |
</ | </ | ||
今回はプルダウン回路です。INPUT_PULLUP(=内部プルアップ有効)しないようご注意を。 | 今回はプルダウン回路です。INPUT_PULLUP(=内部プルアップ有効)しないようご注意を。 | ||
行 152: | 行 154: | ||
もういっちょいきましょう!今度はアナログ入力とデジタル出力の組み合わせです。 | もういっちょいきましょう!今度はアナログ入力とデジタル出力の組み合わせです。 | ||
CdSセルで周囲の明るさを観測し、暗ければLEDをON、明るければOFFにする装置を作ります。 | CdSセルで周囲の明るさを観測し、暗ければLEDをON、明るければOFFにする装置を作ります。 | ||
+ | |||
+ | {{youtube> | ||
==== 配線図 ==== | ==== 配線図 ==== | ||
行 169: | 行 173: | ||
< | < | ||
- | int LED = 4; //LEDはD4 | + | int LEDpin |
int CDSpin = A0; //CdSはA0 | int CDSpin = A0; //CdSはA0 | ||
+ | int brightnessThreshold = 600; // | ||
void setup() { | void setup() { | ||
- | pinMode(LED, OUTPUT); | + | pinMode(LEDpin, OUTPUT); |
} | } | ||
行 180: | 行 185: | ||
value = analogRead(CDSpin); | value = analogRead(CDSpin); | ||
- | if (value >= 600) { // | + | if (value >= brightnessThreshold) { // |
- | digitalWrite(LED, HIGH); // | + | digitalWrite(LEDpin, HIGH); // |
- | } else { // | + | } else { // |
- | digitalWrite(LED, LOW); // | + | digitalWrite(LEDpin, LOW); // |
} | } | ||
delay(500); | delay(500); | ||
行 191: | 行 196: | ||
== 1行目 == | == 1行目 == | ||
< | < | ||
- | int LED = 4; //LEDはD4 | + | int LEDpin |
</ | </ | ||
今回LEDはD4に挿していますが、特に深い意味はないです。 | 今回LEDはD4に挿していますが、特に深い意味はないです。 | ||
(単にD4に挿せば配線図が見やすかったからというだけです…) | (単にD4に挿せば配線図が見やすかったからというだけです…) | ||
+ | |||
デジタル入出力はスケッチで正しく指定できていればどのソケットを使ってもOKです。 | デジタル入出力はスケッチで正しく指定できていればどのソケットを使ってもOKです。 | ||
- | 但し、以下のピンはデジタル入出力には使わない方が無難です。 | + | 但し、以下のDピンは__デジタル入出力には__使わない方が無難です。 |
- | * D0とD1:UARTと兼用のピン(R3の場合は絶対に使わないこと!) | + | * D0とD1:UARTと兼用のピン。UART用として使った方が無難です**(特にR3の場合、絶対にデジタル入出力には使わないほうがいいです!)** |
- | * D13:Lチカで使ったLEDと繋がっているピン | + | * D13:Lチカで使った、基板上のLEDと繋がっているピン |
/*<alert type=" | /*<alert type=" | ||
D13ソケットもLEDとつながってるので使わないほうが無難です | D13ソケットもLEDとつながってるので使わないほうが無難です | ||
</ | </ | ||
- | == 9行目 == | + | |
+ | == 3行目 == | ||
+ | < | ||
+ | int brightnessThreshold = 600; // | ||
+ | </ | ||
+ | 変数brightnessThresholdを宣言して、600の数値をを入れます。 | ||
+ | この変数を明るさの基準値として、LEDのON/ | ||
+ | |||
+ | brightnessThresholdに入れる600という数値は、[[gimmickkouza: | ||
+ | 講師の環境では、CdSは平常時で200前後、CdSを手で覆って暗くすると500~980くらい、ケータイのライトを当てると100未満の数値を示しました。 | ||
+ | なので、" | ||
+ | |||
+ | なおこの数値は環境によってブレがあります。 | ||
+ | もしみなさんが5-3のコードを実行した際に、講師の環境とはだいぶ異なる数値を計測する場合は、みなさんの環境に合わせた" | ||
+ | |||
+ | == 10行目 == | ||
< | < | ||
int value = 0; // | int value = 0; // | ||
行 209: | 行 230: | ||
CdSで読み取った値を格納する変数valueを宣言します。 | CdSで読み取った値を格納する変数valueを宣言します。 | ||
- | == 10行目 == | + | == 11行目 == |
< | < | ||
value = analogRead(CDSpin); | value = analogRead(CDSpin); | ||
行 215: | 行 236: | ||
valueの中にA0で読み取った値を入れておきます。 | valueの中にA0で読み取った値を入れておきます。 | ||
- | == 12行目 == | + | == 13行目 == |
< | < | ||
- | if (value >= 600) { // | + | if (value >= brightnessThreshold) { // |
</ | </ | ||
- | valueの数値を見てLEDをONにするかOFFにするかを判定します。 | + | valueの数値をbrightnessThresholdと比較して、LEDをONにするかOFFにするかを判定します。 |
- | 今回は「valueの数値が600以上であればON」としました。 | + | 今回、brightnessThresholdの値は600に設定しました。 |
- | この判定は、5-3.analogRead.inoによって得られた値をもとに決めています。 | + | なので、このif文の動作は「valueの数値が600以上であればON」となります。 |
- | 講師の環境では、平常時で200前後、CdSを手で覆って暗くすると500~980くらい、ケータイのライトを当てると100未満の数値を示しました。 | + | |
- | なので、" | + | |
- | しかしこの数値は環境によってブレがあります。 | + | /*<alert type=" |
- | もしみなさんが5-3のコードを実行した際に、講師の環境とはだいぶ異なる数値を計測する場合は、みなさんの環境に合わせた" | + | |
- | + | ||
- | <alert type=" | + | |
value >= 600の600も、int brightnessThreshold=600; | value >= 600の600も、int brightnessThreshold=600; | ||
- | </ | + | </ |
- | == 13行目 == | + | == 14行目 == |
< | < | ||
- | digitalWrite(LED, HIGH); // | + | digitalWrite(LEDpin, HIGH); // |
</ | </ | ||
if文がtrueであれば、LEDをONにします。 | if文がtrueであれば、LEDをONにします。 | ||
行 240: | 行 256: | ||
ONの状態で引き続きONの命令を実行する(逆も然り)ことになっても動作として問題はないというかむしろ正しいので、LEDの状態を記憶しておく必要もありません。 | ONの状態で引き続きONの命令を実行する(逆も然り)ことになっても動作として問題はないというかむしろ正しいので、LEDの状態を記憶しておく必要もありません。 | ||
- | == 14行目 == | + | == 15行目 == |
< | < | ||
- | } else { // | + | } else { // |
</ | </ | ||
else文です。valueが600未満(=周囲はある程度明るい)なら、こちらの処理に入ります。 | else文です。valueが600未満(=周囲はある程度明るい)なら、こちらの処理に入ります。 | ||
- | == 15行目 == | + | == 16行目 == |
< | < | ||
- | digitalWrite(LED, LOW); // | + | digitalWrite(LEDpin, LOW); // |
</ | </ | ||
LEDを消灯します。先述の通り周囲がずっと明るければOFFの状態を継続します | LEDを消灯します。先述の通り周囲がずっと明るければOFFの状態を継続します |