У меня проблемы с моим кодом для проекта цифровой блокировки кода.Мне удалось заставить большую часть этого работать, но есть один раздел, который сбивает меня с толку.Есть набор из 6 переключателей, 2 кнопки, зеленый светодиод и красный светодиод.Переключатели могут быть включены или выключены в любом порядке.После того, как порядок установлен с помощью 1-й кнопки (с помощью контакта 8), он сохраняется как последовательность из 6 переменных.Эта часть отлично работает.
Следующая часть - это та, которая проверяет, равна ли каждая переменная соответствующему переключателю при нажатии 2-й кнопки (контакт 12).Если все они есть, то загорается зеленый светодиод.В противном случае пользователь получает еще 2 попытки.Если пользователь вводит неправильные серии переключателей 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)
}
}
Наконец, если я хочу, чтобы пользователь был заблокирован после 3 неправильных попыток после первоначальной блокировки, и установите эту задержку равнойопределенное количество времени, как бы я это сделал?