안녕하세요 아두이노를 공부한지 얼마 안된 학생입니다!
제가 초음파센서로 거리에 따라 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)사용하고 있는데 가끔 값이 튀는데 이런 오류값을 잡아주려면 어떻게 해야 할까요?
|