私はメンブレンキーパッドのために私自身の機能をコーディングしようとしているプロジェクトに取り組んでいます。私は16キー状態がuint16_t
変数に格納されるようにしたいので、変数は1つだけです。コードがコンパイルされます。4x4メンブレンキーパッドが予期しないシグナルを与える
問題は、キーの状態が正しく表示されないことです。 1キーを押すと、さらに多くのキーが押されていることがわかります。物事に触れることなくキーが押されていることも表示されます。
キーパッドのピン5-8は、PORTD、Nanoの4-7ピンに接続されています。 キーパッドの1〜4ピンはPORTBピン、Nanoピン0-3ピンに接続されています。
これはコードです。
uint16_t keys = 0;
void setup() {
// put your setup code here, to run once:
DDRD |= 0xF0; //Set bit 4-7 as output on PORTD
DDRB &= 0xF0; //Set bit 0-3 as input on PORTB
Serial.begin(9600);
}
void loop() {
getKeys(&keys);
Serial.println("-----------------------");
delay(100);
}
void getKeys(uint16_t* keys){
*keys = 0; //Clear keys variable
for(int rows = 0; rows < 4; rows++){ //Loop through every row
PORTD &= 0x0F; //Turn pin 4-7 on PORTD off
PORTD |= (16 << rows); //Turn on pin.
Serial.print(String(PORTD) + String(" : ")); //Print current selected bit(row)
uint16_t temp = (PINB & 0x000F); //Take bit 0-3 from PORTB
Serial.println(temp, BIN); //Print the PINB values as binary
*keys |= (temp << (rows*4)); //Shift the PORTB values into keys.
}
}
これはシリアルモニタの出力です。
16 : 0
32 : 0
64 : 0
128 : 0
-----------------------
16 : 0
32 : 0
64 : 0
128 : 1
-----------------------
16 : 0
32 : 0
64 : 0
128 : 11
-----------------------
16 : 0
32 : 1000
64 : 10
128 : 1111
-----------------------
16 : 1000
32 : 1110
64 : 1110
128 : 1111
-----------------------
16 : 1000
32 : 1110
64 : 1110
128 : 1111
-----------------------
16 : 0
32 : 0
64 : 0
128 : 0
-----------------------
16 : 0
32 : 0
64 : 0
128 : 0
-----------------------
ありがとうございました。後で見る人にその投稿をより明確にする方法はありますか? – oedze
@oedzeあなたは何を意味するのか分かりません。私のポストかあなたのもの?私の説明は明確ではないのですか? 「準備ができた」コードを投稿したくない理由は、人が自分の結論を導き知識を得るのに役立つ原因と結果を説明することが好きだからです。あなたは私のように投稿は大丈夫です。私の悪い英語を申し訳ありません。 – cyclone125
私は自分の投稿を意味しました。あなたは明らかになぜピンが浮いているのか、私はちょうど効果を忘れてしまった、私はあなたがArduinoでビルド抵抗をプルアップしていたのか分からなかったので、感謝! – oedze