#include <avr/io.h>
#include <util/delay.h>
#define BTN PD2
#define RED PD3
#define ORANGE PD4
#define GREEN PD5
#define DELAY 500
void init();
void loop();
void setRed();
void setOrange();
void setGreen();
void setOff();
int main() {
init();
while(1) {
loop();
}
return 0;
}
void init() {
DDRD &= ~(0 << BTN); // BTN (D2 / PD2) -> entrée
DDRD |= (1 << RED); // RED (D3 / PD3) -> sortie
DDRD |= (1 << ORANGE); // ORANGE (D4 / PD4) -> sortie
DDRD |= (1 << GREEN); // GREEN (D5 / PD5) -> sortie
}
void loop() {
// Si la pin BTN (D2 / PD2) reçoit un signal haut, on lance la séquence d’allumage des LEDs
if (PIND & (1 << BTN)) {
setRed();
_delay_ms(DELAY);
setOrange();
_delay_ms(DELAY);
setGreen();
_delay_ms(DELAY);
setOff();
}
}
void setRed() {
PORTD |= (1 << RED); // LED rouge allumée
PORTD &= ~(1 << ORANGE); // LED orange éteinte
PORTD &= ~(1 << GREEN); // LED verte éteinte
}
void setOrange() {
PORTD &= ~(1 << RED); // LED rouge éteinte
PORTD |= (1 << ORANGE); // LED orange allumée
PORTD &= ~(1 << GREEN); // LED verte éteinte
}
void setGreen() {
PORTD &= ~(1 << RED); // LED rouge éteinte
PORTD &= ~(1 << ORANGE); // LED orange éteinte
PORTD |= (1 << GREEN); // LED verte allumée
}
void setOff() {
PORTD &= ~(1 << RED); // LED rouge éteinte
PORTD &= ~(1 << ORANGE); // LED orange éteinte
PORTD &= ~(1 << GREEN); // LED verte éteinte
}