에듀이노-코딩교육 전문 쇼핑몰 에듀이노-코딩교육 전문 쇼핑몰

학교, 공공기관이라면 후불결제하세요!

 
현재 위치
  1. 게시판
  2. 묻고답하기

묻고답하기

기술문의 게시판입니다.

게시판 상세
제목 아두이노 동작이 안 돼요
작성자 조승철 (ip:)
  • 작성일 2021-10-19
  • 추천 추천하기
  • 조회수 485

따로 실행했을 때는 동작하는데 묶으니까 동작이 안 되네요 어떻게 해야하나요?


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

 }                

  

}

 


게시글 신고하기

신고사유

신고해주신 내용은 쇼핑몰 운영자의 검토 후 내부 운영 정책에 의해 처리가 진행됩니다.

평점 0점
첨부파일
비밀번호 수정 및 삭제하려면 비밀번호를 입력하세요.
  • 아두 2021-10-19 0점
    수정 삭제 댓글
    스팸글 여러 코드를 합치신 건가요?

    컴파일에서는 에러가 없는데.. 직접 회로 구성해볼 수 있는 상황이 아니라면 코드만 보고는 오류잡기가 쉽지 않을 것 같네요

    일단 회로 구성이 올바른지 확인해봐야할 것 같구요

    여러 코드를 합치게 되면 컴파일은 되더라도 꼬이는 부분이 발생하여 이상동작처럼 보이게 되는 경우가 있는데

    각 부분에 Serial.print 문을 추가해서 상태 변수가 변하는 시점마다 시리얼 모니터에서 제대로 변환되고 그 변수 따라 정확히 동작이 넘어가는지 확인해보세요

    구간별로 천천히 디버깅 하면 오류를 잡을 수 있을 거에요

스팸신고 스팸해제

댓글 수정

비밀번호 :

수정 취소

/ byte

비밀번호 : 확인 취소

댓글 입력

댓글달기이름 :비밀번호 : 관리자답변보기

확인

/ byte

왼쪽의 문자를 공백없이 입력하세요.(대소문자구분)

에게만 댓글 작성 권한이 있습니다.

댓글 입력

댓글달기이름 :비밀번호 :

확인

/ byte

왼쪽의 문자를 공백없이 입력하세요.(대소문자구분)

에게만 댓글 작성 권한이 있습니다.

«
»