Você está na página 1de 2

#include <avr/io.

h>
#include <util/delay.h>

#define sentido_horario PD1


#define sentido_anti_horario PD2
#define girar PD3
#define motor PB0
#define led_vermelho PB1
#define led_verde PB2
#define led_amarelo PB3
#define led_azul PB4

int main() {

// Configura��o dos pinos como entrada ou sa�da


DDRD &= ~(1 << sentido_horario) & ~(1 << sentido_anti_horario) & ~(1 << girar);
DDRB |= (1 << motor) | (1 << led_vermelho) | (1 << led_verde) | (1 <<
led_amarelo) | (1 << led_azul);

// Configura��o do PWM
TCCR0A = (1 << WGM01) | (1 << WGM00) | (1 << COM0B1);
TCCR0B = (1 << CS01) | (1 << CS00);

while(1) {

// Verifica se o bot�o de sentido hor�rio foi pressionado


if(!(PIND & (1 << sentido_horario))) {
_delay_ms(50); // Debouncing

// L�gica de mudan�a de estado do bot�o


PORTB &= ~(0B00011111);
PORTB |= (1 << led_amarelo);
}

// Verifica se o bot�o de sentido anti-hor�rio foi pressionado


if(!(PIND & (1 << sentido_anti_horario))) {
_delay_ms(50); // Debouncing

// L�gica de mudan�a de estado do bot�o


PORTB &= ~(0B00011111);
PORTB |= (1 << led_azul);
}

// Verifica se o bot�o de girar foi pressionado


if(!(PIND & (1 << girar))) {
_delay_ms(50); // Debouncing

// L�gica de mudan�a de estado do bot�o


OCR0B = 204;
PORTD &= ~(0B00000110);
PORTD |= (1 << motor);
PORTB &= ~(0B00011111);
PORTB |= (1 << led_verde);
}

// Verifica se o bot�o de parar foi pressionado


if((PIND & (1 << sentido_horario)) && (PIND & (1 << sentido_anti_horario)) &&
(PIND & (1 << girar))) {
_delay_ms(50); // Debouncing
// L�gica de mudan�a de estado do bot�o
OCR0B = 0;
PORTD &= ~(0B00000111);
PORTB &= ~(0B00011111);
PORTB |= (1 << led_vermelho);
}
}
}

Você também pode gostar