BASIC4MCU | 질문게시판 | 아두이노 인터럽트 질문입니다.
페이지 정보
작성자 Tell 작성일2023-09-21 18:35 조회1,650회 댓글2건본문
첫번쨰 코드
#include <avr/io.h>
#include <util/delay.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(22, 23, 24, 25, 26, 27);
volatile int state = LOW;
volatile int led = 0xf0;
volatile int ledCount = 0; // LED가 몇 개 On 되었는지 개수를 나타내는 변수
void setup() {
lcd.begin(16, 2);
DDRA = 0xFF;
DDRC = 0x0f;
PORTC = 0x00;
pinMode(2, INPUT);
attachInterrupt(0, blink, FALLING);
}
void loop() {
}
void blink() {
led >>= 1;
led |= 0x80;
PORTC = led;
// 각 LED의 상태를 확인하고, 켜져 있는 LED의 개수를 세기
int onLEDCount = 0;
for (int i = 0; i < 4; i++) {
if ((led >> i) & 1) {
onLEDCount++;
}
}
ledCount = onLEDCount; // 켜져 있는 LED의 개수로 ledCount를 업데이트
// LCD 패널에 현재 LED가 몇 개 On 되었는지 개수를 표시합니다.
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("FALLING EDGE");
lcd.setCursor(0, 1);
lcd.print("LED: ");
lcd.print(ledCount);
// led가 4개 켜지고 ledcount가 4일때 버튼을 누르면 led1번이랑 ledcount가 1이되도록
if (ledCount == 4) {
led = 0x01;
ledCount = 1;
}
}
2번째 코드
#include <avr/io.h>
#include <util/delay.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(22, 23, 24, 25, 26, 27);
int led = 0x08; // LED 초기 상태 (가장 왼쪽 LED 켜짐)
int ledPosition = 1; // 현재 LED 위치
void setup() {
lcd.begin(16, 2);
DDRC = 0x0F; // LED 출력 핀 설정
PORTC = 0xF0; // LED는 초기에 모두 꺼져 있음
pinMode(3, INPUT_PULLUP); // 풀업 입력 모드로 스위치 핀 설정
attachInterrupt(1, buttonPressed, RISING); // 스위치 인터럽트 설정
}
void loop() {
// LED 상태를 업데이트하고 출력
PORTC = led;
// LCD에 표시
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Rising Edge");
lcd.setCursor(0, 1);
lcd.print("LED Position: ");
lcd.print(ledPosition);
delay(500);
}
void buttonPressed() {
// 스위치 눌림 이벤트 핸들링
led >>= 1; // LED를 오른쪽으로 한 비트 이동
ledPosition++; // 현재 LED 위치 업데이트
if (led == 0x00) {
// 모든 LED가 꺼져 있으면 초기 상태로 리셋
led = 0x08;
ledPosition = 1;
}
}
1,2번쨰 코드를 개별로 동작시켰을때는 원할하게 동작이 잘되었습니다. 하지만 이 두개의 코드를 병합했을때에는 동작이 되지가 않습니다. 어떻게 이 2개의 코드를 병합해야하나요?
댓글 2
조회수 1,650master님의 댓글
master 작성일
#include <avr/io.h>
#include <util/delay.h>
이 두개의 헤더파일은 AVRStudio용인데 아두이노에서 오류가 발생하지 않나요?
Tell님의 댓글
Tell 작성일발생은 하지 않는거 같습니다.