아두이노 소스를 짜고 있는데요. 블루투스 모듈, 온습도센서, 조도센서 를 가지고 모터를 구동시키는 커튼을 만들려고 합니다. 다름이 아니라 지금 가지고 있는 코드로는 작동이 되질 않아서요.
전송값은 1,2,U,D를 쓰려고하는데요 1= 자동모드(1한번더입력시취소) 2=수동모드(2한번더입력시취소) U= UP =D= DOWN 입니다. 자동모드상태에선 온습도, 조도를 기준으로 자동으로 커튼이 올라가거나 내려가야하고 수동모드상태에선 U D 로 위아래로 동작이 되어야 합니다.
#include <SoftwareSerial.h> //시리얼 통신 라이브러리 호출
#include <DHT11.h> //라이브러리 불러옴
DHT11 dht11(6);
int BT;
int flag = 0;
int light;
int blueTx=2; //Tx (보내는핀 설정)
int blueRx=3; //Rx (받는핀 설정)
SoftwareSerial mySerial(blueTx, blueRx); //시리얼 통신을 위한 객체선언
String myString=""; //받는 문자열
void setup() {
Serial.begin(9600); //시리얼모니터
mySerial.begin(9600); //블루투스 시리얼 개방
pinMode(12,OUTPUT);
// 9번핀을 출력으로 설정합니다. 강제 정지 기능을 담당합니다.
pinMode(9,OUTPUT);
}
void Sensing()
{
int err;
float temp, humi;
Serial.println("inner");
if((err=dht11.read(humi, temp)) == 0) //온도, 습도 읽어와서 표시
{
Serial.print("temperature:");
Serial.print(temp);
Serial.print(" humidity:");
Serial.print(humi);
Serial.println();
}
else //에러일 경우 처리
{
Serial.println();
Serial.print("Error No :");
Serial.print(err);
Serial.println();
}
delay(1000); //1초마다 측정
}
void Cutton_On()
{
Serial.println("motor start");
digitalWrite(12,HIGH);
// 강제 정지 기능은 LOW 상태로 두며
digitalWrite(9,LOW);
// 100의 값으로 PWM을 제어합니다.
analogWrite(3,100);
//3초간 대기합니다.
delay(3000);
Serial.println("stop!");
// 강제 정지 기능을 실행합니다.
digitalWrite(9,HIGH);
// 1초간 대기합니다.
delay(1000);
}
void Cutton_Off()
{
Serial.println("motor stop");
digitalWrite(12,LOW);
// 강제 정지 기능을 LOW상태로 둡니다.
digitalWrite(9,LOW);
// 50의 값으로 PWM (속도)를 조절합니다.
analogWrite(3,100);
// 3초간 대기합니다.
delay(3000);
Serial.println("stop!");
// 강제 정지 기능을 실행합니다.
digitalWrite(9,HIGH);
// 1초간 대기합니다.
delay(1000);
}
void loop() {
while(mySerial.available()) //mySerial 값이 있으면
{
char myChar = (char)mySerial.read(); //mySerial int형식의 값을 char형식으로 변환
myString+=myChar; //수신되는 문자열을 myString에 모두 붙임 (1바이트씩 전송되는 것을 모두 붙임)
delay(5); //수신 문자열 끊김 방지
}
if(!myString.equals("")) //myString 값이 있다면
{
Serial.println("input value: "+myString); //시리얼모니터에 myString값 출력
if(myString=="on") //myString 값이 'on' 이라면
{
Serial.println("on!!");
Sensing();
// Auto_Mode();
Cutton_On();
}
if(myString=="off") //myString 값이 'on' 이라면
{
Serial.println("off!!");
Sensing();
//Hand_Mode();
Cutton_Off();
}
myString=""; //myString 변수값 초기화
}
}
void Auto_Mode()
{
light = analogRead(A4);
//brightness control
if(light < 500 && flag == 0)
{
Cutton_On();
flag = 1;
Serial.println(flag);
}
else if(light >= 500 && flag == 1)
{
Cutton_Off();
flag = 0;
Serial.println(flag);
}
}
void Hand_Mode() // 라이트 어플리케이션 수동모드
{
while(!mySerial.available()) // 블루투스 데이터 값이 들어올 때까지 동작 대기
if(mySerial.available()) // 블루투스 데이터가 수신 될 경우
{
BT = mySerial.read(); // 블루투스로 수신된 데이터를 BT 변수에 저장
if(BT == 'd'&& flag == 0) // BT에 저장된 값이 d이며, 플래그가 0일 경우
{
Cutton_On(); // 커튼 동작 함수
flag = 1; // 플래그 SET
}
else if(BT == 'u'&& flag == 1) // BT에 저장된 값이 u이며, 플래그가 1일 경우
{
Cutton_Off(); // 커튼 동작 함수
flag = 0; // 플래그 RESET
}
else
{
}
}
}
지금 이 코드에서 무엇을 수정하고 추가해야 할까요 ? 제발 부탁드립니다 ㅠ
|