2

私はいくつかのTeensyとTeensy++でarduinoの世界を掘り下げ始めたところですが、これまでのところ、複数のボタンから入力を取得しようとしたときに得た非常に奇妙な動作を除いて、うまくいきました。

ほとんどの場合、私が持っているのは、teensy ++、LCDディスプレイ、および3つのボタンだけです。私が持っているコードは、3つのボタンすべての状態を読み取り、結果を0または1の画面に投稿します。これ以上簡単なことはできません。そのため、機能しない理由を理解するのに苦労しています。

ボタン1つで、上記は正常に機能します。しかし、他のボタンの1つをミックスに追加するとすぐに、正しく機能する代わりに、ボタン1を押すと、ボタン1とボタン2の両方が1に変わります。ボタン2は何もしません。ボタン3も何もせず、他のボタンが押されても1になりません。

私の最初の傾向は、私の不器用なお尻がボード上のはんだでいくつかの痕跡を埋めたことでした。私は新しいものの1つをつかみ、それを新たにはんだ付けし、すべての接触をチェックして、それが良かったことを確認しました。私が通常使用するブレッドボードワイヤーを使用する代わりに、ワイヤーが問題にならないことを確認するためにソリッドコアワイヤーを使用しました。また、故障した場合に備えてブレッドボードを交換しました。

同じ問題。これが機能しない原因が何であるかわかりません。グルの一人が急襲して、なぜそれがまったく機能していないのか理解できないので、私は完全に間違ったことをしていると私に言ってくれることを願っています

これは私のコードです:

#include <LiquidCrystal.h>

LiquidCrystal lcd(5,6,7,8,9,10);

void setup(){

pinMode(13,INPUT);pinMode(21,OUTPUT);  //Button one
pinMode(12,INPUT);pinMode(20,OUTPUT);  //Button two
pinMode(11,INPUT);pinMode(19,OUTPUT);  //Button three

digitalWrite(21,HIGH); //Power buttons
digitalWrite(20,HIGH);
digitalWrite(19,HIGH);

lcd.begin(16,4);

}

int resp1 = 3;  //Variables for responses 
int resp2 = 3;
int resp3 = 3;

void loop(){

 resp1 = digitalRead(13); //Read button 1
 resp2 = digitalRead(12); //Read button 2
 resp3 = digitalRead(11); //Read button 3

 //Print it to screen
 lcd.clear();
 lcd.print("Mike's Devboard");
 lcd.setCursor(0,1);
 lcd.print("Btn 1:");
 lcd.print(resp1);
 lcd.print("    Btn 2:");
 lcd.print(resp2);
 lcd.setCursor(0,2);
 lcd.print("Btn 3:");
 lcd.print(resp3);
 delay(48);
}    

何か案は?

4

3 に答える 3

1

ボタンピンのコメントを読むと、各ボタンの両側をチップの言及されたピンに他に何も接続しないでください(つまり、抵抗などはありません)。

そうなったら

pinMode(13,INPUT);pinMode(21,OUTPUT);
digitalWrite(21,HIGH); //Power buttons

ボタンが開いている限り、ピン 21 を HIGH に駆動し、ピン 13 をハイ インピーダンス モードにします。これは、入力ピンが基本的に「フローティング」であることを意味します。環境の影響により、入力ピンがトグルされます。基本的にランダム入力です。

ボタンを閉じると、入力ピンが HIGH に接続され、強力な HIGH も出力されます。

何が必要:

ボタンが開いているときと開いているときの両方の状況で、入力ピンを定義済みの「強い」状態にする必要があります。

次のようにできます。

pinMode(13,INPUT); digitalWrite(13, HIGH);  // input pin with internal pullup enabled
pinMode(21,OUTPUT); digitalWrite(21,LOW);   // other pin to ground

これで、ボタンの片方の足が常に LOW (地面) になります。ボタンが開いているとき、入力ピンは CPU の内部抵抗によって HIGH に「プルアップ」されます。ボタンが閉じられると、いくらかの電流が HIGH から抵抗器を通ってボタンを通り、まだ LOW である他のピンに流れます。これにより、入力ピンも LOW に駆動されます。

詳細については、チュートリアルのデジタル ピンを参照してください。

注目すべき副作用の 1 つ:

入力が「否定」されます。ボタンが開いている場合は HIGH (1)、ボタンが閉じている場合は LOW (0) が読み取られます。

于 2012-04-04T20:14:44.957 に答える
0

loop() 関数の最後でボタンの状態を維持するために使用している 3 つの変数 resp1、resp2、および resp3 の値をリセットする必要があります。

于 2012-04-04T06:15:25.183 に答える
0

関数 digitalRead() は、TRUE、FALSE、または 1,0 に対応する HIGH または LOW を返すことに注意してください。ところで、値をリセットする必要はありません。ループごとにボタンの状態に再設定されます。

于 2012-04-04T19:57:41.127 に答える