목표: 주어진 3가지 조건을 만족하면서 아두이노 오토봇을 이용하여 제시된 맵을 통과하기

#include <IRremote.h>
#include <Servo.h>
IRrecv irrecv(2);
decode_results results;
int MOTORL_PIN = 5;
int MOTORR_PIN = 9;
Servo IServo;
Servo RServo;
int TRIG_PIN = 3;
int ECHO_PIN = 4;
long duration, cm, in;
int QTI1_PIN = 11;
int QTI2_PIN = 12;
int qtis;
int k = 1;
void setup() {
Serial.begin(9600);
Serial.println("Enabling IRin");
irrecv.enableIRIn();
Serial.println("Enabled IRin");
IServo.attach(MOTORL_PIN);
RServo.attach(MOTORR_PIN);
pinMode(QTI1_PIN,INPUT);
pinMode(QTI2_PIN,INPUT);
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
}
void loop() {
  /* QTI센서 부분 */
if(k<0) {
  qtis = digitalRead(QTI1_PIN)*2 + digitalRead(QTI2_PIN);
switch(qtis) {
    case 0: Serial.println("00"); slowgo(); break;  
    case 1: Serial.println("01"); turnright2(); break;  
    case 2: Serial.println("10"); turnleft2(); break;  
    case 3: Serial.println("11"); stop(); break;
  }
}
/* 리모컨 조작 */
if (irrecv.decode(&results)) {
  Serial.println(results.value, NEC);
  switch(results.value) {
    case 0xFF18E7:
      Serial.println("2");
      goForward();
      break;
    case 0xFF10EF:
      Serial.println("4");
      turnleft();
      break;
    case 0xFF38C7:
      Serial.println("5");
        stop();
      break;
    case 0xFF5AA5:
      Serial.println("6");
      turnright();
      break;
    case 0xFF4AB5:
      Serial.println("8");
      back8();
      break;
    case 0xFF6897:
      Serial.println("0");
      leftturn();
      break;
    case 0xFF9867:
      Serial.println("-");
      k=k*(-1);
      break;
    case 0xFFB04f:
      Serial.println("OK");
      rightturn();
      break;
    case 0xFFA857:
      Serial.println(">ll");
      program();
      break;
    default:
      break;
  }
irrecv.resume(); // Receive the next value
}
delay(100);
}
void goForward() {
IServo.writeMicroseconds(1560);
RServo.writeMicroseconds(1430);
}
void slowgo() {
IServo.writeMicroseconds(1535);
RServo.writeMicroseconds(1455);
delay(250);
}
void turnright() {
IServo.writeMicroseconds(1560);
RServo.writeMicroseconds(1550);
}
void turnleft() {
IServo.writeMicroseconds(1440);
RServo.writeMicroseconds(1430);
}
void stop() {
IServo.writeMicroseconds(1500);
RServo.writeMicroseconds(1490);
}
void back8() {
IServo.writeMicroseconds(1400);
RServo.writeMicroseconds(1590);
delay(400);
IServo.writeMicroseconds(1500);
RServo.writeMicroseconds(1490);
}
void turnright2() {
IServo.writeMicroseconds(1530);
RServo.writeMicroseconds(1520);
delay(50);
}
void turnleft2() {
IServo.writeMicroseconds(1480);
RServo.writeMicroseconds(1470);
delay(50);
}
void rightturn() {
IServo.writeMicroseconds(1580);
RServo.writeMicroseconds(1570);
delay(640);
IServo.writeMicroseconds(1500);
RServo.writeMicroseconds(1490);
}
void leftturn() {
IServo.writeMicroseconds(1440);
RServo.writeMicroseconds(1430);
delay(850);
IServo.writeMicroseconds(1500);
RServo.writeMicroseconds(1490);
}
/* 초음파센서 함수 */
void program() {
  int i = 0;
  while(i<3) {
    int distance;
    int sonarPwm;
    digitalWrite(TRIG_PIN, LOW);
    delayMicroseconds(2);
    digitalWrite(TRIG_PIN, HIGH);
    delayMicroseconds(10);
    digitalWrite(TRIG_PIN, LOW);
    sonarPwm = pulseIn(ECHO_PIN, 1, 18500L);
    distance = sonarPwm / 60;
    Serial.println(distance);
    delay(200);
    /* 구간별 회전방향 설정 */
    switch(i) {
      case 0:
        if (distance > 0 && distance < 10) {
          rightturn();
          i++;
        }
        else {
          slowgo();
        }
        break;
      case 1:
        if (distance > 0 && distance < 10) {
          leftturn();
          distance = 20;
          i++;
        }
        else {
          slowgo();
        }
      case 2:
        if (distance > 0 && distance < 10) {
          leftturn();
          i++;
        }
        else {
          slowgo();
        }
    }
  }
  slowgo();
  delay(100);
}
'학교' 카테고리의 다른 글
| [2019-2] 디지털신호처리 첩 신호 만들기 과제 (0) | 2022.01.06 | 
|---|---|
| [2019-1] 임베디드시스템 프로젝트 (0) | 2021.08.26 | 
| [2019-1] 컴퓨터그래픽스1 프로젝트 (0) | 2021.08.12 | 
| [2019-1] 자바프로그래밍 과제 (0) | 2021.08.12 | 
| [2019-1] 디지털영상처리1 8장 과제 (0) | 2021.08.12 |