BASIC4MCU | 질문게시판 | 아두이노 L9110 DC모터 제어
페이지 정보
작성자 wdsdd 작성일2023-12-08 04:55 조회926회 댓글1건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=23541
본문
// 핀 할당#define DIR 8 // 상수로 핀들을 정의함#define PWM 6#define button 10enum {OFF1, OFF2, ON1, ON2, ON3} state = OFF1;void setup() {// 핀 모드 설정pinMode(DIR, OUTPUT);pinMode(PWM, OUTPUT);pinMode(button, INPUT_PULLUP);}void loop() {switch(state){case OFF1:if (!digitalRead(button)) {state = ON1;digitalWrite(DIR, LOW);digitalWrite(PWM, HIGH);delay(500);}break;case ON1:if (!digitalRead(button)) {state = OFF2;digitalWrite(PWM, LOW);delay(500); // 이 부분을 제거}break;case OFF2:if (!digitalRead(button)) {state = ON2;digitalWrite(DIR, HIGH);digitalWrite(PWM, HIGH);delay(500);}break;case ON2:if (!digitalRead(button)) {state= OFF1;digitalWrite(PWM, LOW);delay(500); // 이 부분을 제거}break;}}여기서 버튼을 누르면 정방향 회전 → 정지 → 역방향 회전 까지는 잘되는데 이후에 버튼을 누르면 역방향 → 정지가 아닌 역방향 → 정방향 으로 바뀌어 버립니다. 정상적으로 역방향 → 정지 가 되려면 어떻게 수정해야하나요?
댓글 1
조회수 926master님의 댓글
master 작성일
문법적 오류는 안보이는데 왜 동작을 안 할까요?
#define DIR 8
#define PWM 6
#define button 10
//
int mode=0;
bool flag=0;
//
void setup(){
pinMode(DIR,OUTPUT);
pinMode(PWM,OUTPUT);
pinMode(button,INPUT_PULLUP);
}
//
void loop(){
if(!digitalRead(button)){
if(flag==0){ flag=1; delay(100);
if(++mode>4)mode=1;
switch(mode){
case 1: digitalWrite(DIR,0); digitalWrite(PWM,1); break; // 정방향 회전
case 2: digitalWrite(PWM,0); break; // 정지
case 3: digitalWrite(DIR,1); digitalWrite(PWM,1); break; // 역방향 회전
case 4: digitalWrite(PWM,0); break; // 정지
}
}
}
else{
if(flag){ flag=0; delay(100); }
}
}
이 코드로 돌려보세요