【问题标题】:Arduino Multi tap function confusionArduino Multi Tap功能混乱
【发布时间】:2014-11-29 15:13:24
【问题描述】:

我对 c++ 编程世界还是很陌生,所以请放轻松。哈哈

我试图创建一个系统来跟踪我父亲最喜欢的游戏之一的高分。我正在使用 LCD 屏幕和 3x4 键盘来输入乐谱。我想在键盘上添加一个多次点击功能,这样它就好像它是一个用于存储用户姓名首字母的电话键盘。我已经创建了一个用于存储分数的函数(它可能不是最好的方法,但它确实有效,我们将不胜感激如何改进。)我什至不知道从哪里开始。我已经查看了 Arduino 键盘库中的动态键盘示例,但我觉得我可能已经咬得比我能咀嚼的更多 我的代码如下:

#include <SoftwareSerial.h>
#include "Keypad.h"

// Create a software serial port!
SoftwareSerial lcd = SoftwareSerial(11,10); 
char scoreinput[] = {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '};
int counter = -2;
int counter2=0;
uint8_t red, green, blue;



const byte ROWS = 4; //four rows
const byte COLS = 3; //three columns
char keys[ROWS][COLS] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
byte rowPins[ROWS] = {5, 6, 7, 8}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {2, 3, 4}; //connect to the column pinouts of the keypad

Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );


void setup() {
lcd.begin(9600); 
Serial.begin(9600);

lcd.write(0xFE); //clear display 
lcd.write(0x58);
delay(10);
lcd.print("****PinScore*******************");
lcd.write(0xFE);//set cursor at home
lcd.write(0x48);
delay(5000);



lcd.write(0xFE); //clear display 
lcd.write(0x58);
delay(10);
lcd.print("New High Score?");
lcd.write(0xFE);
lcd.write(0x47);
lcd.write((uint8_t)2);
lcd.print(" Press      \"#\"");
delay(5000);

lcd.write(0xFE); //clear display 
lcd.write(0x58);
delay(10);
lcd.print("Display Scores?");
lcd.write(0xFE);
lcd.write(0x47);
lcd.write((uint8_t)2);
lcd.print(" Press      \"*\"");
delay(5000);

lcd.write(0xFE); //clear display 
lcd.write(0x58);
lcd.print("     Press     ");
lcd.write(0xFE);
lcd.write(0x47);
lcd.write((uint8_t)2);
lcd.print(" \"*\"   or  \"#\" ");
}


void loop() {



char key = keypad.getKey();

if (key != NO_KEY){
Serial.print(key);
lcd.print(key);
counter++;
counter2++;
scoreinput[counter]=(key);
}

switch (key == '#'){
   case 1:




lcd.write(0xFE); //clear display 
lcd.write(0x58);
delay(10);
lcd.print("Enter Your New  High Score");
delay(3000);
lcd.write(0xFE); //clear display 
lcd.write(0x58);
lcd.print("Press \"#\" At Any Time To Reset");
delay(3000);
lcd.write(0xFE); //clear display 
lcd.write(0x58);
lcd.print("Enter High Score:");


lcd.write(0xFE);
lcd.write(0x47);
lcd.write((uint8_t)18);
lcd.print(key);

if (counter==8){
  break;
}
}

if (counter==8){
lcd.write(0xFE); //clear display 
lcd.write(0x58);
delay(1000);
lcd.print(scoreinput[0]);
lcd.print(scoreinput[1]);
lcd.print(scoreinput[2]);
lcd.print(",");
lcd.print(scoreinput[3]);
lcd.print(scoreinput[4]);
lcd.print(scoreinput[5]);
lcd.print(",");
lcd.print(scoreinput[6]);
lcd.print(scoreinput[7]);
lcd.print(scoreinput[8]);
counter=-2;
delay(3000);
lcd.write(0xFE); //clear display 
lcd.write(0x58);
lcd.print("Enter your      Initals:");
  }
while (counter2>10){
if (key == '2'){
//this is where the multi tap function would be called to allow users to enter their intials 

}
}

【问题讨论】:

    标签: arrays arduino numeric-keypad


    【解决方案1】:

    您只需要一个计时器来测量自上次输入按键以来的时间。如果距离上一次击键已经超过一定时间(可能是 1 秒),或者如果键与最后按下的键不同,则输入 new 字符(键的第一个字符; 2=A, 3=D, etc.) 否则它增加字符(带有环绕,A=>B, B=>C, C=>A)。所以“234”进入“ADG”,“222”进入“C”,但“2(delay)22”进入“AB”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-17
      • 1970-01-01
      • 2018-12-10
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      相关资源
      最近更新 更多