尝试使用带有 arduino 的数组来创建密码

Trying to make a password using an array with arduino

我是 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....");
  }
 }
}
// 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 个,请阅读数组:)