BASIC4MCU | 질문게시판 | 아두이노 코딩중 두개의 스케치를 하나로 합치는 과정에서 막힙니다.
페이지 정보
작성자 agada 작성일2019-05-30 14:13 조회3,162회 댓글0건본문
이전 글에서 두개의 스케치를 올려야하는데 같은 스케치를 올리는 실수를 해버려서..다시 올립니다.ㅜㅜ
정말 곤란한 상황인데 마스터님 덕분에 많은 도움 받고있습니다 정말 감사합니다ㅠㅠ!
LED에 미세먼지 농도별로 색을 변화시키는 스케치와
LCD에 미세먼지 농도를 출력시키는 스케치 총 두개의 스케치를
하나로 합치고싶은데 C언어를 제대로 배우지 못해 합치는 것에서 막혀 아무일도 하지 못하고 있습니다.
괜찮으시다면 두개의 스케치를 하나로 합치는것좀 도와주세요ㅠㅠ!
1번 스케치 - LED 스케치입니다.
int dust_sensor = A0; // 미세먼지 핀 번호
int rgb_red = 9; // rgb 핀 빨간색 핀
int rgb_green = 11; // rgb핀 녹색 핀
int rgb_blue = 10; // 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; // 센서를 구동하지 않는 시간
void setup(){
Serial.begin(9600); // 시리얼 모니터 시작, 속도는 9600
pinMode(sensor_led,OUTPUT); // 미세먼지 적외선 led를 출력으로 설정
pinMode(4, OUTPUT);
pinMode(rgb_red, OUTPUT); // 3색 LED 모듈 출력으로 설정, 붉은색
pinMode(rgb_green, OUTPUT); // 녹색
pinMode(rgb_blue, OUTPUT); // 파란색
}
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("blue");
}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);
}
2번 스케치 - LCD 스케치입니다.
#include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C의 라이브러리를 불러옵니다.(I2C LCD)
LiquidCrystal_I2C lcd(0x27, 16, 2); // lcd(LCD의 I2C 슬레이브 주소, lcd 1줄당 출력할 글자수, lcd 줄의 수)
int Vo = A0;
int V_LED = 2;
float Vo_value = 0;
float Voltage = 0;
float dustDensity = 0;
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(V_LED, OUTPUT);
pinMode(Vo, INPUT);
lcd.init(); // LCD_I2C 통신을 시작합니다.
lcd.backlight(); // LCD backlight를 ON
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(V_LED, LOW);
delayMicroseconds(280);
Vo_value = analogRead(Vo);
delayMicroseconds(40);
digitalWrite(V_LED, HIGH);
delayMicroseconds(9680);
Voltage = Vo_value / 1024 * 5.0;
dustDensity = (Voltage - 0.3) / 0.005;
Serial.println(dustDensity);
////////////////////////////////////////////////
lcd.clear(); //lcd 화면을 지웁니다.
lcd.home(); //lcd 커서 위치를 0,1로 위치시킵니다.
if( dustDensity > 150 ){ // 매우 나쁨 //
lcd.print("AIR : VERY BAD!!");
}else if( dustDensity > 80){ // 나쁨 //
lcd.print("AIR : BAD! ");
}else if( dustDensity > 30){ // 보통 //
lcd.print("AIR : NORMAL ");
}else{ // 좋음
lcd.print("AIR : GOOD ");
}
lcd.setCursor(0, 1); // lcd 커서의 위치를 4,0으로 설정합니다.
lcd.print("ug/m3:"); // 현재 lcd 커서 위치로부터 "Good Day" 내용을 출력합니다.
lcd.print(dustDensity);
delay(1000);
}
댓글 0
조회수 3,162등록된 댓글이 없습니다.