BASIC4MCU | 질문게시판 | atmega128 모터실행중 Push버튼으로 속도 증가
페이지 정보
작성자 갤럭시 작성일2020-12-12 01:05 조회10,546회 댓글3건본문
SW1을 눌러 모터를 실행하고 실행중에 SW2버튼을 누르면 속도를 증가하고 싶어요
모터 정지상태에서는 SW2버튼이 반응하지 않게요
여기에 소스추가해야하는지...소스코드를 아예 다시짜야할까요..?
알려주시면 감사하겠습니다!
int main(void)
{
bool iMove =FALSE, iDir=DIR_CW,iLedOn=TRUE;
int Sw=0,Moter[]={40,45,50}; //모터 속도40%,45%,50% 배열, Moter[Sw] 에 사용할 Sw
mtr_tc2_init();
led_init();
sw_init();
while (1)
{
if(sw_onoff(SW1)) { //sw1눌렀을때 모터구동
iMove=!iMove;
if(iMove){
mtr_tc2_dir_spd(iDir,40); //40%로 모터 구동
}else {
mtr_tc2_dir_spd(iDir, 0);
led_off(LED_ALL);
if(iDir==DIR_CW) iDir=DIR_CCW; //모터 반시계방향
else iDir=DIR_CW; //모터 시계방향
}
}
if(iMove){
if(iLedOn) led_on(LED_ALL);
else led_off(LED_ALL);
iLedOn=!iLedOn;
_delay_ms(300);
}
}
}
댓글 3
조회수 10,546master님의 댓글
master 작성일
int Sw=0,speed=0,Moter[]={40,45,50}; //모터 속도40%,45%,50% 배열
bool iMove =0,iDir=DIR_CW,iLedOn=1;
bool swflag1=0,swflag2=0,swflag3=0;
//
int main(void){
mtr_tc2_init();
led_init();
sw_init();
while(1){
if(sw_onoff(SW1)){ // sw1눌렀을때 모터구동
if(swflag1==0){ swflag1=1; iMove=!iMove; }
}
else{ swflag1=0; }
//--------------------------------------------------
if(iMove){
}
else{
mtr_tc2_dir_spd(iDir, 0);
led_off(LED_ALL);
}
}
if(iMove){
//--------------------------------------------------
if(sw_onoff(SW2)){ // sw2눌렀을때
if(swflag2==0){ swflag2=1;
if(++speed>2)speed=0; // 속도
mtr_tc2_dir_spd(iDir,Moter[speed]);
}
}
else{ swflag2=0; }
//--------------------------------------------------
if(sw_onoff(SW3)){ // sw3눌렀을때
if(swflag3==0){ swflag3=1;
if(iDir==DIR_CW)iDir=DIR_CCW; // 반시계방향
else iDir=DIR_CW; // 시계방향
mtr_tc2_dir_spd(iDir,Moter[speed]);
}
}
else{ swflag3=0; }
//--------------------------------------------------
if(iLedOn)led_on(LED_ALL); else led_off(LED_ALL); iLedOn=!iLedOn;
}
_delay_ms(300);
}
}
갤럭시님의 댓글
갤럭시 작성일
너무 감사합니다 마스터님께서 코딩을 하는데 많은 영향을 주는 공부방법이 있을까요.....?
덕분에 늘 배워갑니다 매번 감사합니다
--------------------------나중에 내가 보기위해서 수정 완료된 코딩-------------------------------------
int main(void)
{
int speed=0,Moter[]={40,45,50}; //모터 속도40%,45%,50% 배열
bool iMove =FALSE,iDir=DIR_CW,iLedOn=TRUE;
mtr_tc2_init();
led_init();
sw_init();
while(1){
if(sw_onoff(SW1)){
iMove=!iMove;
if(iMove){
mtr_tc2_dir_spd(iDir,Moter[speed]);
}
else{
mtr_tc2_dir_spd(iDir,0);
led_off(LED_ALL);
if(iDir==DIR_CW)iDir=DIR_CCW; // 반시계방향
else iDir=DIR_CW; // 시계방향
}
}
if(iMove){
if(sw_onoff(SW2)){ // sw2눌렀을때
if(++speed>2)speed=0; // 속도
mtr_tc2_dir_spd(iDir,Moter[speed]);
}
if(iLedOn)led_on(LED_ALL);
else led_off(LED_ALL);
iLedOn=!iLedOn;
_delay_ms(300);
}
}
}
master님의 댓글
master 작성일
https://cafe.naver.com/circuitsmanual/153187
기초공부는 이 강좌를 참고하세요