Firmware & Embedded/AVR
attachInterrupt
Rogue
2022. 9. 22. 14:44
반응형
#include <Servo.h>
const int SERVO = 10;
Servo servo;
const int buttonPin = 2;
int servo_state = 30;
bool servo_state_changed = false;
void buttonPressed(){
servo_state = (servo_state == 30)?150:30;
servo_state_changed = true;
}
void setup(){
pinMode(buttonPin, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin), buttonPressed, RISING);
servo.attach(SERVO);
servo.write(0);
delay(1000);
}
void loop(){
if(servo_state_changed){
servo_state_changed = false;
servo.write(servo_state);
}
}
// 버튼 누를 때마다 서보의 각도가 90도씩 번갈아 움직임
const int ledPin = 13;
const int buttonPin = 2;
int led_state = LOW;
bool led_state_changed = false;
void buttonPressed(){
led_state = (led_state == LOW) ? HIGH : LOW;
led_state_changed = true;
}
void setup(){
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin), buttonPressed, RISING);
}
void loop(){
if (led_state_changed){
led_state_changed = false;
digitalWrite(ledPin, led_state);
}
}
// 버튼을 누르면 켜진 상태가 지속, 다시 누르면 꺼진 상태가 지속
rising edge triggered
falling edge triggered
level triggered (HIGH, LOW)
edge triggered(RISING, FALLING)
const int ACTIVE_BUZZER = 10;
const int buttonPin = 2;
int buzzer_state = LOW;
bool buzzer_state_changed = false;
void buttonPressed(){
buzzer_state = (buzzer_state == LOW)?HIGH : LOW;
buzzer_state_changed = true;
}
void setup(){
pinMode(ACTIVE_BUZZER, OUTPUT);
pinMode(buttonPin, INPUT);
attachInterrupt(digitalPinToInterrupt(buttonPin), buttonPressed, RISING);
}
void loop(){
if (buzzer_state_changed){
buzzer_state_changed = false;
digitalWrite(ACTIVE_BUZZER, buzzer_state);
}
}
반응형