BASIC4MCU | 질문게시판 | 답변 2: 안녕하세요 아두이노 질문 추가입니다
페이지 정보
작성자 master 작성일2018-06-12 17:19 조회7,596회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=1777
본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2018-06-12 오후 5:21:15// by Ok-Hyun Park//#include <MsTimer2.h>//#define PWM 180#define bSW_DN 2 // 4.7k=10k 대체,capacitor x#define bSW_UP 3#define wSW_CLOSE 4#define wSW_OPEN 5// SW#define bM_B 6 // ic2 // 블라인드용#define bM_A 7 // 7#define bM_EN 8 // 1#define wM_D 9 // 10 // 창문용#define wM_C 10 // 14#define wM_EN 11 // 9//MOTER#define CDS A0 // 아래쪽이 블라인드#define Rain A1 // 윗쪽이 창문//#define STOP 0#define UP 1#define DN 2#define OPEN 1#define CLOSE 2//int bM_DIR=STOP,bTimer=0,bMode=0;int wM_DIR=STOP,wTimer=0,wMode=0;//bool old_cds =0;bool old_Rain=0;//void bM_STOP() { digitalWrite(bM_EN,0); } // blindvoid bM_LEFT() { digitalWrite(bM_EN,1); digitalWrite(bM_A,1); digitalWrite(bM_B,0); }void bM_RIGHT(){ digitalWrite(bM_EN,1); digitalWrite(bM_A,0); digitalWrite(bM_B,1); }void bM_RUN() {switch(bM_DIR){case STOP: bMode=0; bM_STOP(); break;case DN : if(bMode!=1){ bTimer=10; bM_LEFT(); } bMode=1; break;case UP : if(bMode!=2){ bTimer=10; bM_RIGHT(); } bMode=2; break;}}//void wM_STOP() { digitalWrite(wM_EN,0); } // windowvoid wM_LEFT() { digitalWrite(wM_EN,1); digitalWrite(wM_C,1); digitalWrite(wM_D,0); }void wM_RIGHT(){ digitalWrite(wM_EN,1); digitalWrite(wM_C,0); digitalWrite(wM_D,1); }void wM_RUN() {switch(wM_DIR){case STOP : wMode=0; wM_STOP(); break;case CLOSE: if(wMode!=1){ wTimer=25; wM_LEFT(); } wMode=1; break;case OPEN : if(wMode!=2){ wTimer=25; wM_RIGHT(); } wMode=2; break;}}//void BTS(){ // BLUETOOTHif(Serial.available()){char r=Serial.read();if(r=='0'){ bM_DIR=STOP; } // motor turn offif(r=='1'){ bM_DIR=DN; } // motor turn rightif(r=='2'){ bM_DIR=UP; }if(r=='3'){ wM_DIR=STOP; } // motor turn offif(r=='4'){ wM_DIR=CLOSE; }if(r=='5'){ wM_DIR=OPEN; }}}//void cds_run(){int cds_val=analogRead(CDS); cds_val/=750; // 750 is 0 or 1 valueif(old_cds!=cds_val){if(cds_val)bM_DIR=DN;else bM_DIR=UP;}old_cds=cds_val;}//void Rain_run(){ // Rain windowint Rain_val=analogRead(Rain); Rain_val/=600; // 600 is 0 or 1 valueif(old_Rain!=Rain_val){if(Rain_val)wM_DIR=CLOSE;else wM_DIR=OPEN;}old_Rain=Rain_val;}//void ISR_Timer(){if(wTimer){if(--wTimer==0){ bM_DIR=STOP; bM_STOP(); } //window}if(bTimer){if(--bTimer==0){ wM_DIR=STOP; wM_STOP(); } //blind}}//void setup(){pinMode(bM_EN,OUTPUT); pinMode(bM_A,OUTPUT); pinMode(bM_B,OUTPUT);pinMode(wM_EN,OUTPUT); pinMode(wM_C,OUTPUT); pinMode(wM_D,OUTPUT);Serial.begin(9600);MsTimer2::set(100,ISR_Timer); // 100ms,ISR_TimerMsTimer2::start(); // Timer start}//void loop(){if(!digitalRead(bSW_DN ))bM_DIR=DN;if(!digitalRead(bSW_UP ))bM_DIR=UP;if(!digitalRead(wSW_CLOSE))wM_DIR=CLOSE;if(!digitalRead(wSW_OPEN ))wM_DIR=OPEN;//BTS(); bM_RUN(); wM_RUN();//if((!bMode)&&(!wMode)){ cds_run(); Rain_run(); } // 모터 정지 시 입력체크}
변환하면서 버그가 있을 수도 있지만
일단은 코드 크기를 줄였습니다.
댓글 0
조회수 7,596등록된 댓글이 없습니다.