Warning: Trying to access array offset on value of type bool in /home/cycos/cammy.co.jp/public_html/technical/wp-content/themes/cocoon-master/lib/utils.php on line 2604

Warning: Trying to access array offset on value of type bool in /home/cycos/cammy.co.jp/public_html/technical/wp-content/themes/cocoon-master/lib/utils.php on line 2604

Warning: Trying to access array offset on value of type bool in /home/cycos/cammy.co.jp/public_html/technical/wp-content/themes/cocoon-master/lib/utils.php on line 2632
組み込み系

13.Arduinoで入力を検知(digitalRead)

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);
  }
}

 

タイトルとURLをコピーしました