使用for循环锁定Arduino中的用户
我的数字密码锁项目的代码有问题。我设法让它的大部分工作,但有一个部分是困惑我。有一套6个开关、2个按钮、一个绿色LED和一个红色LED。开关可以按任何顺序打开或关闭。使用第1个按钮(使用引脚8)设置顺序后,它将存储为一系列6个变量。这部分很好用 下一部分是当按下第二个按钮(针脚12)时,检查每个变量是否等于其相应的开关。如果所有灯都亮起,则绿色LED灯亮起。否则,用户将再尝试两次。如果用户输入错误的开关系列3次,则开关锁定10秒。这就是我无法正确使用for循环的地方。我正在使用Tinkercad的块编码系统,我不知道如何结束循环。以下是到目前为止的全部代码:使用for循环锁定Arduino中的用户,arduino,timeout,Arduino,Timeout,我的数字密码锁项目的代码有问题。我设法让它的大部分工作,但有一个部分是困惑我。有一套6个开关、2个按钮、一个绿色LED和一个红色LED。开关可以按任何顺序打开或关闭。使用第1个按钮(使用引脚8)设置顺序后,它将存储为一系列6个变量。这部分很好用 下一部分是当按下第二个按钮(针脚12)时,检查每个变量是否等于其相应的开关。如果所有灯都亮起,则绿色LED灯亮起。否则,用户将再尝试两次。如果用户输入错误的开关系列3次,则开关锁定10秒。这就是我无法正确使用for循环的地方。我正在使用Tinkercad
int switch0 = 0;
int switch1 = 0;
int switch2 = 0;
int switch3 = 0;
int switch4 = 0;
int switch5 = 0;
int switchChecker = 0;
int i = 0;
void setup()
{
pinMode(8, INPUT);
pinMode(A5, INPUT);
Serial.begin(9600);
pinMode(A4, INPUT);
pinMode(A3, INPUT);
pinMode(A2, INPUT);
pinMode(A1, INPUT);
pinMode(A0, INPUT);
pinMode(12, INPUT);
pinMode(2, OUTPUT);
pinMode(4, OUTPUT);
}
void loop()
{
// this records the values of all 6 switches on 1st
// button press
if (digitalRead(8) == HIGH) {
switch0 = digitalRead(A5);
Serial.println(switch0);
switch1 = digitalRead(A4);
Serial.println(switch1);
switch2 = digitalRead(A3);
Serial.println(switch2);
switch3 = digitalRead(A2);
Serial.println(switch3);
switch4 = digitalRead(A1);
Serial.println(switch4);
switch5 = digitalRead(A0);
Serial.println(switch5);
}
// when the 2nd button is pressed, a for loop is
// started to check if the switches are the same
// order
if (digitalRead(12) == HIGH) {
for (i = 1; i <= 3; i += 1) {
if (digitalRead(A5) == switch0 && (digitalRead(A4) == switch1 && (digitalRead(A3) == switch2 && (digitalRead(A2) == switch3 && (digitalRead(A1) == switch4 && digitalRead(A0) == switch5))))) {
i = 3;
}
}
}
// if the conditions are met, the for loop closes
// and the green LED turns on
if (i == 3) {
digitalWrite(2, HIGH);
digitalWrite(4, LOW);
} else {
delay(10000); // Wait for 10000 millisecond(s)
}
}
int开关0=0;
int开关1=0;
int开关2=0;
int开关3=0;
int开关4=0;
int开关5=0;
int-switchChecker=0;
int i=0;
无效设置()
{
pinMode(8,输入);
pinMode(A5,输入);
Serial.begin(9600);
pinMode(A4,输入);
引脚模式(A3,输入);
pinMode(A2,输入);
引脚模式(A1,输入);
引脚模式(A0,输入);
pinMode(12,输入);
pinMode(2,输出);
pinMode(4,输出);
}
void循环()
{
//这将记录第一个开关上所有6个开关的值
//按键
如果(数字读取(8)=高){
开关0=数字读取(A5);
Serial.println(开关0);
开关1=数字读取(A4);
Serial.println(开关1);
开关2=数字读取(A3);
Serial.println(开关2);
开关3=数字读取(A2);
Serial.println(开关3);
开关4=数字读取(A1);
串行打印LN(开关4);
开关5=数字读取(A0);
Serial.println(开关5);
}
//当按下第2个按钮时,将显示for循环
//开始检查开关是否相同
//命令
如果(数字读取(12)=高){
for(i=1;i而不是for循环,您可以创建一个全局变量来统计错误尝试的次数。然后,如果它等于3,则调用延迟:
char wrongAttemps = 0;
void loop()
{
// this records the values of all 6 switches on 1st
// button press
if (digitalRead(8) == HIGH) {
switch0 = digitalRead(A5);
Serial.println(switch0);
switch1 = digitalRead(A4);
Serial.println(switch1);
switch2 = digitalRead(A3);
Serial.println(switch2);
switch3 = digitalRead(A2);
Serial.println(switch3);
switch4 = digitalRead(A1);
Serial.println(switch4);
switch5 = digitalRead(A0);
Serial.println(switch5);
}
// when the 2nd button is pressed,
// check if the switches are the same order
if (digitalRead(12) == HIGH) {
if (digitalRead(A5) == switch0 && digitalRead(A4) == switch1
&& digitalRead(A3) == switch2 && digitalRead(A2) == switch3
&& (digitalRead(A1) == switch4 && digitalRead(A0) == switch5
) {
// right combination
digitalWrite(2, HIGH);
digitalWrite(4, LOW);
} else {
// wrong combination
digitalWrite(2, LOW);
digitalWrite(4, HIGH);
wrongAttemps++;
if (wrongAttemps == 3) {
delay(10000);
wrongAttemps = 0; // reset attemps
}
}
}
}