Você está na página 1de 2

#include <avr/io.

h>
#include <util/delay.h>
#define btn1 PD1
#define btn2 PD2
#define btn3 PD3
#define PWM1 PD5

int main() {

DDRD |= (1 << PWM1);


PORTD &= ~(1 << PWM1);

DDRB |= 0B00001111;
DDRD |= 0B10110000;

int contador1 = 0;
int contador2 = 0;
int contador3 = 0;

//Configura PWM 1
TCCR0B = 0x04; //0000 0100 64Hz
TCCR0A = 0xA3; //1011 0011 fast

// Duty inicial de 0%
OCR2B = 0;

while (1) {
// Leitura do estado do botão 1
if (!(PIND & (1<<PD1))) {
_delay_ms(500);

if (contador1 == 0) {
contador1 = 1;
}
else {
contador1 = 0;
}
}

// Leitura do estado do botão 2


if (!(PIND & (1<<PD2))) {
_delay_ms(500);
if (contador2 == 0) {
contador2 = 1;
contador3 = 0;
}
}

// Leitura do estado do botão 3


if (!(PIND & (1<<PD3))) {
_delay_ms(500);
if (contador3 == 0) {
contador2 = 0;
contador3 = 1;
}
}

// Definir saída com base nos botões pressionados


if (contador1 == 0 && contador2 == 1) {
OCR2B = 80; // 0
PORTD = 0x40;
PORTB |= 0B00001010;
}
else if (contador1 == 1 && contador2 == 1) {
OCR2B = 80; // 0
PORTD = 0x08;
PORTB |= 0B00000110;
}
else if (contador3 == 1) {
OCR2B = 0; // 0
PORTD = 0x00;
PORTB |= 0B00000001;
}
}
}

Você também pode gostar