본문 바로가기

프로젝트/앱조정 릴레이 DC모터 패턴 출력하기

아두이노 소스코드

#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; }           
}