2012年2月27日月曜日

複数のLED制御してみました。その2

どうも晴彦です。

前回中途半端に終わってしまっている複数LEDの制御の説明からしたいと思います。

ではではfor文の説明からしたいと思います。
「for文とは条件を満たしている限り{}内の命令をループさせる」という命令になります。
書き方としては「for(初期値;条件;加算){}」です。

今回の場合で説明すると
for (int i = 2; i>= 9; i++)
と書いているので

int i = 2が初期値
i >= 9が条件
i++が加算
という設定になっています。

まずは初期値にあたるint i = 2というのはint型(-32768から32767)の整数を
自由に入れる事が出来る変数iを作って同時にi = 2と代入しているので「iは2からですよ」となります。
iの部分は他の命令文などと同じ名前ではない限り自由に変えてもいいので
自分の好きな文字にしてみてください。


次に条件にあたるi >= 9はiが9以上(9を含む)場合は{}内の命令をループという条件になります。
条件は他にも
i > 9はiが9より大きい(9を含まない) 
i < 9はiが9より小さい(9を含まない)
i <= 9はiが9未満(9を含む)
などがありますので場面によって使い分けてみてください。

次に加算にあたるi++ですが加算というのはループ一回毎にiを変化させています。
i++は正式に書くとi = i + 1となりどちらで書いても同じ意味なります。
数字の変化としては
一度目はi =i(2)+1 =i(3) 二度目はi = i(3)+1 = i(4)と1づつ増えていきます。
他にも
i--(i = i - 1)で1づつ減らしたりi = i * 2で 2・4・8・16と倍倍に増やしたりもOKです!

すべてをまとめてみると
iは2から1づつ増えていき9以上(10)になったらループから抜けるという動きになります。

今回の{}内の命令は
digitalWrite(i,HIGH);
delay(100);
digitalWrite(i,LOW);
delay(100);

とありますので
一度目は
digitalWrite(2,HIGH);
delay(100);
digitalWrite(2,LOW);
delay(100);
二度目は
digitalWrite(3,HIGH);
delay(100);
digitalWrite(3,LOW);
delay(100);
と自動で数字が変わっていくので短い文で順番点灯が出来た!ってなります。

今回も時間が遅くなってしまったのでランダム点灯は
次回書きたいと思います。
なお、次回はランダム以外にももう少しスケッチが見やすくなるような
方法を一緒にやりたいと思います。

2012年2月21日火曜日

複数のLED制御してみました。その1

どうも晴彦です。

今日は複数のLEDを制御をしてみたと思います!
まずはじめに回路から


ん~色々と配線をしていくとどうしても見づらくなってしまいますね(^^;)
そんな時は実装図や回路図が簡単に描けちゃういいソフトがあります!
その名も「Fritzing」
このソフトを使って描くとこんな感じで出来ます。
 上の写真と違って見やすいし回路の保存などにも大変便利です。
なによりフリーのソフトなので助かります(笑)
気になる方は検索してみてくださいね。

ではでは今回の実験「複数のLED制御」
まずは前回のblinkを参考にスケッチを書いてみました!

 ~スケッチここから~
void setup(){
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
}

void loop(){
 
   digitalWrite(2,HIGH);
   delay(100);
   digitalWrite(2,LOW);
   delay(100);
   digitalWrite(3,HIGH);
   delay(100);
   digitalWrite(3,LOW);
   delay(100);
   digitalWrite(4,HIGH);
   delay(100);
   digitalWrite(4,LOW);
   delay(100);
   digitalWrite(5,HIGH);
   delay(100);
   digitalWrite(5,LOW);
   delay(100);
   digitalWrite(6,HIGH);
   delay(100);
   digitalWrite(6,LOW);
   delay(100);
   digitalWrite(7,HIGH);
   delay(100);
   digitalWrite(7,LOW);
   delay(100);
   digitalWrite(8,HIGH);
   delay(100);
   digitalWrite(8,LOW);
   delay(100);
   digitalWrite(9,HIGH);
   delay(100);
   digitalWrite(9,LOW);
   delay(100); 
}
~スケッチここまで~

今回はLED8個でスケッチを書きましたがLED1個づつ書いていくと打ち間違い
しやすくなったりして大変です・・・
(実際に間違えて同じLEDが連続でついたり光らなかったりしました_| ̄|○)

