[추가 질문] 앱인벤터를 통해 블루투스로 습도값이나 가스값의 기준을 변경할 수 있나요?
페이지 정보
작성자 푸링이 작성일19-07-04 09:07 조회6,635회 댓글2건본문
if(GasValue>=350){ // 정회전 // <---- 가스 값이 350 이상일 때 켜지고
if(flag==0){ flag=1; myStepper.step(stepsPerRevolution); ss(); }
}
if(GasValue<300){ // 역회전 // <---- 가스 값이 300 미만일때 꺼지도록
if(flag==1){ flag=0; myStepper.step(-stepsPerRevolution); ss(); }
}
여기서 체크 값을 변수로 변경해야겠죠?
//int GasValue,flag=0;
int GasValue,GasMin=300,GasMax=350,flag=0;
전역변수 추가하고
if(GasValue>=GasMax){ // 정회전 // <---- 가스 값이 350 이상일 때 켜지고
if(flag==0){ flag=1; myStepper.step(stepsPerRevolution); ss(); }
}
if(GasValue<GasMin){ // 역회전 // <---- 가스 값이 300 미만일때 꺼지도록
if(flag==1){ flag=0; myStepper.step(-stepsPerRevolution); ss(); }
}
300,350 대신 변수를 대입합니다.
if(val=='a'){ GasMax=300; GasMin=250; } // 설정값 변경
if(val=='b'){ GasMax=350; GasMin=300; }
if(val=='c'){ GasMax=400; GasMin=350; }
모든 범위를 다 입력하면 좋겠지만 실제로 그렇게까지 쓸 일은 없고
위에는 3종류만 예시로 들었지만 알파벳 소문자 영역이 24가지이므로 더 추가할 수는 있습니다.
(알파벳 대문자 구역도 23개가 비어있습니다. 부족하면 0x80~0xFF 구간도 128개가 더 있고, 그 외에도...)
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2019-06-27 오후 4:15:55
// by Ok-Hyun Park
//
#include <SoftwareSerial.h>
SoftwareSerial btSerial(2,3);
//
#include <Stepper.h>
const int stepsPerRevolution=1024; // 1024는 90도를 의미
Stepper myStepper(stepsPerRevolution,11,9,10,8); // 회전각도와 연결할 핀 번호
//
#include <DHT.h>
#define DHTPIN 4 // DHT센서를 4번 핀에 연결
#define DHTTYPE DHT11
DHT dht(DHTPIN,DHTTYPE);
//
int gasPin=A0; // 가스 핀을 A0번에 연결
int fan=7,LED=13;
//
float h=0,t,f,hic,hif;
int GasValue,flag=0;
char val,mode=1; // 초기값 자동모드
unsigned long dhttime;
//
void setup(){
pinMode(fan,OUTPUT);
pinMode(LED,OUTPUT);
dht.begin();
myStepper.setSpeed(14); // 스텝모터의 회전속도
Serial.begin(9600);
btSerial.begin(9600);
dhttime=millis();
}
//
void ss(){ Serial.print("GasValue="); Serial.println(GasValue); }
//
void loop(){
if(btSerial.available()){
val=btSerial.read(); //
if(val=='2'){ mode=0; digitalWrite(fan,1); } // 수동모드 fan on
if(val=='3'){ mode=0; digitalWrite(fan,0); } // 수동모드 fan off
//
if(val=='4'){ digitalWrite(LED,1); } // LED on
if(val=='5'){ digitalWrite(LED,0); } // LED off
//
if(val=='6'){ mode=0; // 정회전
if(flag==0){ flag=1; myStepper.step(stepsPerRevolution); }
}
if(val=='7'){ mode=0; // 역회전
if(flag==1){ flag=0; myStepper.step(-stepsPerRevolution); }
}
//
if(val=='a'){ GasMax=300; GasMin=250; } // 설정값 변경
if(val=='b'){ GasMax=350; GasMin=300; }
if(val=='c'){ GasMax=400; GasMin=350; }
//
if(val=='A'){ mode=1; } // AUTO 모드로 변경
}
//----------------------------------------------------------------------------
if(mode){ // mode=1(자동모드)일 때만 동작
GasValue=analogRead(gasPin); // 가스핀의 값을 읽기
Serial.print("GasValue="); Serial.println(GasValue);
//
if(GasValue>=350){ // 정회전 // <---- 가스 값이 350 이상일 때 켜지고
if(flag==0){ flag=1; myStepper.step(stepsPerRevolution); ss(); }
}
if(GasValue<300){ // 역회전 // <---- 가스 값이 300 미만일때 꺼지도록
if(flag==1){ flag=0; myStepper.step(-stepsPerRevolution); ss(); }
}
//
if(millis()-dhttime>=1500){ dhttime=millis();
h=dht.readHumidity(); t=dht.readTemperature(); f=dht.readTemperature(true);
if(isnan(h)||isnan(t)||isnan(f)){ Serial.println("Fail DHT!"); return; } // 온습도 읽기 실패
hic=dht.computeHeatIndex(t,h,false);
hif=dht.computeHeatIndex(f,h);
//
Serial.print("습도: "); Serial.print(h); Serial.print("%");
Serial.print("온도: "); Serial.print(t); Serial.println("도 ");
//
if(h>=50){ digitalWrite(fan,1); } // 자동모드 fan on
else { digitalWrite(fan,0); } // 자동모드 fan off
}
}
}
//
현재 가스 값이 350 이상일 때,300 미만일때 켜지고 꺼지도록 만들어 놨는데,
혹시 앱인벤터의 휴대폰화면에서 이 기준 값을 변경할 수 있을까요?
습도값인 h 도 마찬가지구요..50이상일 경우 fan이 돌아가는데 이 값을 40으로 바꾸거나,이런식으로
응용을 해보고 싶습니다.제가 휴대폰에서 변경이 가능해야 뭔가 더 발전될 것 같습니다^^
------------------------------------------------------------------------
라고 답변을 받았었는데, 혹시 a,b,c라는 알파벳으로 구분을 짓는게 아닌, 제가 원하는 숫자로
직접 숫자를 휴대폰에서 써서 아두이노로 보낼 수는 없을까요? 아직 지식이 얕아서 가능한 부분인지,
아예 불가능한 부분인지 궁금해서 질문하게 되었습니다. 감사합니다.
댓글 : 2
조회수 : 6,635
master님의 댓글
master 작성일
시리얼 통신을 공부하시면 원하는대로 할 수 있습니다.
Serial.parseInt
Serial.parsefloat
이런 함수를 공부하시거나
GPS 예제를 공부해서 만들어보세요
푸링이님의 댓글
푸링이
long GasMax = Serial.parseInt();
long GasMin = Serial.parseInt();
이런식으로 정의를 하고,
Serial.println(GasMax);
Serial.print("GasMax : ");
Serial.println(GasMin);
Serial.print("GasMin : ");
max값과 min값을 받아들여서 해볼려고 했는데 오류는 뜨지않지만 휴대폰에서 아두이노로 전송이 잘 되지 않는것 같습니다.
다른 가스값과 온도습도값이 같이 출력이 되는 데 이게 문제일까요?
max값과 min값을 입력해주면 바뀌었다는 것만 확인시켜주고 다시 안나왔으면 좋겠는데 많이 복잡해보이네요