코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
앱인벤터에서 변수의 데이터를 보내서 아두이노로 받는 방법이 궁금합니다.
푸링이 | 2019-09-13
|
|
---|---|
현재, 왼쪽에서는 실시간으로 온습도를 받아들이고 있고,
저는 오른쪽 전송쪽에서 앱인벤터 내에서 습도값을 직접 작성하면 라벨쪽에 작성되는 것 까지 구현을 했습니다.
그런 데 블루투스로 넘겨 아두이노 측에서 이 신호를 받아 제가 작성한 숫자에 H가 넘어가 습도값이 그 숫자로 바뀌면서
팬모터가 돌아가고 안돌아가고를 결정해야 하는데, 아두이노 측 코드가 문제인지 실행이 되지를 않네요..
조금만 더 도움좀 주실 수 있나요..?
--------------------------------------------------------------------------------------
#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 3 // DHT센서를 3번 핀에 연결
#define DHTTYPE DHT11
DHT dht(DHTPIN,DHTTYPE);
//
int gasPin=A0; // 가스 핀을 A0번에 연결
int fan=13,LED1=5, LED2=6, LED3=7;
//
float h=0,H=60,t,f,hic,hif;
int GasValue,flag=0;
char val,mode=1; // 초기값 자동모드
unsigned long dhttime;
//
void setup(){
pinMode(fan,OUTPUT);
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(LED3,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=='4'){ mode=0; // 정회전
if(flag==0){ flag=1; myStepper.step(stepsPerRevolution); }
}
if(val=='5'){ mode=0; // 역회전
if(flag==1){ flag=0; myStepper.step(-stepsPerRevolution); }
}
if(val=='2'){ mode=0; digitalWrite(fan,1); } // 수동모드 fan on
if(val=='3'){ mode=0; digitalWrite(fan,0); } // 수동모드 fan off
//
if(val=='6'){digitalWrite(LED1, 1); } // 1번째 LED ON
if(val=='7'){digitalWrite(LED1, 0); } // OFF
if(val=='8'){digitalWrite(LED2, 1); } // 2번째 LED ON
if(val=='9'){digitalWrite(LED2, 0); } // OFF
if(val=='d'){digitalWrite(LED3, 1); } // 3번째 LED ON
if(val=='e'){digitalWrite(LED3, 0); } // OFF
//
//
if(val=='A'){ mode=1; } // AUTO 모드로 변경
}
//----------------------------------------------------------------------------
if(mode){ // mode=1(자동모드)일 때만 동작
GasValue=analogRead(gasPin); // 가스핀의 값을 읽기
Serial.print("GasValue = "); Serial.println(GasValue);
delay(3000);
//
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>=H){ digitalWrite(fan,1); } // 자동모드 fan on
else { digitalWrite(fan,0); } // 자동모드 fan off
//
if(h>=60) {digitalWrite(LED1, 1); } // 습도가 60이상일 경우, 1번째 LED ON
else {digitalWrite(LED1, 0); }
if(h>=55 && h<60) {digitalWrite(LED2, 1); } // 습도가 58이상, 60미만일 경우, 2번째 LED ON
else {digitalWrite(LED2, 0); }
if(h<55) {digitalWrite(LED3, 1); } // 습도가 58미만일 경우, 3번째 LED ON
else {digitalWrite(LED3, 0); }
}
}
}
|
|
이전글 | 보드 Arduino/Genuino Uno 컴파일 에러. | 2019-09-11 |
다음글 | PCB 제작 해보시분들 도와주세요 | 2019-09-14 |