BASIC4MCU | 질문게시판 | 답변 : dc모터 회전량을 늘리고 싶습니다 ㅠ
페이지 정보
작성자 master 작성일2022-12-08 19:01 조회286회 댓글1건본문
int redLED=16,greenLED=15;
int but1=2,but2=3,but3=4; // Buttons
int in1=6,in2=5,enable=14; // L293D
//
int pin_seg[]={13,12,11,10,9,8,7}; // 7 Segment pin
int floor_data[3][7]={{0,1,1,0,0,0,0},{1,1,0,1,1,0,1},{1,1,1,1,0,0,1}}; //123
//
int speed=255,cur_floor=1;
//
void seg_disp(){ // floor 표시
for(int i=0;i<7;i++)digitalWrite(pin_seg[i],!floor_data[cur_floor-1][i]);
}
//
void move(int target_floor){
digitalWrite(greenLED,0); delay(300); digitalWrite(redLED,1); delay(300);
if(cur_floor<target_floor){
digitalWrite(in1,1); digitalWrite(in2,0); analogWrite(enable,speed); // 상승
if(target_floor-cur_floor==2){ cur_floor+=2; delay(2000); } // 2개층 이동
else { cur_floor+=1; delay(1000); } // 1개층 이동
}
else if(cur_floor>target_floor){
digitalWrite(in1,0); digitalWrite(in2,1); analogWrite(enable,speed); // 하강
if(cur_floor-target_floor==2){ cur_floor-=2; delay(2000); } // 2개층 이동
else { cur_floor-=1; delay(1000); } // 1개층 이동
}
allOff(); // 모터정지 및 LED OFF
seg_disp();
delay(500);
}
//
void allOff(){
digitalWrite(in1,0); digitalWrite(in2,0); analogWrite(enable,0);
digitalWrite(redLED,0); delay(200); digitalWrite(greenLED,1);
}
//
void setup(){
pinMode(but1,INPUT_PULLUP); pinMode(but2,INPUT_PULLUP); pinMode(but3,INPUT_PULLUP);
pinMode(redLED,OUTPUT); pinMode(greenLED,OUTPUT);
for(int i=0;i<7;i++)pinMode(pin_seg[i],OUTPUT);
allOff();
}
//
void loop(){
if(digitalRead(but1)==0){ move(1); } // 1층
if(digitalRead(but1)==0){ move(2); } // 2층
if(digitalRead(but1)==0){ move(3); } // 3층
}
2개층 이동에 2초, 1개층 이동에 1초를 줬습니다.
필요한 만큼 딜레이를 키우면 됩니다.
댓글 1
조회수 286승천님의 댓글
승천 작성일
버튼 하나 밖에 작동하지 않는데 어떻게 하면 될까요,,?
그리고
void loop(){
if(digitalRead(but1)==0){ move(-1) , move(1); } // 1층
if(digitalRead(but2)==0){ move(-1) , move(1); } // 2층
if(digitalRead(but3)==0){ move(-1) ,move(1); } // 3층
}
버튼이 3개라서 이렇게 해봤는데 1층이면 1층버튼 누르면 돌면 안되는데 돌고 , 그리고 한층 올라갈때 한번 도는 거 끝났다가 한 번 더 도네요..ㅠ