以下のプログラムは、キーパッドと arduino を使用して、入力がパスワードと等しいかどうかをテストします。「#」が押されるたびに、入力がチェックされ、入力を格納する変数が空の文字列にリセットされます (char input[257] = "")。その後、プログラムは void loop() コード ブロックの先頭にループ バックします。プログラムが "void loop()" コード ブロックの先頭にループバックするときに問題が発生します。入力を空の文字列にリセットすると、入力は空の文字列にリセットされます。ただし、プログラムがループすると、input の値は以前の値に変更されます。したがって、最初に「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);
}