ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

arduinoコミュの質問:静電センサーの2つを使うコードの書き方

  • mixiチェック
  • このエントリーをはてなブックマークに追加
まだarduinoを初めて間もなく、わからないとこがあるので
よろしくお願い致します。

以下のサイトを参考にしたのですが、
http://kousaku-kousaku.blogspot.com/2008/10/arduino.html

やりたいことは
抵抗器を使って2つのタッチセンサーをトリガーにして
それぞれLEDを2つ光らせようとしました。
しかし、1つだけ光らせようとするとうまくいくのに
2つ光らせようとすると光りません。

きっと、コードが間違ってると思うのですが
どこが間違っているかわからないので、
よろしくお願いします。

ーーーーーーーーーーーーーーーーーーーーー

int f=0;//フィルタ用変数
int g=0;
void setup(){
//モニタリングのためシリアル通信開始
Serial.begin(9600);
//5番ピンをデジタル出力
pinMode(5,OUTPUT);
//6番ピンをデジタル入力
pinMode(6,INPUT);

//9番ピンをデジタル出力
pinMode(9,OUTPUT);
//10番ピンをデジタル入力
pinMode(10,INPUT);

//LED点灯用に2,3番ピンをデジタル出力
pinMode(2,OUTPUT);
pinMode(3, OUTPUT);
}

void loop(){
//静電容量変化量の変数を用意
int a=0;
int b=0;
//5,9番ピンをHIGHで出力
digitalWrite(5, HIGH);
digitalWrite(9, HIGH);
//指が触れたとき5,9番ピンがHIGHになるまでをカウント
while (digitalRead(6)!=HIGH){
//カウントする
a++;
}
while (digitalRead(10)!=HIGH){
b++;
}
delay(1);
//5,9番ピンをLOWにする
digitalWrite(5, LOW);
digitalWrite(9, LOW);
//値を滑らかにするフィルタ式
f+=(a-f)/2;
g+=(b-g)/2;

//モニタリング:フィルタ値を出力
Serial.println(g);

//LED点灯のプログラム
if(g>4){//値が4より大きい場合点灯
digitalWrite(2,HIGH);
}
else{ //それ以外消灯
digitalWrite(2,LOW);
}

if(f>4){//値が4より大きい場合点灯
digitalWrite(3,HIGH);
}
else{ //それ以外消灯
digitalWrite(3,LOW);
}

}

コメント(4)

面白い作例ですね。
銅版をコンデンサにみたてて、充電にかかる時間を計っています。
(手などを近づけるとコンデンサとしての容量が増えるため充電にかかる時間も増えます)

いま、スケッチ内容は以下のようになっています

ピン5,9をHIGH出力→ピン6がHIGHになる時間をカウント→ピン10がHIGHになる時間をカウント→ピン5,9をLOW出力

これでは、ピン10側の充電にかかる時間が正確に測れません。
以下のように変更してはいかがでしょうか。

ピン5をHIGH出力→ピン6がHIGHになるまで時間をカウント→ピン5をLOW出力
→ピン9をHIGH出力→ピン10がHIGHになるまで時間をカウント→ピン9をLOW出力
ゆっくり書いていたらコメントかぶりました
しょーんさんのおっしゃるように1つのループで二つとも監視してもうまくいきそうですね

あと、できたらモニタ部分では、変数a,b,f,gを全部モニタしましょう。そうすると何が起きてるか分かりやすくなると思います。

Serial.println("----");
Serial.println(a);
Serial.println(b);
Serial.println(f);
Serial.println(g);
なるほど、コンデンサの仕組みを利用してたんですねw
今知りましたw

みなさんの通りやってみたらうまくいきました!ありがとうございます!!

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

arduino 更新情報

arduinoのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング