Попытка сделать пароль, используя массив с Arduino - PullRequest
0 голосов
/ 26 сентября 2019

Я новичок в использовании Arduino, и я застрял в определенной проблеме.У меня есть программа, которая печатает цифры на консоли нажатием кнопки.Я пытаюсь понять, что я ввожу 4 числа, после чего он проверяет, совпадает ли он с массивом чисел, который я установил ранее.Теперь проблема в том, что я не знаю, как заставить программу проверить, совпадает ли массив, который я ввел с помощью кнопок, с тем, который я написал ранее.


int b1 = 4;
int bs1 = 0;
int b2 = 2;
int bs2 = 0;
int b3 = 3;
int bs3 = 0;
int count = 0;
int correctcode[] = {2,3,3,1}; 
int code[4];

void setup() {
  // put your setup code here, to run once:
  pinMode(greenPin, OUTPUT);
  pinMode(redPin, OUTPUT);
  pinMode (b1, INPUT);
  pinMode (b2, INPUT);
  pinMode (b3, INPUT);
  Serial.begin(9600);
}

void loop() {
  // put your main code here, to run repeatedly:
 bs1 = digitalRead(b1);
 bs2 = digitalRead(b2);
 bs3 = digitalRead(b3);

 if (bs1 == HIGH) {
  count++;
  Serial.print ("1");
  delay(500);
  if (count == 4){
    Serial.println ("pincode ingevoerd, checking....");

  }

 }
 if (bs2 == HIGH) {
  count++;
  Serial.print ("2");
  delay(500);
  if (count == 4){
    Serial.println ("pincode ingevoerd, checking....");
  }
 }
 if (bs3 == HIGH) {
  count++;
  Serial.print ("3");
  delay(500);
if (count == 4){
    Serial.println ("pincode ingevoerd, checking....");
  }
 }
}

1 Ответ

0 голосов
/ 26 сентября 2019
// Button pins ( with external pulldown resistors )
const byte b1 = 4;
const byte b2 = 2;
const byte b3 = 3;

// Signal pins
const byte greenPin = 12;
const byte redPin = 13; 

byte count = 0; // 0 ... 4 counted button presses
byte correctcode[4] = {2,3,3,1}; 
byte code[4];

void setup() {
  pinMode(greenPin, OUTPUT);
  pinMode(redPin, OUTPUT);
  pinMode (b1, INPUT);
  pinMode (b2, INPUT);
  pinMode (b3, INPUT);
  Serial.begin(9600);
}

void loop() {
 bool bs1 = digitalRead(b1);
 bool bs2 = digitalRead(b2);
 bool bs3 = digitalRead(b3);

 if (bs1) add(1);
 else if (bs2) add(2);
 else if (bs3) add(3);
}

 void add( byte value ) {
    Serial.print (value);
    code[count++] = value; 
    if (count == 4) {
       count=0;
       if (check()) correct();
       else         wrong();
    }
    else
       delay(500);
 }

 bool check() {
    for (byte i=0; i < 4; i++) {
       if (code[i] != correctcode[i]) {
         return false; 
       }
    }
    return true;
 }

 void wrong() {
     Serial.println(" -> wrong !");  
     digitalWrite(redPin, HIGH);
     delay(1000); 
     digitalWrite(redPin, LOW);
 }

 void correct() {
     Serial.println(" -> correct !");  
     digitalWrite(greenPin, HIGH);
     delay(300); 
     digitalWrite(greenPin, LOW);
 }

Скомпилировано, но не проверено

Не дублируйте код, а создавайте функции.Это может облегчить чтение кода.

Если вам не нужен автоповтор (после 500 мс) для ваших кнопок, лучше проверить изменения состояния (нажата -> отпущена)

Если несколько кнопокнажал, я добавил приоритет.Возможно, вы захотите отказаться от этого состояния.

Для более чем 3 кнопок, прочитайте о массивах:)

...