BASIC4MCU | 질문게시판 | 답변 : 답변 : master님 모터정지 및 회전 관련 문의드려요.
페이지 정보
작성자 아두이노배우기 작성일2019-01-14 16:59 조회2,790회 댓글0건본문
답변 감사합니다. 꾸벅^^
스위치4번이 없어서 제가 추가했어요.
반대로 도는것은 스위치4번으로 제가 인터넷으로 찾은것을 넣으니 잘되었구요.
문제는 스위치 3번인데요.
처음 시작할때 FND50번 눌러도 작동하지 않아요.
1번이나 2번을 눌러서 51이나 49 이렇게 변동되어야 작동이 됩니다.
1번이나 2번은 속도를 조절하기만 하고 작동은 하지 않았으면 좋겠어요
3번만 눌렀을 때 작동이 되어야 하는데.
현재 3번은 1번과2번을 통해 작동시킨 이후에 3번 누르면 멈추기만하고 다시 시작을 안해요.
int CLK=9,DIR=6,ENA=5;
int LATCH=4,SCLK=7,DATA=8;
int SW1=A1,SW2=A2,SW3=A3,SW4=A4;
byte seg[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0X80,0X90};
byte dgt[]={0xF1,0xF2,0xF4,0xF8};
unsigned long t1,t2;
int Cnt=50,speed=100,d[4];
int mode=0;
char flag=0,stat=0;
void Calc(int n){ d[0]=n/1000; d[1]=n/100%10; d[2]=n/10%10; d[3]=n%10; }
void Wr2Seg(byte s,byte v){
digitalWrite(LATCH,0);
shiftOut(DATA,SCLK,MSBFIRST,seg[v]);
shiftOut(DATA,SCLK,MSBFIRST,dgt[s]);
digitalWrite(LATCH,1);
}void Disp(){
static byte c=0;
Wr2Seg(c,d[c]); if(++c>3)c=0;
if(mode){
digitalWrite(CLK,1); delayMicroseconds(1000-10*Cnt);
digitalWrite(CLK,0); delayMicroseconds(1000-10*Cnt);
}
}void setup(){
Serial.begin(9600);
digitalWrite(DIR,1); digitalWrite(ENA,1);
pinMode(CLK,OUTPUT); pinMode(DIR,OUTPUT); pinMode(ENA,OUTPUT);
pinMode(LATCH,OUTPUT); pinMode(SCLK,OUTPUT); pinMode(DATA,OUTPUT);
t2=millis();
Calc(Cnt);
}void loop(){
t1=millis();
if(!digitalRead(SW1)){
if(t1-t2>200){ t2=t1; if(++Cnt>99)Cnt=100; Calc(Cnt); mode=1; }
}
if(!digitalRead(SW2)){
if(t1-t2>200){ t2=t1; if(--Cnt<1)Cnt=1; Calc(Cnt); mode=1; }
}
if(!digitalRead(SW3)){
mode=0;
}
if(!digitalRead(SW4)){
if(flag==0){ flag=1; stat^=1;}
}
else{
if(flag){ flag=0;}
}
if(stat) digitalWrite(DIR,1);
else digitalWrite(DIR,0);Disp();
}
댓글 0
조회수 2,790등록된 댓글이 없습니다.