정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

아두이노 키패드 모듈을 이용한 랜덤 비밀번호 관련해서 궁금합니다.
켯속 | 2019-11-28

안녕하세요 아두이노 도어락을 만드는 중 해결법이 안보여 질문드립니다. 밑에 있는 예제를 통해서 블루투스 연결과 임의로 설정한 비밀번호인 1,2,3,4를 입력했을 때 서브모터가 동작하는것을 확인하였는데요, 이 비밀번호를 지정이 아닌 랜덤 비밀번호로 매번 바꿔서 시리얼 모니터에 띄우고 싶은데 도저히 모르겠습니다. 밑에 예제에서 이런코드도 추가했었습니다.

int ONE=random(9);
    int TWO=random(9);
    int THREE=random(9);
    int FOUR=random(9);//4자리 암호 설정
    Serial.print(ONE);
    Serial.print(TWO);
    Serial.print(THREE);

    Serial.println(FOUR);//4자리 암호 시리얼 모니터에 출력

하지만 해결이 안되어 방법을 물어봅니다.

 

사용부품:아두이노UNO, HC-06, 4X4키패드, SG-90서브모터 

 

예제

#include

#include

#include

SoftwareSerial hc06(11,12);

int tru=0;

int count=0;

char PW[4]={'1','2','3','4'};

const byte ROWS = 4;

const byte COLS = 4;

byte rowPins[ROWS]={8,7,6,5};

byte colPins[COLS]={4,3,2,1};

 

char keys[ROWS][COLS] = {

  {'1','2','3','A'},

  {'4','5','6','B'},

  {'7','8','9','C'},

  {'*','0','#','D'},

};

 

Servo myservo;

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);

 

void setup() {

  Serial.begin(9600);

  hc06.begin(9600);

  myservo.attach(13);

 

}

 

void loop() {

  char key = keypad.getKey();

  if(Serial.available()){

    hc06.write(Serial.read());

  }

  if(key){

    if(key==PW[count])

    {

      count++;

      tru++;

    }

 

    else if(key!=PW[count]){

      count++;

    }

    if(key=='#')

    re();

    if(count==4)

    {

      if(tru==4)

      Su();

      else

      Fa();

      tru=0;

      count=0;

    }

  }

 }

 

void Su()

 

{

  myservo.write(1000);

}

void Fa() {

  myservo.write(0);

}

 

void re()

{

  tru=0;

  count=0;

}

프로필사진

판다마니아 2019-12-03 13:57:16

위 코드에서 실제 비밀번호가 들어가있는 부분은 PW[4] 이부분입니다.

 

4개의 랜덤 숫자를 받아 변수에 넣으셧으면 그 변수를 PW 배열에 하나씩 넣어주셔야 비밀번호 비교할시 랜덤 비밀번호가 되는겁니다.

 

추가하신 코드에 PW[0] = ONE; PW[1] = TWO; ... 이렇게 배열에 하나씩 넣어주는 코드도 작성한 후 동작해보세요.

이전글   |    조도센서,피에조부저 관련 질문 드립니다.... 2019-11-27
다음글   |    두개의 소스를 하나로 합칠 수 있나요? 2019-11-28