정보나눔

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

아두이노 키패드를 이용한 서보모터 제어(급해요 ㅠㅠ)
강상욱 | 2019-11-29

#include <Keypad.h>  // Keypad.h 라이브러리를 호출합니다.

char* secretCode = "2019";  // 비밀번호를 설정(여기선 1234)
int position = 0;
int wrong = 0;
// 비밀번호 비교시 쓸 변수 선언(맞는 경우와 틀린경우 2가지)

const byte rows = 4;
const byte cols = 4;
// 키패드의 행, 열의 갯수

char keys[rows][cols] = {
  {'1', '2', '3', 'A'},
  {'4', '5', '6', 'B'},
  {'7', '8', '9', 'C'},
  {'*', '0', '#', 'D'}
};
// 키패드 버튼 위치 설정

byte rowPins[rows] = {8, 7, 6, 5};
byte colPins[cols] = {4, 3, 2, 1};
// 키패드에 연결된 핀번호 설정(데이터 시트 참고)

Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, rows, cols);
// 키패드 오브젝트 생성

int redPin = 13;
int greenPin = 12;
// LED 2개의 핀번호 설정

#include <Servo.h> //서보 라이브러리를 불러옵니다.
 
Servo myservo;  // 서보를 제어할 서보 오브젝트를 만듭니다.
               
int pos = 0;     // 서보 위치를 저장할 변수를 선언합니다.
void setup(){
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  setLocked(true);
    myservo.attach(9);  // 핀 9의 서보를 서보 오브젝트에 연결합니다.
}
// 2개의 LED를 세팅해주고, 잠금상태를 기본으로 세팅해 줍니다.


void loop(){
   char key = keypad.getKey(); // 키패드에서 입력된 값을 가져옵니다.
   if((key >= '0' && key <= '9') || (key >= 'A' && key <='D')
    || (key == '*' || key == '#')){
  // 키패드에서 입력된 값을 조사하여 맞게 입력된 값일 경우(키패드에 있는 버튼이 맞을경우) 비교

    if(key == '*' || key == '#'){ // *, # 버튼을 눌렀을 경우
      position = 0;
      wrong = 0; // 입력 초기화
      setLocked(true); // 잠금상태로 세팅for(pos = 0; pos < 90; pos += 1)  // 0도에서 90도로 이동합니다.
  {                                  // 이동할때 각도는 1도씩 이동합니다.
    myservo.write(pos);              // 'pos'변수의 위치로 서보를 이동시킵니다.
    delay(3000);                       // 서보 명령 간에 5000ms를 기다립니다.
  }
  for(pos = 90; pos>=1; pos-=1)     // 90도에서 0도로 이동합니다.
  {                                
   
  }
 
    }
 
    else if(key == secretCode[position]){ // 해당 자리에 맞는 비밀번호가 입력됬을 경우
      position++; // 다음 자리로 넘어 감
      wrong = 0; // 비밀번호 오류 값을 0으로 만듬
    }
   
    else if(key != secretCode[position]){ // 해당 자리에 맞지 않는 비밀번호가 입력됬을 경우
      position = 0; // 비밀번호를 맞았을 경우를 0으로 만듬
      setLocked(true); // 잠금상태로 세팅
      wrong++; // 비밀번호 오류 값을 늘려준다
    }
 
    if(position == 4){ // 4자리 비밀번호가 모두 맞았을 경우
      setLocked(false); // 잠금상태를 해제 함
    }
   
    if(wrong == 4){ // 비밀번호 오류를 4번 했을 경우
      blink(); // Red LED를 깜빡여 준다.
      wrong = 0; // 비밀번호 오류 값을 0으로 만들어 준다.
    }
  }
  delay(100);
}

void setLocked(int locked){ // 잠금시와 해제시에 맞는 LED를 세팅해 주는 함수
  if(locked) { // 잠금시 Red LED를 켜주고, Green LED를 꺼준다.
  digitalWrite(redPin, HIGH);
  digitalWrite(greenPin, LOW);
  }

  else{ // 해제시 Red LED를 꺼주고, Green LED를 켜준다.
    digitalWrite(redPin, LOW);
    digitalWrite(greenPin, HIGH);
  }
}

void blink(){ // 비밀번호 4번 오류시 Red LED를 깜빡여 주는 함수.
  for(int i = 0; i < 8; i++){ // 딜레이 만큼 Red LED를 껐다 켰다 해준다. 총 8회
    digitalWrite(redPin, LOW);
    delay(500);
    digitalWrite(redPin, HIGH);
    delay(500);
  }
}

 

 

 

 

 

여기서 뭐가 잘못돼서 서보모터가 움직이지 않을까요?

빠른 답변 주시면 감사드리겠습니당

이전글   |    아두이노 스케치가 안되요ㅠㅠㅠㅠ 2019-11-29
다음글   |    아두이노 어디가 오류가 있는지 모르겠습니다.... 2019-12-01