#include <SoftwareSerial.h> // 블루투스 시리얼 통신 라이브러리 추가
#define BT_RXD 9 // <--TXD
#define BT_TXD 8 // -->RXD
SoftwareSerial bluetooth(BT_RXD, BT_TXD);
boolean pSetup = false; // 셋업모드가 아님
int pMode = 1; // 정지모드
int dcPin =3; // 릴레이 신호핀
unsigned long setTime=0; // 작동시간
void setup()
{
bluetooth.begin(9600);
pinMode( dcPin,OUTPUT);
}
void loop()
{
char code=' ';
if (bluetooth.available()) code = char(bluetooth.read()); //블루투스에서 한문자 받음
else code= ' ';
switch( code ){
case 'G' : gCommand(); break; // 초기화
case 'S' : digitalWrite( dcPin, LOW ); // 셋업모드 진입
pSetup=true; break;
case 's' : digitalWrite( dcPin, LOW ); // 셋업모드에서 나옴
pSetup=false; break;
case 'T' : digitalWrite( dcPin, HIGH ); break; // 수동모드인경우 릴레이 On 신호
case 't' : digitalWrite( dcPin, LOW ); break; // 수동모드인경우 릴레이 Off 신호
case '0' : pMode=0; break; // 수동 모드
case '1' : pMode=1;
digitalWrite( dcPin, LOW ); break; // 정지모드
case '2' : pMode=2;
digitalWrite( dcPin, HIGH ); break; // 지속 출력 모드
case '3' : pMode=3; break; // 1초동작 0.2초정지
case '4' : pMode=4; break; // (pMode-2)초 동작 0.2초 정지
case '5' : pMode=5; break;
case '6' : pMode=6; break;
case '7' : pMode=7; break;
case '8' : pMode=8; break;
case '9' : pMode=9; break;
}
if( !pSetup ) outDC(); // 셋업모드가 아니면 릴레이 제어 함수 실행
}
void gCommand(){ // 초기화 함수
pMode=1; // 정지 모드
pSetup =false; // 셋업모드가 아님
setTime=0; // 변수 초기화
digitalWrite( dcPin,LOW);
}
void outDC() // 릴레이 출력함수 // delay()를 사용하면 블루투스로 명령 받는 것도 지연됨
{ // 그래서 계속 loop는 돌면서 시간을 체크하며 ON Off를 반복해야 함
unsigned long cTime = millis(); // 현재시간
if( pMode < 3 ) return; // 수동모드,정지모드,지속모드는 체크 필요 없음
if( cTime > setTime ) digitalWrite( dcPin,LOW); // 현재시간이 세팅시간 보다 크면 Off
// 현재시간이 세팅시간보다 0.2초 크면 다시 On하고 세팅시간을 현재시간 +(pMode-2)초로 설정
if( cTime > setTime+200 ) { digitalWrite( dcPin,HIGH); // pMode 3이면 1초간 동작 0 .2초간 정지
setTime=cTime+(pMode-2)*1000; }
}
'프로젝트 > 앱조정 릴레이 DC모터 패턴 출력하기' 카테고리의 다른 글
앱인벤터 블록 소스 (0) | 2022.08.14 |
---|---|
릴레이로 DC모터 제어하기 (0) | 2022.08.14 |