BASIC4MCU | 질문게시판 | 디코더7segment 외부인터럽트 질문
페이지 정보
작성자 아두이노스케 작성일2021-04-10 10:30 조회7,531회 댓글1건본문
이제막 아두이노를 접해서 이해가부족한거같은데
외부인터럽트를 이용하여 4511디코더를 사용한 7segment에 0~9까지 반복하다가 스위치를 눌렀다 떼면 0이되도록 하는 코드를 구성해봤는데
시뮬레이션 시작을해보니 0에서 가지를 않고 멈춰잇네요..
그리고 스위치를 눌렀다 떼면 0이되도록 코드를 구성햇는데 눌렀다떼면 1씩올라갑니다 뭘잘못했는지 알려주세요 ㅠㅠ답답해죽겠네요
const byte seg[] = {4,5,6,7};
const byte SW_A = 2;
volatile byte num=0,inc=1;
void setup()
{
for(int i=4; i<8; i++) {
pinMode(i, OUTPUT);
digitalWrite(i,LOW);
}
pinMode(SW_A, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(2),blink,RISING);
}
void loop(){}
void blink(){
for(int i=0; i<4; i++) {
digitalWrite(i+4, bitRead(num, i));}
num += inc;
if( num>9 )
num = 0;
if( num <0 )
num = 9;
delay(500);
if( !digitalRead(SW_A) )
num = 0;
delay(500);
}
댓글 1
조회수 7,531master님의 댓글
master 작성일
const byte seg[]={4,5,6,7};
const byte SW_A =2;
volatile byte num=0,mode=0;
//
void setup(){
for(int i=4;i<8;i++)pinMode(i,OUTPUT);
pinMode(SW_A,INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(2),blink,RISING);
}
//
void loop(){
for(int i=0;i<4;i++)digitalWrite(i+4,bitRead(num,i));
if(mode){
if(++num>9)num=0;
}
delay(500);
}
//
void blink(){
mode^=1;
if(mode==0)num=0;
}