尝试使用带有arduino的数组输入密码

时间:2019-09-26 13:06:50

标签: arduino arduino-uno

我是使用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 :(得分:0)

// 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个以上的按钮,请阅读有关数组的信息:)