///////////////////////////////////////////////////////////////////////////////////////// // 09/MAYO/2019 // // CONTROL RC // // // // // ///////////////////////////////////////////////////////////////////////////////////////// #include <16F877A.h> #fuses NOWDT,HS,NOPUT,NOPROTECT,NODEBUG,NOBROWNOUT,NOLVP,NOCPD,NOWRT #use delay(clock=4000000) #use rs232(baud=9600,bits=8,parity=N,xmit=PIN_C6,rcv=PIN_C7) #use fast_io(A) #use fast_io(B) #use fast_io(C) #use fast_io(D) //VARIABLES LED int8 led1=PIN_B3; int8 led2=PIN_B4; //VARIABLES MOTORES int8 IN_A1 = PIN_C3; int8 IN_A2 = PIN_C0; int8 IN_B1 = PIN_C4; int8 IN_B2 = PIN_C5; //VARIABLES PWM int8 pwm1; int8 pwm2; int8 var,postscaler; //int i=0; char valor; void IniPuertos() { set_tris_A(0xFF); set_tris_B(0x00); output_B(0x00); set_tris_C(0b11000000); //output_C(0b0000); } void IniPWM() { var=249; postscaler=1; setup_timer_2(T2_DIV_BY_4, var,postscaler); // N=(var+1)*prediv*posviv = Periodo de la señal //Valor=Talto*clock/Predivisor setup_ccp1(CCP_PWM);// Configure CCP1 as a PWM setup_ccp2(CCP_PWM);// Configure CCP2 as a PWM delay_ms(100); set_pwm1_duty(0); set_pwm2_duty(0); } void clear() { output_bit(led1,0); output_bit(led2,0); output_bit(IN_A1,0); output_bit(IN_A2,0); set_pwm1_duty(0); output_bit(IN_B1,0); output_bit(IN_B2,0); set_pwm2_duty(0); } void adelante() { output_bit(led1,1); output_bit(led2,0); output_bit(IN_A1,1); output_bit(IN_A2,0); set_pwm1_duty(255); output_bit(IN_B1,1); output_bit(IN_B2,0); set_pwm2_duty(255); } void atras() { output_bit(led1,0); output_bit(led2,1); output_bit(IN_A1,0); output_bit(IN_A2,1); set_pwm1_duty(255); output_bit(IN_B1,0); output_bit(IN_B2,1); set_pwm2_duty(255); } void izquierda_adelante() { output_bit(led1,0); output_bit(led2,1); output_bit(IN_A1,0); output_bit(IN_A2,0); set_pwm1_duty(255); output_bit(IN_B1,1); output_bit(IN_B2,0); set_pwm2_duty(255); } void derecha_adelante() { output_bit(led1,0); output_bit(led2,1); output_bit(IN_A1,1); output_bit(IN_A2,0); set_pwm1_duty(255); output_bit(IN_B1,0); output_bit(IN_B2,0); set_pwm2_duty(255); } void izquierda_atras() { output_bit(led1,1); output_bit(led2,1); output_bit(IN_A1,0); output_bit(IN_A2,0); set_pwm1_duty(255); output_bit(IN_B1,0); output_bit(IN_B2,1); set_pwm2_duty(255); } void derecha_atras() { output_bit(led1,1); output_bit(led2,1); output_bit(IN_A1,0); output_bit(IN_A2,1); set_pwm1_duty(255); output_bit(IN_B1,0); output_bit(IN_B2,0); set_pwm2_duty(255); } void curva_derecha_adelante() { output_bit(led1,1); output_bit(led2,0); output_bit(IN_A1,1); output_bit(IN_A2,0); set_pwm1_duty(255); output_bit(IN_B1,1); output_bit(IN_B2,0); set_pwm2_duty(120); } void curva_izquierda_adelante() { output_bit(led1,1); output_bit(led2,0); output_bit(IN_A1,1); output_bit(IN_A2,0); set_pwm1_duty(120); output_bit(IN_B1,1); output_bit(IN_B2,0); set_pwm2_duty(255); } void curva_derecha_atras() { output_bit(led1,1); output_bit(led2,0); output_bit(IN_A1,0); output_bit(IN_A2,1); set_pwm1_duty(255); output_bit(IN_B1,0); output_bit(IN_B2,1); set_pwm2_duty(120); } void curva_izquierda_atras() { output_bit(led1,1); output_bit(led2,0); output_bit(IN_A1,0); output_bit(IN_A2,1); set_pwm1_duty(120); output_bit(IN_B1,0); output_bit(IN_B2,1); set_pwm2_duty(255); } void main() { IniPuertos(); IniPWM(); clear(); while(true) { if(kbhit()){ // Preguntamos si hay disponible dato en bufer de recepción. valor=getc(); // Si así es, lo leemos y guardamos en DatoRx. if(valor=='a'){ adelante(); } if(valor=='b'){ izquierda_adelante(); } if(valor=='c'){ clear(); } if(valor=='d'){ derecha_adelante(); } if(valor=='e'){ atras(); } //if(valor=='f'){ // inc_vel(); // } if(valor=='g'){ clear(); } } } }