la idea es que funcionen con unos sensores de proximidad, que he buscado la manera para que el voltaje me lo entrege en distancia.. ya que cuando se encuentre a menos de 10 cm tiene que doblar, derecha izquieda o 180 grados.. estoy es lo que he hecho..
pero lo he provado con proteus.. y no me anda, como que nunca me entra a las condiciones que tengo, y ya no se que hacer :/, no se mucho de pic ni me manejo mucho con el PWM he visto muchas informaciones.. y con eso he ido formando el programa.. pero ya no se que hacer .. ( son 2 motores y cree un puente H con L293D), bueno muchas gracias de ante mano... ...
Código:
#include <16F877A.h>
#device adc=8
#fuses XT, NOWDT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT,
#use delay(clock=4000000)
#include <math.h>
float volta,volti,voltd,disa,disi,disd;
int adelante,izq,der;
void main(){
set_tris_A(0x1F);
set_tris_C(0x00);
setup_adc(ADC_CLOCK_DIV_4);
setup_adc_ports(3);
while(1){
setup_timer_2(T2_DIV_BY_16,255,1); //Modo, periodo y postscaler, para que funciones a 1 Hz
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
set_pwm1_duty(207);
set_pwm2_duty(80);;
set_adc_channel(0);
delay_ms(15);
adelante = read_adc();
volta = adelante*5.0/256.0;
set_adc_channel(1);
delay_ms(15);
izq = read_adc();
volti = izq* 5.0/256.0;
set_adc_channel(2);
delay_ms(15);
der = read_adc();
voltd = der* 5.0/256.0;
if ((Volta >0.5) && (volta<2.7)){
disa=(((16.75*pow(volta,4.0))-119.26*pow(volta,3.0))+(311.7*pow(volta,2.0))-(365.71*volta)+184.03);
if (disa<10.0){
if ((volti >0.5) && (volti<2.7)){
disi=(((16.75*pow(volti,4.0))-119.26*pow(volti,3.0))+(311.7*pow(volti,2.0))-(365.71*volti)+184.03);
if (disi<10.0){
if ((voltd >0.5) && (voltd<2.7)){
disd=(((16.75*pow(voltd,4.0))-119.26*pow(voltd,3.0))+(311.7*pow(voltd,2.0))-(365.71*voltd)+184.03);
}if (disd<10.0){
set_pwm1_duty(207);
set_pwm2_duty(80);
delay_ms(500);
}else{
set_pwm1_duty(207);
set_pwm2_duty(80);
delay_ms(250);
}
}else{
set_pwm1_duty(80);
set_pwm2_duty(207);
delay_ms(250);
}
}else{
set_pwm1_duty(80);
set_pwm2_duty(207);
delay_ms(250);
}
}else{ break;}
}
else{
if ((volti >0.5) && (volti<2.7)){
disi=(((16.75*pow(volti,4.0))-119.26*pow(volti,3.0))+(311.7*pow(volti,2.0))-(365.71*volti)+184.03);
if (disi<10.0){
set_pwm1_duty(207);
set_pwm2_duty(80);
delay_ms(250);
}
} else{
if ((voltd >0.5) && (voltd<2.7)){
disd=(((16.75*pow(voltd,4.0))-119.26*pow(voltd,3.0))+(311.7*pow(voltd,2.0))-(365.71*voltd)+184.03);
if (disd<10.0){
set_pwm1_duty(80);
set_pwm2_duty(207);
delay_ms(250);
}else{ break;}
}else{ break;}
}
}
}
}
pero lo he provado con proteus.. y no me anda, como que nunca me entra a las condiciones que tengo, y ya no se que hacer :/, no se mucho de pic ni me manejo mucho con el PWM he visto muchas informaciones.. y con eso he ido formando el programa.. pero ya no se que hacer .. ( son 2 motores y cree un puente H con L293D), bueno muchas gracias de ante mano... ...
Última edición por un moderador: