정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

앱인벤터에서 변수의 데이터를 보내서 아두이노로 받는 방법이 궁금합니다.
푸링이 | 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