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

尝试使用arduino的数组创建密码,arduino,arduino-uno,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,

我是一个使用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....");
  }
 }
}
//按钮引脚(带外部下拉电阻器)
常量字节b1=4;
常量字节b2=2;
常量字节b3=3;
//信号引脚
常量字节greenPin=12;
常量字节redPin=13;
字节计数=0;//0 ... 4次计数按钮按下
字节修正码[4]={2,3,3,1};
字节码[4];
无效设置(){
引脚模式(绿色引脚,输出);
引脚模式(红色引脚,输出);
引脚模式(b1,输入);
引脚模式(b2,输入);
pinMode(b3,输入);
Serial.begin(9600);
}
void循环(){
bool bs1=数字读取(b1);
bool bs2=数字读取(b2);
bool bs3=数字读取(b3);
若(bs1)增加(1);
否则,如果(bs2)添加(2);
否则,如果(bs3)添加(3);
}
无效添加(字节值){
串行打印(值);
代码[计数++]=值;
如果(计数=4){
计数=0;
如果(检查())正确();
否则就错了;
}
其他的
延迟(500);
}
布尔检查(){
用于(字节i=0;i<4;i++){
如果(代码[i]!=更正代码[i]){
返回false;
}
}
返回true;
}
无效错误(){
Serial.println(“->错误!”);
数字写入(红色,高);
延迟(1000);
数字写入(红色引脚,低电平);
}
void correct(){
Serial.println(“->正确!”);
数字写入(绿色,高);
延迟(300);
digitalWrite(绿色引脚,低电平);
}
已编译,但未经测试

不要复制代码,而是创建函数。这可以使代码更易于阅读

如果您不希望按钮自动恢复(500毫秒后),最好检查状态更改(按下->释放)

如果按下多个按钮,我会添加一个优先级。您可能希望放弃该状态

对于3个以上的按钮,请阅读关于数组的内容:)

请查看和循环的工作原理。
// 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);
 }