BASIC4MCU | 질문게시판 | 아두이노 코딩 관련 질문 드립니다.!
페이지 정보
작성자 Creavolution 작성일2019-11-12 00:59 조회3,272회 댓글0건첨부파일
본문
안녕하세요. master님 항상 세심한 답변 감사드립니다. 코딩 중 코드가 잘 되지 않아 문의드립니다.
동작설명 : 살균 및 건조기능이 있는 가습기
습도 70% 이상 : 가습기를 off 하고, 모터가 20초간 건조 시작후 정지 (**그러나, 20초동안 건조를 하는동안에도 습도가 70%미만으로 내려갈 시 모터를 정지하고 가습기가 동작)
습도 70% 미만 : 가습기 on 상태에서 수위에 따라 (red, green, blue) 표시
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT11.h>
LiquidCrystal_I2C lcd(0x27,16,2);
int water_pin = A3; //수분수위센서 A3에 연결
int red = 2;
int green = 3;
int blue = 4;
int pin=5; //온습도센서핀
int uvled = 8; // uv led(살균기능)
int fan = 9; // fan (가습기 끌어올리는 기능)
int relay = 13;
int m1=0;//정방향 (모터)
int m2=0;//역방향 (모터)
char stat = 0;
DHT11 dht11(pin);
void setup()
{
Serial.begin(9600);
lcd.init();
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(uvled, OUTPUT);
pinMode(relay, OUTPUT); //relay
pinMode(9, OUTPUT); //
}
void loop()
{
int err;
int val = analogRead(A3);
float temp, humi;
Serial.println(val); // 센서값을 시리얼 모니터로 출력
delay(10);
if((err=dht11.read(humi, temp))==0){
lcd.backlight();
lcd.display();
lcd.print("TEMP: ");
lcd.print(temp);
lcd.setCursor(0,1);
lcd.print("HUMIDITY: ");
lcd.print(humi);
if(humi>70){
if(stat != 1){
stat = 1;
digitalWrite(13, HIGH); //relay 구문=가습기 오프
digitalWrite(8, HIGH); //uvled on
digitalWrite(9, LOW); // fan off
digitalWrite( 2, LOW); // red off
digitalWrite( 3, LOW); // green off
digitalWrite( 4, LOW); // blue off
m1=0;
m2=150;
analogWrite(6,m1);
analogWrite(7,m2);
delay(20000); // 여기서 20초간 모터(건조) 동작을 하는 상태더라도 습도가 70 아래로 내려가면 가습기가 동작하게 하고 싶습니다.
m1=0; // 모터정지
m2=0; // 모터정지
analogWrite(6,m1);
analogWrite(7,m2);
}
}
else if( (humi<70) && (0 < val && val <= 210)) {
if(stat !=2){
stat 2;
digitalWrite(13, LOW); //가습기 온
digitalWrite(8, LOW); //uvled off
digitalWrite(9, HIGH);// fan on
digitalWrite( 2, HIGH); // red on
digitalWrite( 3, LOW); // green off
digitalWrite( 4, LOW); // blue off
m1=0; // 모터정지
m2=0; // 모터정지
analogWrite(6,m1);
analogWrite(7,m2);
delay(10);
}
}
else if( (humi<70) && (210 < val && val <= 260)){ // 450 < 센서값 ≤570 이면 GREEN LED ON
if(stat !=3){
stat=3;
digitalWrite(13, LOW); //가습기 온
digitalWrite( 2, LOW); //red off
digitalWrite( 3, HIGH); // green on
digitalWrite( 4, LOW); // blue off
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
m1=0; // 모터정지
m2=0; // 모터정지
analogWrite(6,m1);
analogWrite(7,m2);
delay(10);
}
}
else if( (humi<70) && (260 < val && val <= 350)){ // 570< 센서값 ≤620 이면 BLUE LED ON
if(stat!=4){
stat =4;
digitalWrite(13, LOW); //가습기 온
digitalWrite( 2, LOW); // red off
digitalWrite( 3, LOW); // green off
digitalWrite( 4, HIGH); // red on
digitalWrite(8, LOW);
digitalWrite(9, HIGH);
m1=0; // 모터정지
m2=0; // 모터정지
analogWrite(6,m1);
analogWrite(7,m2);
delay(10);
}
}
else //값이 제대로 받아지지 않는경우 error 표시
{
lcd.backlight();
lcd.display();
lcd.print("ERROR NO.: ");
lcd.print(err);
}
delay(1500);
lcd.clear();
}
}
}
질문1) 코딩 중 **표시
(**그러나, 20초동안 건조를 하는동안에도 습도가 70%미만으로 내려갈 시 모터를 정지하고 가습기가 동작)를 어떻게 접근해야할지 모르겠습니다.
코딩중 (1) 번처럼 delay20000을 해놓았기 때문에, 20초간은 다른 동작을 멈추고 모터만 동작하여, 원하는 동작이 되질 않습니다.
delay함수 대신 millis 함수를 사용하여 하여야 할 것 같은데, 어떻게 코딩을 접근해야 할지 도무지 모르겠습니다. ㅜㅜ
질문2) 위 코딩에서 동작시 lcd 에 나타나는 표기가
------정상-----
TEMP : 25
HUMI : 65
-----------------
--E or T 표기--
TEMP : 25
HUMI : 65E
-----------------
TEMP : 25
HUMI : 65T
-------------------
이렇게 LCD에 습도 표시 옆에 E, T가 같이 뜨는데 이유를 알 수 있을 까요?? (E는 에러표시같은데 이유를 모르겠습니다.)
댓글 0
조회수 3,272등록된 댓글이 없습니다.