미리 패턴을 지정해놓고 기울기센서가 전,후,좌,우로 패턴에 맞게 움직이면 어떤 신호를 내보내는 코드를 짜려고 합니다.


안녕하세요 졸업작품으로 패턴에 맞춰 기울기를 조정하면 특정한 출력을 내보내는 것을 하려고합니다.

이미지 이미지 이미지

위의 기울기 센서를 사용하는데요

예를 들어 패턴을 전,후,좌,우로 하겠다고 설정해놓으면 그에 따라서 기기를 전,후,좌,우로 기울여야 특정한 신호를 내보내려고 합니다. 아두이노를 사용하고있습니다. 제가 지금까지 해놓은 것은 각각기울기에 따라서 led를 출력하는 것 까지는 해보았습니다. 그런데 그 이후로 패턴을 하나 지정해서 그거에 맞추면 신호를 내보내게끔 해야하는게 어떻게 해야할지 감이 오지않아서 여러분에게 조언을 구합니다ㅠ 이미지 이미지

여기까지는 기울어진 방향에 따라서 각 LED를 켜는 동작이구요

그 아래 추가로 이미지 이걸 작성해봤는데요 전혀 동작을 하질 않았습니다ㅠ 어떻게 코드를 짜야될지 조언 부탁드립니다 감사합니다!! 전후좌우 또는 어떤방향 순서든 상관없이 하나의 패턴을 만들어놓고 그 값과 현재값을 비교하면서 맞으면 계속 진행하고 다 맞을 경우 A스피커에 소리를 출력하고 틀리면 RESET하면서 B스피커에 소리를 출력하는 코드를 어떻게 설정해야할지 모르겠습니다 도움 부탁드립니다. 감사합니다.


int  OUTA;
int  OUTB;
int  Red = A0;        //블루투스에 신호를 보내는 것을 led키는걸로 먼저 대신해보려고 합니다
int sensor;            // 이번에 새로 추가해보았습니다
typedef enum {UP, DOWN, LEFT, RIGHT} direction;
direction sequence[] = {UP, DOWN, LEFT}; //상-하-좌의 패턴
int position = 0;

void setup() {
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(Red, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  OUTA = digitalRead(6);
  OUTB = digitalRead(7);
  sensor = 2*OUTA + OUTB;   // OUTA와 OUTB를 sensor라는 하나의 값으로 표현하여 패턴비교를;쉽게하려고하는데 잘한게 맞는건가요??ㅎ
  if (OUTA == 0 && OUTB == 0) {
    digitalWrite(2, HIGH);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
  }
  if (OUTA == 1 && OUTB == 0) {
    digitalWrite(2, LOW);
    digitalWrite(3, HIGH);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
  }
  if (OUTA == 0 && OUTB == 1) {
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, HIGH);
    digitalWrite(5, LOW);
  }
  if (OUTA == 1 && OUTB == 1) {
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, HIGH);
  }
  Serial.print("Photo 1:  ");                // outa와 outb그리고 센서값을 어떻게 읽는지 눈으로 확인하려고 만들었습니다
  Serial.print(digitalRead(6), DEC);
  Serial.print(" ; ");
  Serial.print("Photo 2:  ");
  Serial.println(digitalRead(7), DEC);
  Serial.print(" ; ");
  Serial.print("current_direction:  ");
  Serial.println(sensor, DEC);
  delay(1000);
  direction current_direction;
  //OUTA와 OUTB의 값에 따라 current_direction의 값을 저장하세요. 그 다음에

  if (sequence[position] == current_direction) {
    position++;
    if (position == 3)
    {
      digitalWrite(Red, LOW);
    }
  }
  else {
    int position = 0;
    digitalWrite(Red, HIGH);
  }
}
  • 2016년 05월 24일에 작성됨

  • http://hashcode.co.kr/questions/1772/마크다운-문법-작성-팁 을 참고하셔서 코드를 마크다운 문법에 맞게 올려주세요.    정두식   2016.5.25 18:11     
  • 답변에 편집요청을 주셨는데 질문의 코드를 이미지가 아닌 텍스트로 변경해 주시는게 먼저입니다. 저걸 다 치기는 싫네요.    정두식   2016.5.26 17:53     
  • 죄송합니다 코드를 이미지파일로 올려놓고있었네요ㅠ 코드 첨부했습니다! 감사합니다! int Red = A0; 를 사용해서 패턴값을 만족하면 a0에 출력을 줘서 빨간led를 들어오게 하려고 합니다. 다시한번 감사드립니다ㅠ    김용재   2016.5.29 01:03     
조회수 124


1 답변


좋아요
1
싫어요
채택취소하기

예를들어 전-후-좌-우-좌 이렇게 입력이 되면 소리가 나면 되나요? 배열에 값을 넣어 놓고, 그 값이 나오는지 확인하면 되겠네요.

참고로 direction은 방향을 저장하기 위한 것으로 그냥 int를 쓰시고 0,1,2,3으로 사용하셔도 됩니다.

typedef enum {UP, DOWN, LEFT,RIGHT} direction;
direction sequence[]={UP,DOWN,LEFT};//상-하-좌의 패턴
int position=0;

void loop(){
    direction current_direction;            
    //OUTA와 OUTB의 값에 따라 current_direction의 값을 저장하세요. 그 다음에

    if(sequence[position] == current_direction){
        position++;
        if(position == 3){
            //성공
        }
    }
    else{
        //잘못된 입력이 들어오면 바로 초기화 하려면 여기서 position=0으로 하면 됩니다.
        //상-하-좌로 입력되어야 하는데 상-하-상-좌를 허용하는지 아닌지에 따라 다르겠네요.
    }
}


  • 2016년 05월 25일에 작성됨
    루비와 파이썬을 좋아합니다. 새로운 언어를 배우는것도 좋아해요. 모바일 게임도 조금 만들어 봤습니다.

  • 죄송합니다 코드를 이미지파일로 올려놓고있었네요ㅠ 코드 첨부했습니다! 감사합니다! int Red = A0; 를 사용해서 패턴값을 만족하면 a0에 출력을 줘서 빨간led를 들어오게 하려고 합니다. 다시한번 감사드립니다ㅠ    김용재   2016.5.29 01:04     

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close