「Arduinoをはじめよう」その4 - プッシュボタンを押したらLEDが点灯、もう一回押したら消える
前回まではプッシュボタン押したときに点滅し続ける、離したら消える、ってを作ってました。今回は一回プッシュボタン押したら点灯し続け、もう一回押したら消える。また押したら点灯する。ってのを作ります。
コードは以下。
// ボタンを押したら点灯、もう一回押したら消える(はず、その3) // ボタンの状態が変化(オフからオン、オンからオフ)したときのみstateを変更する // バウンシング(ボタンが完全に押されていない状態)が生じるが50ms遅延させることで問題を解消 const int LED = 13; const int BUTTON = 7; int val = 0; // 入力ピンの状態を記憶しておく用 int old_val = 0; // 前回の入力ピンの状態を記憶 int state = 0; // LEDの状態(0ならオフ、1ならオン) void setup() { pinMode(LED, OUTPUT); pinMode(BUTTON, INPUT); } void loop() { val = digitalRead(BUTTON); // ボタンの状態が変化したか? if ((val == HIGH) && (old_val == LOW)) { state = 1 - state; delay(50); // バウンシング解消用の遅延 } old_val = val; if (state == 1) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } }
ボタンが完全に押されていない、中途半端な状態を「バウンシング」っていうらしい。
それによって挙動がちょっと変になる時がある。
1度押したら着く↔1度押したら消える
の繰り返しになって欲しいのにそうならなかったり。
で、10msから50msの遅延を入れると解消するって書いてあったんだが、それでもうまくいかない時がある。
なんでかはわからないからまあ放おって置こう。そのうちわかるだろう。
「Arduinoをはじめよう」その3 - プッシュボタンをつけてLEDをコントロール
ただの電子工作っぽいが、この間作ったものにプッシュボタンをつけてLEDをコントロールしてみる。
オームの法則の復習。
R(抵抗) = V(電圧) / I(電流) V(電圧) = R(抵抗) * I(電流) I(電流) = V(電圧) / R(抵抗)
「Aruduinoをはじめよう」の中ではこの数式だけ覚えれば良いって言っとります。
プッシュボタンを使ってLEDをコントロール
さて、やってみます。
回路はこんな感じ。って写真取ったけどさっぱりわからんね。
回路用のサービスあったからそこで作ってみた。
スケッチはこんな感じ。
// ボタンを押されている間、LEDを点灯する const int LED = 13; const int BUTTON = 7; void setup() { pinMode(LED, OUTPUT); pinMode(BUTTON, INPUT); } void loop() { boolean val = digitalRead(BUTTON); // 入力はHIGH(ボタンが押されている状態)か? if (val == HIGH) { digitalWrite(LED, HIGH); } else { digitalWrite(LED, LOW); } }
できた。
抵抗の色の付いた線の意味ってなに?
抵抗にもいろいろ種類があるみたいで、抵抗に書かれている線の色で判別できるらしい。
多くて覚えきれる気がしないがまあこのサイトに載っている感じ。
カラー抵抗早見表!
↓この本で勉強してます。
Arduinoをはじめよう 第3版 (Make:PROJECTS)
- 作者: Massimo Banzi,Michael Shiloh,船田巧
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/11/28
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (4件) を見る
「Arduinoをはじめよう」その2 - Lチカコードを読み解いてみる
先週書いたコードを読み解いてみる。
俺がわからないとことか、Arduino特有の箇所だけ。
以下、先週のコード。
const int LED = 13; //LEDはデジタルPINの13に接続 void setup() { pinMode(LED, OUTPUT); //デジタルPINを出力に設定 } void loop() { digitalWrite(LED, HIGH); delay(1000); digitalWrite(LED, LOW); delay(1000); }
Arduinoではコードのまとまりのことを「スケッチ」と呼ぶらしい。
スケッチには必ずsetup()
とloop()
がある。
setup()
はスケッチが動き始めたときに一度だけ動くもの。
loop()
はその後に繰り返し実行されるもの。
const
はプログラム実行中に変更されない性質を持つ変数。
pinMode()
はピンをどう設定すべきかを伝えるもの。
って感じかな。
Robi 第3号
はい、デアゴスティーニの「Robi」3号届きました。早速作って見ます。
2号まで作ったのがこちら。
まだ頭の半分って感じかな。
3号でもうちょっと形にできるのかなー、と思いきや。。。
なぜか今回は右胸&右腕らしいっす。
先に頭完成させてくれや。。。モヤモヤする。
まあ、それが最後まで買わせる作戦なんでしょうね。こんな中途半端な状態で置いとけないですもんね。
さて、作ってみました。
腕と胸をネジ2本で止めます。
で、終わり。。。
。。。楽しくない!!!
これだけで2000円は高い!!!
しかも、今回の分に同封されてたパーツも余ってるし。。。
どうしよう。。。でも中途半端で終わらせたくないしな。。。続けるしかないか。。。
と、まんまに戦略にはまる私です。
でもまあいいんです、完成したら楽しいだろうし、子供の身近にロボットいるって、子供の未来のためにも良い影響になるかもしれないし。
ってことで、4号はまた日を開けて購入します。
久しぶりに「Aruduinoをはじめよう」を読んでみる
ちゃんとやらないとな、ブログ。
ってことで、前に買ったと言っていた本。
まだ受け取れてないんす。。。
会社に送ればよかった。
ってことで、結構前に「Arduinoをはじめよう」を
買っていたのでそれを参考に電子工作してこうかなと思います。
(もう第3版出てるんだ。。。俺が持ってるのは第2版)
いつも勢いで本買うのは良いんだけど、1/3くらいで飽きてしまう自分。
今回は最後までやるぞ!!!!!ゆっくりな。。。
さっそくはじめよう。
前もって言っておくと、このブログではArduino学びたい人のために
懇切丁寧に説明するつもりもなく、自分が楽しんで作ったものを
ただ垂れ流したいだけなので、ちゃんと学びたい人は本でも買って
自分でやってください。
ってことで。
って思ったらweb版があるじゃん。
せっかくだからこれ使ってみよう。
インストール完了したらメニューにこんなに追加される。
よしじゃあ、つないでみようかなー、って思ったらUSBケーブルね~し!!!
昔あんなに持ってたのに。。。あ、見つけた。良かった。
壊れて無くて良かった。。。
本にアクチュエータ?って単語出てきたけど、、、なんだ?
アクチュエータ(Actuator)は、入力されたエネルギーを物理的運動に変換するものであり、機械・電気回路を構成する機械要素である。 能動的に作動または駆動するもの。
ふーん。
センサで受信、それに判断を下すのがマイコン、反応を外に出すのがアクチュエータ、と。ふむふむ。
Lチカ
const int LED = 13; //LEDはデジタルPINの13に接続void setup() {pinMode(LED, OUTPUT); //デジタルPINを出力に設定}void loop() {digitalWrite(LED, HIGH);delay(1000);digitalWrite(LED, LOW);delay(1000);}