Teensy 3.2ボード(Teensyduinoプラグインを介してArduinoを使用)に配線された8つのプッシュボタンのシンプルなセットがあります。8 つのボタンはピン 1 ~ 8 にあり、それらの共通のグランド ライン (各ボタンにはんだ付けされた 1 つのライン) は GND ピンにあります。機能するボタンを1つでも機能させるコードがあります。現在、2番目のボタンを押すと「A」タイプになるように設定されています。
押しボタン 1 から 8 を、押したときにそれぞれ A、B、C などと入力したいと思います。私は自分のセットアップに関する 2 つの問題について聞いたことがあります。1 つ目は、すべてのボタンのコードをコピーするのは良くない方法であり、2 つ目はバウンスの問題 (5 回押すごとに 1 回のキーストロークが発生する) の影響を受けやすいことです。また、これを設定して、将来、ユーザーの好みに基づいてキーを構成するサード パーティのアプリを作成できるようにしたいと考えています。
これらのニーズを追加すると、次にどこに行くべきかわかりません。私は十分に初心者なので、バウンス クラスを適切に組み込む方法や、ニーズに応じてそれが正しい方法であるかどうかはわかりません。
マトリックスは行くべき道ですか、それとも各ボタンを手動で設定してバウンスを補正するエレガントな方法はありますか? ありがとう〜現在のコードは次のとおりです。
#define CHECK_EVERY_MS 20
#define MIN_STABLE_VALS 5
unsigned long previousMillis;
char stableVals;
char buttonPressed;
void setup() {
// make pin 2 an input and turn on the
// pullup resistor so it goes high unless
// connected to ground:
pinMode(2, INPUT_PULLUP);
Keyboard.begin();
}
void loop() {
if ((millis() - previousMillis) > CHECK_EVERY_MS)
{
previousMillis += CHECK_EVERY_MS;
if (digitalRead(2) != buttonPressed)
{
stableVals++;
if (stableVals >= MIN_STABLE_VALS)
{
buttonPressed = !buttonPressed;
stableVals = 0;
if (buttonPressed)
{
//Send an ASCII 'A',
Keyboard.write(65);
}
}
}
else
stableVals = 0;
}
}
--------- コード編集 1
#include <Bounce2.h>
// Instantiate a Bounce object
Bounce debouncer[8];
bool prevValues[8];
// Keyboard values for btn 1 2 3 4 5 6 7 8
char keyboardValues[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'};
void setup() {
// First setup all the pins as input with pullup
pinMode(BUTTON_PIN_1,INPUT_PULLUP);
pinMode(BUTTON_PIN_2,INPUT_PULLUP);
pinMode(BUTTON_PIN_3,INPUT_PULLUP);
pinMode(BUTTON_PIN_4,INPUT_PULLUP);
pinMode(BUTTON_PIN_5,INPUT_PULLUP);
pinMode(BUTTON_PIN_6,INPUT_PULLUP);
pinMode(BUTTON_PIN_7,INPUT_PULLUP);
pinMode(BUTTON_PIN_8,INPUT_PULLUP);
// Setup Bounce instance - First attach them to the debouncer
debouncer[0].attach(BUTTON_PIN_1);
debouncer[1].attach(BUTTON_PIN_2);
debouncer[2].attach(BUTTON_PIN_3);
debouncer[3].attach(BUTTON_PIN_4);
debouncer[4].attach(BUTTON_PIN_5);
debouncer[5].attach(BUTTON_PIN_6);
debouncer[6].attach(BUTTON_PIN_7);
debouncer[7].attach(BUTTON_PIN_8);
Keyboard.begin();
// Then set the interval (e.g. 10 ms)
unsigned char i;
for (i = 0; i < 8; i++)
prevValues[i] = 0;
}
void loop() {
// Update the Bounce instances
unsigned char i;
for (i = 0; i < 8; i++)
debouncer[i].update();
bool debounced_btn_1 = debouncer[0].read();
bool debounced_btn_2 = debouncer[1].read();
bool debounced_btn_3 = debouncer[2].read();
bool debounced_btn_4 = debouncer[3].read();
bool debounced_btn_5 = debouncer[4].read();
bool debounced_btn_6 = debouncer[5].read();
bool debounced_btn_7 = debouncer[6].read();
bool debounced_btn_8 = debouncer[7].read();
for (i = 0; i < 8; i++)
{
bool currVal = debouncer[i].read();
if ((!currVal) && (prevValues[i]))
{ // If now it is pressed (value = 0) and it wasn't before (prevvalue = 1)
Keyboard.write(keyboardValues[i]);
}
}
}