아래 프로그램은 입력이 암호와 같은지 테스트하기 위해 키패드와 arduino를 사용합니다. '#'을 누를 때마다 입력을 검사 한 다음 입력을 저장하는 변수가 빈 문자열 (char 입력 [257] = "")으로 재설정됩니다. 그런 다음 프로그램은 void loop() 코드 블록의 처음으로 다시 루프됩니다. 내 프로그램이 "void loop()"코드 블록의 처음으로 돌아갈 때 문제가 있습니다. 입력을 빈 문자열로 재설정하면 입력이 빈 문자열로 재설정됩니다. 그러나 프로그램이 루프 할 때 입력 값이 이전의 값으로 변경됩니다. 따라서 원래 "123abc"를 입력하고 '#'을 누르면 프로그램이 입력 내용이 잘못되었다고 알려주고 프로그램이 변수를 빈 문자열로 재설정하지만 프로그램이 빈 문자열을 저장하는 변수를 루프하면 다시 변경됩니다. ~ "123abc". 무슨 일이야? 왜 변수가 빈 문자열로 남아 있지 않습니까?변수 값이 예기치 않게 변경됩니까?
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //three columns
char keys[ROWS][COLS] = {
{'1','2','3','A'},
{'4','5','6','B'},
{'7','8','9','C'},
{'*','0','#','D'}
};
byte rowPins[ROWS] = {5, 4, 3, 2}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {9, 8, 7, 6}; //connect to the column pinouts of the keypad
char password[9] = "3994A", input[257]="";
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
int x;
void setup(){
Serial.begin(9600);
}
void loop(){
x = 0;
Serial.println(input);
while (1)
{
char key = keypad.getKey();
if (key)
{
if (key == '#')
{
break;
}
input[x] = key;
x+=1;
}
}
if (strcmp(password,input) == 0)
{Serial.println("Access Granted");
}
else
{Serial.println("Access Denied");
}
char input[257] = "";
Serial.println(input);
}
나는이 줄을 좋아한다. 'const byte COLS = 4; // 세 개의 컬럼' –