//Mandar datos
#include <avr/io.h>
#include <util/delay.h>
#include <stdio.h>
#include <avr/interrupt.h>

/*
BAUD 9600 OK
1 bit parada OK
No tiene paridad Ok
tamaño msj es de 8 bits
*/
void config_pwm(){
//Activar el temporizador debe decir OC1- CON EL 1, 0C0 CON EL 0
//Trabajo con el 0
TCCR2B=1<<CS20;// Activo timer0 sin prescala
//Activo el PIND6 PORQUE ESL OC0A como el invertido 
TCCR2A= (1<<COM2A0 )|(1<< COM2A1)|(1<<COM2B0 )| (1<< COM2B1);//Estos son los pwm, estamos ocupando el PD3 Y PB3 el simbolo | es para agregar
//Modo fast top=0xff
TCCR2A|= (1<<WGM20)||(1<<WGM21);//modo variable, podemos cambiar lo que queramos, y el otro , se queda fijo
}

void config_uart(){
//(8000000/(16*BAUD))-1 = 51
UBRR0L = 51;
UCSR0C = (3<<UCSZ00);//1<<UCSZ01  1<<UCSZ00
UCSR0B = (1<<TXEN0) | (1<<RXEN0);  //RX es envío y Tx recepción
}

int main(){
    config_uart();
    unsigned int msj=4;
    DDRC=0xFF;

    config_pwm();
    DDRB=1<<PINB3;//DECLARAR COMOS SALIDA son enable
    DDRD=1<<PIND3;//DECLARAR COMOS SALIDA son los enable
    int guardar=0;

    while(1){
        //Empieza pwm
        OCR2A=0; //255 equivale a todo prendido --> lo tenemos ala reves por lo que en 0, giran ambos
        //Acaba pwm

        if(UCSR0A&(1<<RXC0)){
            msj=UDR0;
            while(!(UCSR0A&(1<<UDRE0)));
            UDR0=msj;
        
        if(msj==0){//ADELANTE
            if(guardar!=0){
                //_delay_ms(200);
                PORTC= 0<<PINC0;//0b000000100 in1 1 y in2 0 y eso lo hace antihorario
                PORTC|= 0<<PINC2;//0b000001001, el simbolo es para que no se sobrescriba|--> in3 1 y in4 es 0-- antihorario
            }
            _delay_ms(200);
            guardar=0;
            PORTC= 1<<PINC1;// in1 1 y in2 0 y eso lo hace horario No está funcionando
            PORTC|= 1<<PINC2;//0b000001001, el simbolo es para que no se sobrescriba|--> in3 1 y in4 es 0-- antihorario
        }
        else if(msj==1){//ATRÁS
            if(guardar!=1){
                //_delay_ms(200);
                PORTC= 0<<PINC0;//0b000000100 in1 1 y in2 0 y eso lo hace antihorario
                PORTC|= 0<<PINC2;//0b000001001, el simbolo es para que no se sobrescriba|--> in3 1 y in4 es 0-- antihorario
            }
            guardar=1;
            _delay_ms(200);
            PORTC= 1<<PINC0;//0b000000100 in1 1 y in2 0 y eso lo hace antihorario} No está funcionando
            PORTC|= 1<<PINC3;//0b000001001, el simbolo es para que no se sobrescriba|--> in3 1 y in4 es 0-- antihorario
        }
        else if(msj==2){//DERECHA
            if(guardar!=2){
                //_delay_ms(200);
                PORTC= 0<<PINC0;//0b000000100 in1 1 y in2 0 y eso lo hace antihorario
                PORTC|= 0<<PINC2;//0b000001001, el simbolo es para que no se sobrescriba|--> in3 1 y in4 es 0-- antihorario
            }
            _delay_ms(200);
            guardar=2;
            PORTC= 1<<PINC0;//0b000000100 in1 1 y in2 0 y eso lo hace antihorario
            PORTC|= 1<<PINC2;//0b000001001, el simbolo es para que no se sobrescriba
        }
        else if(msj==3){ //IZQUIERDA
            if(guardar!=3){
                //_delay_ms(200);
                PORTC= 0<<PINC0;//0b000000100 in1 1 y in2 0 y eso lo hace antihorario
                PORTC|= 0<<PINC2;//0b000001001, el simbolo es para que no se sobrescriba|--> in3 1 y in4 es 0-- antihorario
            }
            guardar=3;
            _delay_ms(200);
            PORTC= 1<<PINC1;//0b000000100 in1 1 y in2 0 y eso lo hace antihorario
            PORTC|= 1<<PINC3;//0b000001001, el simbolo es para que no se sobrescriba
            
        }
        else if(msj==4){//STOP
            guardar=4;
            PORTC= 0<<PINC0;//0b000000100 in1 1 y in2 0 y eso lo hace antihorario
            PORTC|= 0<<PINC2;//0b000001001, el simbolo es para que no se sobrescriba|--> in3 1 y in4 es 0-- antihorario
        }
        else{
            guardar=5;
            PORTC= 0<<PINC0;//0b000000100 in1 1 y in2 0 y eso lo hace antihorario
            PORTC|= 0<<PINC2;//0b000001001, el simbolo es para que no se sobrescriba|--> in3 1 y in4 es 0-- antihorario
        }
        
        }
    }

}