따로 실행했을 때는 동작하는데 묶으니까 동작이 안 되네요 어떻게 해야하나요?
int dust_sensor = A0; // 미세먼지 핀 번호
int rgb_red = 5; // rgb 핀 빨간색 핀
int rgb_green = 6; // rgb핀 녹색 핀
int rgb_blue = 7; // rgb핀 파란색 핀
float dust_value = 0; // 센서에서 입력 받은 미세먼지 값
float dustDensityug=0; // ug/m^3 값을 계산
int sensor_led = 12; // 미세먼지 센서 안에 있는 적외선 led 핀 번호
int sampling = 280; // 적외선 led를 키고, 센서 값을 읽어 들여 미세먼지를 측정하는 샘플링 시간
int waiting = 40;
float stop_time = 9680; // 센서를 구동하지 않는 시간
int Raindrops_pin = A1; // 빗방울센서 핀을 A1으로 설정
int LED = 8; // 노란색 LED 핀을 8번핀으로 설정
const int Active_Buzzer = 4;
int led = 13; // LED 핀 번호 13
int flame = 9; // 불꽃감지 센서 핀 번호 9
int state = 0; // 불꽃감지 센서의 상태 값 저장 변수
void setup(){
pinMode(sensor_led,OUTPUT); // 미세먼지 적외선 led를 출력으로 설정
pinMode(4, OUTPUT);
pinMode(rgb_red, OUTPUT); // 3색 LED 모듈 출력으로 설정, 붉은색
pinMode(rgb_green, OUTPUT); // 녹색
pinMode(rgb_blue, OUTPUT); // 파란색
Serial.begin(9600); // Serial monitor 전원 인가
pinMode(A0 , INPUT); // 빗방울 감지핀을 아날로그 입력으로 설정
pinMode(LED, OUTPUT); // 노란색 LED핀을 출력으로 설정
pinMode (Active_Buzzer, OUTPUT);
digitalWrite(Active_Buzzer, HIGH);
delay(300);
digitalWrite(Active_Buzzer, LOW);
pinMode(led, OUTPUT); // LED를 출력으로 설정
pinMode(flame, INPUT); // 불꽃 감지 센서를 입력으로 설정
Serial.begin(9600); // 시리얼 통신, 속도는 9600
}
void loop(){
digitalWrite(sensor_led, LOW); // LED 켜기
delayMicroseconds(sampling); // 샘플링해주는 시간.
dust_value = analogRead(dust_sensor); // 센서 값 읽어오기
delayMicroseconds(waiting); // 너무 많은 데이터 입력을 피해주기 위해 잠시 멈춰주는 시간.
digitalWrite(sensor_led, HIGH); // LED 끄기
delayMicroseconds(stop_time); // LED 끄고 대기
dustDensityug = (0.17 * (dust_value * (5.0 / 1024)) - 0.1) * 1000; // 미세먼지 값 계산
Serial.print("Dust Density [ug/m3]: "); // 시리얼 모니터에 미세먼지 값 출력
Serial.print(dustDensityug);
if(dustDensityug <= 30.0){ // 대기 중 미세먼지가 좋음 일 때 초록색 출력
analogWrite(rgb_red, 0);
analogWrite(rgb_green, 0);
analogWrite(rgb_blue, 255);
Serial.print(" ");
Serial.println("green");
}else if(30.0 < dustDensityug && dustDensityug <= 80.0){ // 대기 중 미세먼지가 보통 일 때 녹색 출력
analogWrite(rgb_red, 0);
analogWrite(rgb_green, 255);
analogWrite(rgb_blue, 0);
Serial.print(" ");
Serial.println("green");
}else if (80.0 < dustDensityug && dustDensityug <= 150.0){ // 대기 중 미세먼지가 나쁨 일 때 노란색 출력
analogWrite(rgb_red, 255);
analogWrite(rgb_green, 155);
analogWrite(rgb_blue, 0);
Serial.print(" ");
Serial.println("yellow");
}else{ // 대기 중 미세먼지가 매우 나쁨 일 때 빨간색 출력
analogWrite(rgb_red, 255);
analogWrite(rgb_green, 0);
analogWrite(rgb_blue, 0);
Serial.print(" ");
Serial.println("red");
}
delay(2000);
Serial.println(analogRead(A1)); // 센서값을 시리얼모니터로 전송
delay(100); // 센서값 간격 0.1초로 설정
if(analogRead(A0) < 900){ // 빗방울 감지핀의 수위가 500미만이면
digitalWrite( 8, HIGH);
delay(100);
digitalWrite( 8, LOW);
delay(100); // 0.1초 간격으로 파랑LED가 깜빡깜빡
}
else { // 빗방울 감지핀의 출력값이 500이상이면
digitalWrite( 8, LOW); // 파랑LED는 OFF유지
delay(100);
state = digitalRead(flame); // 불꽃 감지 센서값 입력받음
digitalWrite(led, LOW); // 초기 LED값을 0FF로 설정해주기
if (state == 1){ // 불꽃감지 센서의 값이 1일때(불꽃이 감지 되었을 때)
Serial.println("ON"); // 시리얼 통신에 센서값 출력해 주기.
digitalWrite(led, LOW); // LED OFF
digitalWrite(Active_Buzzer, LOW); // 피에조부저OFF
delay(100);
}
else { // 불꽃감지 센서의 값이 0일때 (불꽃이 감지 되지 않았을 때)
Serial.println("OFF"); // 시리얼 통신에 센서값 출력해 주기.
digitalWrite(Active_Buzzer, HIGH); //피에조부저ON
digitalWrite(led, HIGH); //
}
delay(100);
}
}
댓글목록
작성자 아두
작성일 2021-10-19
평점
컴파일에서는 에러가 없는데.. 직접 회로 구성해볼 수 있는 상황이 아니라면 코드만 보고는 오류잡기가 쉽지 않을 것 같네요
일단 회로 구성이 올바른지 확인해봐야할 것 같구요
여러 코드를 합치게 되면 컴파일은 되더라도 꼬이는 부분이 발생하여 이상동작처럼 보이게 되는 경우가 있는데
각 부분에 Serial.print 문을 추가해서 상태 변수가 변하는 시점마다 시리얼 모니터에서 제대로 변환되고 그 변수 따라 정확히 동작이 넘어가는지 확인해보세요
구간별로 천천히 디버깅 하면 오류를 잡을 수 있을 거에요