ほかにもdelay時間の手直しなど同じ修正をいっぱいしないといけなかったり大変です。
コピペや置き換えを使えば多少は修正作業は減りますがスケッチは長くなると
うまく動かなかったときのチェックが大変です。
そんな時(同じ様な処理を何度も使う)はIDEで用意されている機能を使うと
簡単に短い文で同じことが出来ちゃいます!

それが「for」 です!
実際にforを使って書き直してみたのが↓になります。

~スケッチここから~

void setup(){
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(9,OUTPUT);
}

void loop(){
   for (int i = 2; i>= 9; i++){
    digitalWrite(i,HIGH);
    delay(100);
    digitalWrite(i,LOW);
    delay(100);  
  }
 }
~スケッチここまで~

たったこれだけで同じ事になります!!

delay時間の修正もたった2ヶ所直せば動いちゃうので便利ですね(^^)

実際に動かした動画をアップしてみました。

説明していきたい所ですが時間が遅くなってしまった為
次回説明したいと思います。


2012年2月15日水曜日

LEDを点滅してみました。(Blink使用)

どうも晴彦です。

今日はArduinoを使ってLEDの点滅を試してみました。

とりあえずスケッチは
ファイル→ スケッチ例→1.basics→Blinkを使用しました。

~Blinkスケッチここから~
/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */

void setup() {                
  // initialize the digital pin as an output.
  // Pin 13 has an LED connected on most Arduino boards:
  pinMode(13, OUTPUT);     
}

void loop() {
  digitalWrite(13, HIGH);   // set the LED on
  delay(1000);              // wait for a second
  digitalWrite(13, LOW);    // set the LED off
  delay(1000);              // wait for a second
}
~Blinkスケッチここまで~
 
スケッチを上からみていくと
void setup()の中のpinModeで入力出力の設定をしています。
pinMode(13,OUTPUT)は13番のピンを出力になります。
 
void loop()の中のdigitalWriteが実際のON/OFF(HIGH/LOW)を制御しています。
digitalWrite(13,HIGH)で13番ピンに5Vが流れ
digitalWrite(13,LOW)で13番ピンは0Vになるみたいです。

間にあるdelay(1000)は括弧内のミリ秒分待ってから次の処理に進む命令みたいです。

ループの流れとしては
13番ピンON→1秒待機→13番ピンOFF→1秒待機
を1サイクルとしてループし続けるスケッチになっています。
 
Blinkを実際にArduinoに書き込んで試してみました。
回路は13番ピンからLED→抵抗→GNDに繋ぎます。
 ちゃんと1秒毎に光ったり消えたりしました。
delayの数字を変えれば点滅が早くなったり遅くなったり
1秒光らせて3秒消したりも簡単に出来ます。
 
余談ですが13番ピンは特別?でGNDピンのすぐ下にあるLって書いてあるLEDと
繋がっているので何も繋げなくてもON/OFFの動きがわかります。
 
今日の実験はあっさりと成功!

次回は複数のLEDを繋げて順番に光らせたりランダムで光らせたりしてみたいと思います。

2012年2月13日月曜日

まずはサクっと環境設定

どうも晴彦です。

では早速ArduinoIDE(総合環境)をインストール!

といってもArduinoのHPからダウンロードして解凍すればすぐに使えるので
あっという間に終了しました(^^;)

次にArduino UNOとパソコンをつなぎ認識させました。

ドライバを求められたら先ほど解凍したフォルダにある「drivers」フォルダから
選択すればOK!

ちなみにArduinoIDEは英語になります
なれれば問題ないですがおいらは苦手なので
ネットで調べていたら日本語に翻訳されたものがあったので
すぐ日本語版に変更しました(^^;)
「Arduino 日本語版」で調べるとすぐヒットするので気になる方は検索してみてね

そんな感じで環境が整ったので次から色々挑戦するぞー!


Arduino始めました

どうも晴彦です。
数年前から趣味で始めた電子工作!
キットを買って作ったりpicに手を出し挫折したりしています(汗)
最近なにかいい物ないかなと思った時
電子工作始めた時に見ていた武蔵野電波のブレッドボーダーズさんの所で
紹介されていた「Arduino」を思い出し手を出してみる事にしました。


これから色々挑戦していきたいと思うので間違っていたり

こういう方法もあるよ!なんて事があったら気軽にコメントお待ちしてます。