아두이노 > 답변 : 버튼을 누른 횟수만큼 다른센서 작동하기

TODAY610 TOTAL303,676
사이트 이용안내
Login▼/회원가입
포럼 동영상강좌 회원가입


▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU | 아두이노 | 아두이노 | 답변 : 버튼을 누른 횟수만큼 다른센서 작동하기

페이지 정보

작성자 master 작성일2018-07-12 21:17 조회1,015회 댓글3건

본문

	

 

// DateTime : 2018-07-12 오후 9:20:40
// by Ok-Hyun Park
//
int photo=10;
int btn=11;
int dcA=12,dcB=13// DC MOTOR
//
int cnt=0,flag_btn=0,flag_photo=0;
//
void stop(){ digitalWrite(dcA,0); digitalWrite(dcB,0); } // STOP  
void run (){ digitalWrite(dcA,1); digitalWrite(dcB,0); } // CW
//
void setup(){
  pinMode(dcA,OUTPUT); pinMode(dcB,OUTPUT);
  pinMode(btn,INPUT_PULLUP);
}
//
void loop(){
  if(digitalRead(btn)==LOW){ // 스위치를 누르면
    if(flag_btn==0){ flag_btn=1cnt++; }
  }
  elseflag_btn=0; }
  //------------------------------------------
  if(digitalRead(photo)==LOW){ // 센서가 감지되면
    if(flag_photo==0){ flag_photo=1;
      if(cnt)cnt--;
      if(cnt==0)stop();
    }
  }
  elseflag_photo=0; }
  //------------------------------------------
  if(cnt){
    run();
  }
}

 

전부 시분할 구동을 하므로 외부 인터럽트를 사용하지 않아도 됩니다.

모터 동작 중에도 스위치 입력이 가능합니다.

 

 

// DateTime : 2018-07-12 오후 9:24:53
// by Ok-Hyun Park
//
int photo=10;
int btn=11;
int dcA=12,dcB=13// DC MOTOR
//
int cnt=0,flag_btn=0,flag_photo=0;
//
void stop(){ digitalWrite(dcA,0); digitalWrite(dcB,0); } // STOP
void run (){ digitalWrite(dcA,1); digitalWrite(dcB,0); } // CW
//
void setup(){
  pinMode(dcA,OUTPUT); pinMode(dcB,OUTPUT);
  pinMode(btn,INPUT_PULLUP);
}
//
void loop(){
  if(digitalRead(btn)==LOW){
    if(flag_btn==0){ flag_btn=1cnt++; run(); }
  }
  elseflag_btn=0; }
  //------------------------------------------
  if(digitalRead(photo)==LOW){
    if(flag_photo==0){ flag_photo=1;
      if(cnt)cnt--;
      if(cnt==0)stop();
    }
  }
  elseflag_photo=0; }
}

 

코드를 조금 더 단순하게 수정 했습니다.

 

 

 

// DateTime : 2018-07-12 오후 10:23:21
// by Ok-Hyun Park
//
int photo=10;
int btn=11;
int dcA=12,dcB=13// DC MOTOR
//
int cnt=0,flag_btn=0,flag_photo=0;
//
void stop(){ digitalWrite(dcA,0); digitalWrite(dcB,0); } // STOP
void run (){
  digitalWrite(dcA,1); digitalWrite(dcB,0); // CW
  while(digitalRead(photo)==LOW); // 센서 감지중이라면 벗어날 때까지 대기
}
//
void setup(){
  pinMode(dcA,OUTPUT); pinMode(dcB,OUTPUT);
  pinMode(btn,INPUT_PULLUP);
}
//
void loop(){
  if(digitalRead(btn)==LOW){
    if(flag_btn==0){ flag_btn=1cnt++; run(); }
  }
  elseflag_btn=0; }
  //------------------------------------------
  if(digitalRead(photo)==LOW){
    if(flag_photo==0){ flag_photo=1;
      if(cnt)cnt--;
      if(cnt==0)stop();
    }
  }
  elseflag_photo=0; }
}

 

센서 감지 상태에서는 돌자마자 바로 멈출 수 있으므로

run() 함수를 수정했습니다.

 

 

// DateTime : 2018-07-13 오전 10:13:27
// by Ok-Hyun Park
//
int photo=10;
int btn=11;
int dcA=12,dcB=13// DC MOTOR
//
int cnt=0,flag_btn=0,flag_photo=0;
//
void stop(){ digitalWrite(dcA,0); digitalWrite(dcB,0); } // STOP
void run (){
  digitalWrite(dcA,1); digitalWrite(dcB,0); // CW
  while(digitalRead(photo)); // 센서 감지중이라면 벗어날 때까지 대기
}
//
void setup(){
  pinMode(dcA,OUTPUT); pinMode(dcB,OUTPUT);
  pinMode(btn,INPUT_PULLUP);
}
//
void loop(){
  if(digitalRead(btn)==LOW){
    if(flag_btn==0){ flag_btn=1cnt++; run(); }
  }
  elseflag_btn=0; }
  //------------------------------------------
  if(digitalRead(photo)){
    if(flag_photo==0){ flag_photo=1;
      if(cnt)cnt--;
      if(cnt==0)stop();
    }
  }
  elseflag_photo=0; }
}

포토센서 동작논리를 변경 했습니다.

 

댓글 3

조회수 1,015

아두이노초보5님의 댓글

아두이노초보5 작성일

감사합니다. 잘되네요. 많이 배웠습니다.
근데 마지막꺼는 처음 센서 감지 상태에서 버튼 누르는 횟수만 인식하더라구요.

master님의 댓글

master 작성일

센서 동작 논리가 반대인 것 같습니다.

아두이노초보5님의 댓글

아두이노초보5 작성일

그생각을 왜 못했을까요.. 천재세요.. 감사합니다

아두이노HOME > 아두이노 > 전체 목록

게시물 검색

Privacy Policy
MCU BASIC ⓒ 2017