728x90

# 프로그램 설명
1. 아두이노가 평상시에는 데이터 입력을 받아 그 문자를 출력하는 작업을 하다가 장애물 침입할 때만 PIR 센서에서 읽고 경고 메시지를 출력한다. 실험은 장애물 회피 센서로 진행. 
2. 장애물 회피 센서의 신호 단자를 인터럽트 단자인 2번에 연결을 하여 장애물이 감지되었을 때 (신호 단자가 LOW일 때) 인터럽트를 발생시켜 장애물이 감지되었다는 것을 알리는 변수 checked를 1로 바꾸어 장애물이 침입하여 경고 메시지를 출력하여야 한다는 것을 알려준다. 평상시 장애물 회피 센서 상태는 0이다.
3. setup() 부분에서 장애물 회피 센서를 입력 모드로 설정하고 시리얼 전송 속도를 설정한다. attachInterrupt() 함수를 사용하여 2번 단자 번호를 인터럽트 번호(0번)로 변환한 후 이 단자의 신호가 FALLING(HIGH->LOW)이 되어 인터럽트가 발생하면 isr() 함수를 수행하도록 지정한다. 장애물 회피 센서의 신호는 장애물이 침입하였을 때 LOW이고 침입하지 않았을 때 HIGH 이기 때문에 장애물이 침입하지 않은 HIGH 상태에서 장애물 침입하여 LOW 상태가 되는 FALLING 모드 일 때 인터럽트가 발생하도록 한다.
4. 인터럽트가 발생하면 장애물이 침입된 상황이므로 함수 isr() 에서 장애물이 감지되었다는 것을 알리는 변수 checked를 1로 바꾸어 장애물이 침입하여 경고 메시지를 출력하여야 한다는 것을 알려준다. 이때 검은색 장애물이 들어와도 적외선이 검은색에서는 흡수되어 감지하지 못한다. 
5. loop() 부분에서 장애물이 감지된 상태인 checked가 1인 경우 시리얼 모니터에 경고 메세지를 출력하고 다시 장애물이 감지되지 않은 상태(checked = 0)로 변경한다.
장애물이 감지되지 않은 상태인 평상시(checked == 0)에는 데이터가 입력된 게 있으면  그 문자를 읽어 출력하는 작업을 한다.
6. PIR 센서의 신호 단자(회색)를 인터럽트 단자인 2번에 연결하고 GND 단자(주황색)는 GND 단자에, Vcc 단자(빨간색)는 3.3V에 연결한다.

 

# 소스

#define OAS 2               // 장애물 회피 센서
volatile int checked = 0;   // 장애물이 감지되었다는 것을 알려주는 변수

void setup() { 
  pinMode(OAS, INPUT);      // 장애물 회피 센서 입력 모드로 설정
  Serial.begin(9600);       // 시리얼 모니터 전송 속도 설정
  // 인터럽트 발생 시 처리할 함수 설정
  attachInterrupt(digitalPinToInterrupt(OAS), isr, FALLING);  
} 

void loop() { 
  if(checked == 1){             // 장애물이 감지된 상태이면
    Serial.println("WARNING");  // 경고 메세지 출력 후 
    checked = 0;                // 장애물이 감지되지 않은 상태로 변경
  }
  else{                         // 장애물이 감지되지 않은 상태이면
    if(Serial.available()){     // 들어온 데이터가 있으면
      char ch = Serial.read();  // 데이터를 읽음
      Serial.println(ch);       // 들어온 데이터 출력
    }
  }
} 

void isr(){     // 인터럽트 발생 시 처리할 함수
  checked = 1;  // 장애물이 감지된 상태로 변경
}

 

 # 실행화면 (시리얼 모니터)
- 아두이노가 평상시에는 데이터 입력을 받아 그 문자를 출력하는 작업을 함
- 1, 2, 3 출력
- 장애물 침입이 감지되면 경고 메세지 “WARNING” 출력
- 다시 평상시 상태로 돌아가서 입력한 데이터 출력함
- 검은 색 물체는 장애물로 인식하지 못함

 

반응형

'전공 공부 > 안드로이드프로그래밍' 카테고리의 다른 글

액티비티와 인텐트  (0) 2021.01.14
고급 위젯과 프래그먼트  (0) 2021.01.14
메뉴와 대화 상자  (0) 2021.01.14
이벤트 처리  (0) 2021.01.14
사용자 인터페이스 기초  (0) 2021.01.14
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기