Im은 여전히 C++ 프로그래밍 세계에 새로워서 사람들이 쉽게 따라 할 수 있습니다. 하하Arduino 멀티 탭 기능 혼란
나는 아빠가 좋아하는 게임 중 하나에 대한 높은 점수를 추적하는 시스템을 만들려고 노력하고 있습니다. 나는 점수 입력을 위해 LCD 스크린과 3x4 키패드를 사용하고있다. 키패드에 멀티 탭 기능을 추가하여 사용자 이니셜을 저장하기위한 전화 키패드처럼 작동하고 싶습니다. 점수를 저장하는 함수를 만들었지 만 (그것을 수행하는 가장 좋은 방법은 아닐지도 모르지만 개선 방법에 대한 의견은 크게 감사 할 것입니다.) 어디서부터 시작해야할지 모르겠습니다. 나는 아두 이노 키패드 라이브러리에 동적 키패드의 예를 살펴 보았다하지만 난 내가 씹을 수있는 것보다 더 많은의 물린 수도 느낄 내 코드는 다음과 같다 :
는#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
}
}