BASIC4MCU | 질문게시판 | 아두이노 관련 질문드립니다.
페이지 정보
작성자 박승규 작성일2019-02-12 16:08 조회1,290회 댓글1건본문
미세먼지 센서와 온습도 센서를 인풋으로 받고 시리얼 모니터로 측정결과를 확인까지 하였습니다.
여기서 미세먼지 농도를 led개수로 표현을 하고 싶은데 어떻게 코딩을 하면 될까요???
예를들면 PM2.5 <30ug/m3면 LED 1개가 들어오고 <60ug/m3이면 LED가 두개가 들어오는 방식으로 표현하고 싶습니다.
조언 부탁드립니다.
#include <DHT11.h>
int pin=4;
DHT11 dht11(pin);
//
unsigned char r,cnt=0,buf[32]={0,};
int err;
float temp,humi;
long t;
//
void setup(){
Serial.begin(9600);
Serial3.begin(9600);
t=millis();
}
//
void loop(){
if(Serial3.available()){ // buf7003
r=Serial3.read();
if((r==0x42)&&(cnt==32))cnt=0;
if(cnt<32){
buf[cnt]=r;
if(++cnt==32){
Serial.print("Dust raw data debugging: ");
Serial.print("2.5ug/m3: ");
Serial.print(buf[12]);
Serial.print(buf[13]);
Serial.print(" ");
Serial.print("10ug/m3:");
Serial.print(buf[14]);
Serial.print(buf[15]);
Serial.println(" ");}
}
}
//----------------------
if(millis()-t>60000){ t=millis();
if((err=dht11.read(humi,temp))==0){
Serial.print("temperature: ");
Serial.print(temp);
Serial.print(" humidity: ");
Serial.println(humi);}
else{ Serial.println();
Serial.print("Error No: ");
Serial.println(err); }}
}
댓글 1
조회수 1,290master님의 댓글
master 작성일
<30ug/m3면 LED 1개가 들어오고 <60ug/m3이면 LED가 두개가 들어오는 방식
//
LED는 몇개일까요?
LED가 5개이고
농도의 범위가
min 0 ug
max 1234 ug
이렇게 된다면
1. int로 val 라는 변수명으로 변환해서 저장하고
2. if(val<min)val=min; // min이 0이라면 필요 없는 문장이죠
3. if(val>max)val=max;
4. val-=min; // offset 처리
5. int led_cnt= 전체LED개수 * val / (max-min)
계산식이 맞는지 체크해보세요
공식은 단순한 비례식입니다.
입력농도/전체농도범위 = 켜야할LED개수/전체LED개수