010コーヒー
Arduino楽しー!
YouTube
作成した動画を友だち、家族、世界中の人たちと共有
楽しすぎてスケッチしまくり。
リンク
今回もこちらの書籍を参考に勉強。平易な言葉で書いてくれていて、ズブ初心者でもめちゃ分かりやすい。素人必携。
リンク
Example 04 PMWで明るさをコントロール
今回はその中のPWMを使って、LEDをイイ感じにコントロールします。
PWMは「Pulse Width Modulation」の略。
フェードインとフェードアウト
LEDのフェードインとフェードアウトがすごく美しい。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//Example 04 : LEDのフェードインとフェードアウト //(スリープ状態のMacのように) const int LED = 9; //LEDが接続されたピン int i = 0; //カウントアップとダウンに使用 void setup() { pinMode(LED,OUTPUT);// LEDピンの出力に設定 } void loop() { for(i = 0; i < 255; i++) {//0から254までループ(フェードイン) analogWrite(LED,i); //LEDの明るさをセット delay(10); //10ミリ秒停止 analogWrite()は一瞬なので //これがないと変化が目に見えない } for(i =255; i > 0; i--){//255から1まで(フェードアウト) analogWrite(LED,i); delay(10); } } |
「//(ダブルスラッシュ)」の後ろに全角のスペースが入っていて、エラーがいっぱい出てしまいましたが、なんとか完成。
「stray ‘\343’ in program」 といったエラーが出る場合は、全角のスペースや記号などが入っている時に出るそうです。
YouTube
作成した動画を友だち、家族、世界中の人たちと共有
010コーヒー
おぼろげな明滅がたまりません…
Example 05 スイッチでコントロール
同じく参考図書の例題5にチャレンジ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
//Example 05: ボタンを押すとLEDが点灯し、 //ボタンから指を離した後も点いたままにする //バウンシングを解消する簡単な方法を取り入れる //ボタンを押したままにすると明るさが変化する const int LED = 9; //LEDが接続されたピン const int BUTTON =7; //プッシュボタンが接続されたピン int val = 0; //入力ピンの状態がこの変数(val)に記憶される int old_val = 0; //valの前の状態を保存しておく変数 int state = 0; // LEDの状態(0ならオフ、1ならオン) int brightness = 128; //明るさの値を保存する unsigned long startTime = 0; //いつ押し始めたか? void setup() { pinMode(LED,OUTPUT); //ArduinoにLEDが出力であると伝える pinMode(BUTTON,INPUT); //BUTTONは入力に設定 } void loop() { val = digitalRead(BUTTON); //入力を読みvalに新鮮な値を保存 //変化があるかどうかをチェック if((val == HIGH)&&(old_val) == LOW){ state = 1 - state; //オフからオンへ、オンからオフへ startTime = millis(); //millis()はArduinoの時計 //ボードがリセットされてからの時間を //ミリ秒(㎜)単位で返す //(最後にボタンが押された時間を記憶) delay(10); } //ボタンが押し続けられているかをチェック if((val == HIGH)&&(old_val == HIGH)){ //500ms以上押されているか? if(state == 1 &&(millis() - startTime) > 500){ brightness++; //brightnessに1を足す delay(10); //brightnessの増加が早くなり過ぎないように if (brightness >255){ //255が最大値 brightness = 0; //255を超えたら0に戻す } } } old_val = val; //valはもう古いのでしまっておく if (state == 1){ analogWrite(LED,brightness); //現在の明るさでLEDを点灯 }else{ analogWrite(LED,0); //LEDをオフ } } |
一応記載の通りに書いたはずなんですが、ここから配線の図解がなくなります。
「難しく感じるならば、以前の回路を二つ並べて作れば…」と助け船はあるものの、
010コーヒー
それくらい1個にまとめたるわい!
…と謎のプライドが邪魔してこの始末。
「ArduinoにはGND(グランド)がふたつあるから…」とか
「ブレッドボードにプラスとマイナス(グランド)があって、そこに誘導すれば…」とか
ひとつにまとめられるようなヒントはあるのですが、
なんかスイッチが作動したりしなかったり、
手を近づけるだけでLEDが点灯・点滅したりと、これまでにない不具合が頻発…
なんならノートPCに触れるとLEDが点いたりします(;’∀’)
スピーカーを作っていたときも、手で触れている時だけ音が鳴ることがあったから、
なんか自分から電気がでているのか…
PONさん
今の知識じゃ原因わからないから、先に進みましょう。
リンク
リンク
リンク
PONさん
こういうスターターキットを買うとお得です。
コメント