BASIC4MCU | 질문게시판 | 밑에 글에 댓글을 남겼으나 못보신 것 같아.. 다시 여쭤봅니다..
페이지 정보
작성자 푸링이 작성일2019-05-29 23:18 조회3,849회 댓글1건본문
아두이노 앱인벤터 습도값을 측정하여 팬모터를 구동중입니다! 라는글로 전페이지에 여쭤보았습니다.
일단 마스터님의 답변해주신 코드로 실행해보았으나, 조건대로 움직여주지않고
무한회전을 하고있어서, 그 코드를 바탕으로 다르게 수정도 해보고 테스트도 해보았으나, 모두 개의치않아서
다시 여쭤보려고 다시 글로 남겨봅니다..
#include <SoftwareSerial.h>
SoftwareSerial btSerial(2,3); // 소프트웨어 시리얼 객체이름을 btSerial로 지정
//
#include <DHT.h>
#define DHTPIN 4 // DHT센서를 4번 핀에 연결
#define DHTTYPE DHT11
DHT dht(DHTPIN,DHTTYPE);
//
int fan=8;
//
char val,mode='A';
boolean states=false;
//
void setup(){
pinMode(fan,OUTPUT);
dht.begin();
Serial.begin(9600); Serial.println("DHTxx test!");
btSerial.begin(9600);
}
//
void loop(){
if(mode=='A'){ // 자동모드
delay(2000);
float h=dht.readHumidity(); float t=dht.readTemperature(); float f=dht.readTemperature(true);
if(isnan(h)||isnan(t)||isnan(f)){ Serial.println("Fail DHT!"); return; } // 온습도 읽기 실패
float hic=dht.computeHeatIndex(t,h,false);
float hif=dht.computeHeatIndex(f,h);
//
Serial.print("습도: "); Serial.print(h); Serial.print("% ");
Serial.print("온도: "); Serial.print(t); Serial.println(" 도 ");
//
if(h>=50){ states=true; digitalWrite(fan,1); }
else { states=false; digitalWrite(fan,0); }
}
//
if(btSerial.available()){
val=btSerial.read();
if(val=='B'){ mode='B'; // 수동모드
if(val=='1'){ mode='1'; digitalWrite(fan,1); }
if(val=='0'){ mode='0'; digitalWrite(fan,0); }
}
}
}
마스터님 코드를 응용해, A일경우 자동모드로 습도를 계산해 팬을 동작시키고,
B일경우, 수동모드로 동작 해 VAL == 1일때, 모드 1 동작, 팬을 돌리고, 0일때는 멈추고,
이것도 쭉 모터가 돌아가기만 하네요.
1) 습도를 측정 후, 일정 습도수준을 올라가면 자동으로 동작 반대로 떨어지면 멈춤
2) 제가 수동으로 on/off 버튼을 통해 (a, b) 키고 끄는 동작을 실행
혹은 수동과 자동 각각 구분해서, 블록코딩과 아두이노 코딩이 필요할까요?
댓글 1
조회수 3,849master님의 댓글
master 작성일
if(val=='B'){ mode='B'; // 수동모드
문장 뒤에 중괄호가 빠졌습니다.(아랫쪽으로 내려갔군요)
//
if()문도 잘 모르면 알고리즘을 코드로 구현할 수 있을까요?
기초문법부터 차근차근 공부하실 것을 권합니다.