BASIC4MCU | 질문게시판 | 답변 : 아두이노 먼지센서쪽에서 오류값에러...!
페이지 정보
작성자 master 작성일2019-04-16 14:45 조회4,640회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=8260
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-04-16 오후 2:51:56// by Ok-Hyun Park#include <HID.h>//#include <MsTimer2.h>#define SW1 2#define SW2 3// SW#define MOTER_B 6#define MOTER_A 7#define MOTER_EN 8//MOTERint buttonState1=0;int buttonState2=0;int dust_val;int DUSTpin=8; //먼지센서unsigned long duration; //먼지센서unsigned long starttime; //시작 시간unsigned long sampletime_ms=1000; //샘플시간 1초 마다 업데이트unsigned long lowpulseoccupancy=0; //Low 신호가 지속된 시간을 초기화float ratio=0; //비율float concentration=0; //입자 농도 0으로 초기화float pcsPerCF=0; //한 입자당 CF를 0으로 초기화float ugm3=0; //최종 값으로 세제곱미터 당 마이크로 그램(㎍/㎥)static int Timer=0;static int Timer_for_Sensor=0;static int MOTER_DIR=0;static int DIR_flag=0;static bool flag=1;static bool dust_flag=1; //Timer clear flagstatic bool before_dust=0; //Timer clear flagstatic bool dust_chattering_flag=1; //Timer clear flagstatic bool MOTER_flag=0; //Timer clear flagstatic bool MOTER_flag1=0; //Timer clear flag//void MOTER_LEFT(){digitalWrite(MOTER_EN,HIGH); digitalWrite(MOTER_A,HIGH); digitalWrite(MOTER_B,LOW);Serial.print("left"); Serial.print("\n");}//void MOTER_RIGHT(){ //blinddigitalWrite(MOTER_EN,HIGH); digitalWrite(MOTER_A,LOW); digitalWrite(MOTER_B,HIGH);Serial.print("right"); Serial.print("\n");}//void MOTER_STOP(){digitalWrite(MOTER_EN,LOW); Serial.print("stop"); dust_chattering_flag=1;}//void key_scan(){buttonState1=digitalRead(SW1); if(!buttonState1)MOTER_DIR=1;buttonState2=digitalRead(SW2); if(!buttonState2)MOTER_DIR=2;}//void dust_r(){duration=pulseIn(DUSTpin,LOW);lowpulseoccupancy=lowpulseoccupancy+duration;if((millis()-starttime)>sampletime_ms){ //만약 샘플 시간이 5초라면ratio=lowpulseoccupancy/(sampletime_ms*10.0); // Integer percentage 0=>100concentration=1.1*pow(ratio,3)-3.8*pow(ratio,2)+520*ratio+0.62; // 미세먼지 센서 사양 시트 곡선 사용pcsPerCF=concentration*100; // 입자 농도에 100을 곱하면 입자당 CF값ugm3=concentration*100/13000; // 입자당 13000으로 나누면 세제곱미터당 마이크로그램의 미세먼지 측정값(ug/m3)}}//void MOTER_run(){switch(MOTER_DIR){case 0: MOTER_STOP(); DIR_flag=0; break;case 1:{if(DIR_flag!=1){ flag=1; }if(flag){ Timer=0; flag=0; }MOTER_LEFT();DIR_flag=1;break;}case 2:{if(DIR_flag!=2){ flag=1; }if(flag){ Timer=0; flag=0; }MOTER_RIGHT();DIR_flag=2;break;}}}//void ISR_Timer(){if(++Timer>25){ Timer=0; MOTER_DIR=0; flag=1; }}//void dust_run(){if(dust_chattering_flag){dust_val=analogRead(ugm3);Serial.println(dust_val);dust_val=dust_val/81; //if(before_dust!=dust_val){ before_dust=dust_val; MOTER_flag=1; }else if(before_dust==dust_val){ MOTER_flag=0; }if(MOTER_flag){if(dust_val){ MOTER_DIR=1; }else{ MOTER_DIR=2; }}}}//void setup(){pinMode(SW1,INPUT); pinMode(SW2,INPUT);pinMode(MOTER_A,OUTPUT); pinMode(MOTER_B,OUTPUT); pinMode(MOTER_EN,OUTPUT);pinMode(DUSTpin,INPUT);Serial.begin(9600);MsTimer2:: set(100,ISR_Timer);MsTimer2:: start();pinMode(8,INPUT); //미세먼지 센서 입력}//void loop(){key_scan();dust_r();MOTER_run();dust_run();}
댓글 1
조회수 4,640마늘짱아찌님의 댓글
마늘짱아찌 작성일감사합니다 덕분에 오류 잘해결되었습니다 ㅠㅠ 즐거운 점심되세요!