본문 바로가기

카테고리 없음

[아두이노] 4주차 - 초음파, RGB

VCC - 5v

Trig - 출력

Echo - 입력

Gnd - Gnd

 

digital pin의 ~ 표시는 PWM으로  HIGH, LOW 외의 값을 가질 수 있음

 

RGB

R GRO(긴거) G B

//초음파 센서의 핀번호를 설정한다.


#define echo 8
#define RED 9
#define GRE 10
#define BLU 11
#define trig 12
#define BUZ 13
int time = 0;
bool setting = true;
void setup() {
  Serial.begin(9600);
  // trig를 출력모드로 설정, echo를 입력모드로 설정
  pinMode(trig, OUTPUT);
  pinMode(echo,  INPUT);
  pinMode( RED, OUTPUT);
  pinMode( GRE, OUTPUT);
  pinMode( BLU, OUTPUT);
  pinMode( BUZ, OUTPUT);
  for(int i=0;i<=7;i++)
    pinMode( i,  INPUT);
  
  clear_rgb();
}

void loop() {
  if(setting) time+=10;
  else time-=10;

  if(time >= 255) {
    time = 255;
    setting = false;
  }
  if(time <= 0) {
    time = 0;
    setting = true;
  }
  for(int i=0;i<=7;i++)
    Serial.print(digitalRead(i));
  Serial.println("");
  
  // 초음파를 보낸다. 다 보내면 echo가 HIGH 상태로 대기하게 된다.
  digitalWrite(trig, LOW);
  digitalWrite(echo, LOW);
  delayMicroseconds(2);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);

  // echoPin 이 HIGH를 유지한 시간을 저장 한다.
  unsigned long duration = pulseIn(echo, HIGH); 
  // HIGH 였을 때 시간(초음파가 보냈다가 다시 들어온 시간)을 가지고 거리를 계산 한다.
  float distance = ((float)(340 * duration) / 10000) / 2;  
  // or duration/2/29
  //Serial.print(distance);
  //Serial.println("cm");

  // 수정한 값을 출력
  if(distance < 5) {
    LED(RED);
    buz_on(50);
  }else
  if(distance < 15){
    dsp_rgb(255,192,203);
    buz_on(100);
  }else
  if(distance < 30){
    dsp_rgb(255,255,0);
    buz_on(200);
  }else
  if(distance < 60){
    dsp_rgb(0,255,255);
    buz_on(300);
  }else
  if(distance < 100){
    dsp_rgb(135,206,235);
    buz_on(500);
  }
  else{
    dsp_rgb(0,0,255);
  }
  
  delay(100);
}
void buz_on(int t){
    digitalWrite(BUZ,HIGH);
    delay(t);
    digitalWrite(BUZ,LOW);
}

//sky blue 87 ce eb = 0x87 0xcd 0xeb
void LED(int pin) {
  for(int i= RED ; i<= BLU; i++){
    if(pin == i)
      analogWrite(i, time);
    else
      digitalWrite(i, LOW);
  }
}

void dsp_rgb(int r, int g, int b){
  analogWrite(RED, r);
  analogWrite(GRE, g);
  analogWrite(BLU, b);
}

void clear_rgb(){
  dsp_rgb(0,0,0);
}