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);
}