안녕하세요 아두이노를 공부한지 얼마 안된 학생입니다!
제가 초음파센서로 거리에 따라 3W짜리 LED3개를 개별제어하는 중입니다.
다름이 아니라 일정 거리 안에서는 LED가 제어가 되는 것 같은데
else상태가 되면 코드상으로는 계속 켜질줄 알았는데 계속 깜빡이더라구요
int trigPin1 = 13;
int echoPin1 = 12;
int nLedDrive1 = 11;
int nLedDrive2 = 10;
int nLedDrive3 = 6;
int x;
int y;
int z;
void setup() {
Serial.begin (9600);
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
//pinMode(trigPin2, OUTPUT);
//pinMode(echoPin2, INPUT);
pinMode(nLedDrive1, OUTPUT);
pinMode(nLedDrive2, OUTPUT);
pinMode(nLedDrive3, OUTPUT);
digitalWrite(nLedDrive1, HIGH);
digitalWrite(nLedDrive2, HIGH);
digitalWrite(nLedDrive3, HIGH);
}
void firstsensor(){
int duration1, distance1;
digitalWrite (trigPin1, HIGH);
delayMicroseconds (10);
digitalWrite (trigPin1, LOW);
duration1 = pulseIn (echoPin1, HIGH);
distance1 = (duration1/2) / 29.1;
Serial.print("1st Sensor: ");
Serial.print(distance1);
Serial.print("cm ");
if (distance1 < 12){
x=0;
y=0;
z=0;
analogWrite(nLedDrive1, x);
analogWrite(nLedDrive2, y);
analogWrite(nLedDrive3, z);
}
else if (distance1 < 15){
x=0;
y=0;
z=15;
analogWrite(nLedDrive1, x);
analogWrite(nLedDrive2, y);
analogWrite(nLedDrive3, z);
}
else if (distance1 < 18){
x=0;
y=15;
z=55;
analogWrite(nLedDrive1, x);
analogWrite(nLedDrive2, y);
analogWrite(nLedDrive3, z);
}
else if (distance1 < 21){
x=15;
y=55;
z=100;
analogWrite(nLedDrive1, x);
analogWrite(nLedDrive2, y);
analogWrite(nLedDrive3, z);
}
else if (distance1 < 25){
x=55;
y=100;
z=145;
analogWrite(nLedDrive1, x);
analogWrite(nLedDrive2, y);
analogWrite(nLedDrive3, z);
}
else if (distance1 < 28){
x=100;
y=145;
z=190;
analogWrite(nLedDrive1, x);
analogWrite(nLedDrive2, y);
analogWrite(nLedDrive3, z);
}
else if (distance1 < 33){
x=145;
y=190;
z=225;
analogWrite(nLedDrive1, x);
analogWrite(nLedDrive2, y);
analogWrite(nLedDrive3, z);
}
else {
x=255;
y=255;
z=255;
analogWrite(nLedDrive1, x);
analogWrite(nLedDrive2, y);
analogWrite(nLedDrive3, z);
}
}
void loop() {
Serial.println("\n");
firstsensor();
delay(200);
}
코드상에 문제가 있는 걸까요? 좀 봐주시면 감사하겠습니다ㅠㅠ
그리고 초음파센서(SZH-USBC-009)사용하고 있는데 가끔 값이 튀는데 이런 오류값을 잡아주려면 어떻게 해야 할까요?
|
수박쨈 2017-09-11 09:25:19
코드상으로는 문제가 없어보이는데 센서의 값이 튄다면 센서의 값이 튀는 현상으로 깜빡임이 발생할 수 있습니다.
제 답이 정답이 아닐 수 있으니 깜빡임이 생길 때 초음파 센서의 측정값을 확인해보세요.
초음파 센서의 값을 확인하면 정확한 원인을 찾을 수 있습니다.
값이 튀는 현상을 잡을 때는 특정 값 이상일 때는 조건문으로 예외처리를 하여 데이터값 이외로 처리해주시면 좋을 듯 합니다.
아니면 초음파 센서에 공급되는 전류가 부족하여 값이 튈 수 있습니다.
그 부분은 초음파 센서만 단일로 사용하여 값을 확인해보세요. 단일로 사용할 때 값이 정상적이라면 전류 문제일 수 있습니다.
또는 거리 측정 시 장애물이 손바닥과 같이 빈틈이 있을 경우 튀는 현상이 있는거 같습니다.
책이나 평평한 판자를 장애물로 사용해보세요.