BASIC4MCU | 질문게시판 | 답변 : 아두이노 인터럽트 질문입니다.
페이지 정보
작성자 master 작성일2023-09-22 05:47 조회1,233회 댓글1건본문
#include <avr/io.h>
#include <util/delay.h>
#include <LiquidCrystal.h>
//
LiquidCrystal lcd(22,23,24,25,26,27);
//
volatile int state=0,led=0xf0,ledCount=0,ledPosition=1;
volatile bool flag_INT0=0,flag_INT1=0;
//
void setup(){
lcd.begin(16,2);
DDRA=0xFF; PORTC=0xF0; DDRC=0x0f;
pinMode(3,INPUT_PULLUP);
attachInterrupt(0,blink,FALLING);
attachInterrupt(1,buttonPressed,RISING);
lcd.clear();
lcd.setCursor(0,0); lcd.print("Rising Edge");
lcd.setCursor(0,1); lcd.print("LED Position: ");
lcd.print(ledPosition);
}
//
void loop(){
if(flag_INT0){ flag_INT0=0;
led=(led>>1)|0x80; PORTC=led;
ledCount=0; for(int i=0;i<4;i++){ if((led>>i)&1)ledCount++; } // 켜져 있는 LED의 개수 세기
//
lcd.clear();
lcd.setCursor(0,0); lcd.print("FALLING EDGE");
lcd.setCursor(0,1); lcd.print("LED: "); lcd.print(ledCount);
if(ledCount==4){ ledCount=led=1; } // led가 4개 켜지면 led=1
}
//----------------------------------------------
if(flag_INT1){ flag_INT1=0;
led>>=1;
ledPosition++;
if(led==0){ led=8; ledPosition=1; }
PORTC=led;
lcd.clear();
lcd.setCursor(0,0); lcd.print("Rising Edge");
lcd.setCursor(0,1); lcd.print("LED Position: ");
lcd.print(ledPosition);
}
}
//
void blink(){ flag_INT0=1; }
//
void buttonPressed(){ flag_INT1=1; }
하나는 PC4~PC7을 1로 채워야 정상동작하는 코드고다른 하나는 PC4~PC7을 0으로 채워야 정상동작하는 코드라서매끄럽지 않게 동작할 수 있겠습니다.#include <avr/io.h>#include <util/delay.h>#include <LiquidCrystal.h>//LiquidCrystal lcd(22,23,24,25,26,27);//volatile int state=0,led=8,ledCount=0,ledPosition=1;volatile bool flag_INT0=0,flag_INT1=0;//void setup(){lcd.begin(16,2);DDRA=0xFF; PORTC=0xF0; DDRC=0x0f;pinMode(3,INPUT_PULLUP);attachInterrupt(0,blink,FALLING);attachInterrupt(1,buttonPressed,RISING);lcd.clear();lcd.setCursor(0,0); lcd.print("Rising Edge");lcd.setCursor(0,1); lcd.print("LED Position: ");lcd.print(ledPosition);}//void loop(){if(flag_INT0){ flag_INT0=0;led=(led>>1)|8; PORTC=led;ledCount=0; for(int i=0;i<4;i++){ if((led>>i)&1)ledCount++; } // 켜져 있는 LED의 개수 세기//lcd.clear();lcd.setCursor(0,0); lcd.print("FALLING EDGE");lcd.setCursor(0,1); lcd.print("LED: "); lcd.print(ledCount);if(ledCount==4){ ledCount=1; led=8; } // led가 4개 켜지면}//----------------------------------------------if(flag_INT1){ flag_INT1=0;led>>=1;ledPosition++;if(led==0){ led=8; ledPosition=1; }PORTC=led;lcd.clear();lcd.setCursor(0,0); lcd.print("Rising Edge");lcd.setCursor(0,1); lcd.print("LED Position: ");lcd.print(ledPosition);}}//void blink(){ flag_INT0=1; }//void buttonPressed(){ flag_INT1=1; }조금 수정했으니 원하는대로 동작하는지 체크 해보세요
댓글 1
조회수 1,233Tell님의 댓글
Tell 작성일작동이 원활하게 됩니다. 감사합니다.