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); // Configura o pino PD5 como sa�da


PORTD &= ~(1 << PWM1); // Configura o pino PD5 para n�vel baixo

DDRB |= 0B00001111; // Configura os pinos PB0-PB3 como sa�da


DDRD |= 0B10110000; // Configura os pinos PD4-PD7 como sa�da

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

// Configura��o do PWM 1
TCCR0A = (1 << COM0B1) | (1 << WGM01) | (1 << WGM00); // Fast PWM, non-inverting
mode
TCCR0B = (1 << CS01); // Prescaler = 8

// Duty inicial de 0%
OCR0B = 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;
} else {
contador2 = 0;
}
}

// Leitura do estado do bot�o 3


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

// Definir sa�da com base nos bot�es pressionados


if (contador1 == 0 && contador2 == 1) {
OCR0B = 80; // Duty de 31,25%
PORTD = 0x40;
PORTB |= 0B00001010;
} else if (contador1 == 1 && contador2 == 1) {
OCR0B = 160; // Duty de 62,5%
PORTD = 0x08;
PORTB |= 0B00000110;
} else if (contador3 == 1) {
OCR0B = 0; // Duty de 0%
PORTD = 0x00;
PORTB |= 0B00000001;
}
}
}

Você também pode gostar