dijitalWriteやanalogWriteによるポート(ピン)からの出力はおおよそできましたので、いよいよポート(ピン)に入ってくる信号をキャッチする方法にチャレンジします。
入力もArduinoではデジタルです。電気が来ているのか?来ていないのか?
電気が来ている場合はポート(ピン)は5Vか3.3V(HIGH)になり、来ていない場合はLOWになるので、検査したいポートがHIGHなのかLOWなのかを判定すればいいだけです。
とりあえずやってみる
例のごとく乱暴です。
まずはジャンパーワイヤーを1本取り出し、片方をArduinoの5Vのコネクタに差し込んでおきます。
もう片方はブランブランしておきます。
プログラム
とりあえずこのプログラムをIDEにコピペしてUNOで動かします。
void setup() { pinMode(7,INPUT) ; //7を入力 pinMode(13,OUTPUT) ; //13を出力 } void loop() { int sig=digitalRead(7) ; //7の状態をみる if(sig == HIGH){//5Vだった digitalWrite(13,HIGH) ;//LEDピカ }else{//5Vじゃない digitalWrite(13,LOW) ;//LEDプツ } }
このプログラムは、7番ピンを入力にセットして13番ピンを出力にセットしています。
つまり、7番ピンのHIGHかLOWを検知して動くプログラムです。
とにかく動かしてみましょう!
プログラムが動いたら7番を刺す!
プログラムの転送が無事に終わったら、写真のようにブランブランしていたもう片方を7番のコネクタにさしてみます。
みごとLEDが光っています。思惑通りです。
適当な時間たったら抜いてみる
抜いてみましたが….LEDは消えません。
しかし…じっと眺めていてください!そのうちプツっと切れます。
これは、高速にloopプログラムが回っているせいでLOWを検知するまでHIGHを検知した名残があるせいです….(すみません…電気的にはもう少しちゃんと説明できるのですが、とりあえず今日はこのあたりで納得しておいてください)
HIGHになったら音を鳴らしてみる
void setup() { pinMode(7,INPUT) ; //7を入力 pinMode(13,OUTPUT) ; //13を出力 } void loop() { int sig=digitalRead(7) ; //7の状態をみる if(sig == HIGH){//5Vだった digitalWrite(13,HIGH) ;//LEDピカ tone(11,440) ;//LEDピカ }else{//5Vじゃない digitalWrite(13,LOW) ;//LEDプツ noTone(11); } }
HIGHになったらピコっと音を鳴らしてみる
void setup() { pinMode(7,INPUT) ; //7を入力 pinMode(13,OUTPUT) ; //13を出力 } void loop() { int sig=digitalRead(7) ; //7の状態をみる if(sig == HIGH){//5Vだった digitalWrite(13,HIGH) ;//LEDピカ tone(11,440) ;//LEDピカ delay(100) ; tone(11,880) ;//LEDピカ delay(100) ; }else{//5Vじゃない digitalWrite(13,LOW) ;//LEDプツ noTone(11); } }