Hola buenas,
es la primera vez que escribo en el foro, así que espero estar posteando en el lugar apropiado jeje!!
Tengo la siguiente duda:
He hecho un programa para poder regular la velocidad y sentido de giro de dos motores a la vez que hago que se encienda y apaguen un par de leds; sé como actuar por ellos en separado pero cuando intento hacer que vayan las dos cosas juntas los leds van a su aire con respecto a los motores. Os pego el código que he usado y ya me decis:
///////////////
#include <movimientos.h>
#include <16F877A.h>
#device adc=16
#FUSES NOWDT, HS, NOPUT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT
#use delay(clock=4000000)
#byte TRISB=0X86
#byte TRISC=0X87
#define M_IZQ PIN_B2
#define M_DER PIN_B3
////////////////////////////////////////////////////////////////////////////////
//Función: Ini_motores //
//Con esta función podemos configurar los motores. //
////////////////////////////////////////////////////////////////////////////////
void Ini_motores(void)
{
delay_ms(400);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_2);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_16,255,1);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
setup_comparator(NC_NC_NC_NC);
bit_clear(TRISC,1);
bit_clear(TRISC,2);
bit_clear(TRISB,2);
bit_clear(TRISB,3);
set_pwm1_duty(0);
set_pwm2_duty(0);
return;
}
//////////////////////////////////////////////////////////////////////////////////
//Función: Atras //
//Con esta función podemos hacemos que el seguidor vaya hacia atras, //
//además los leds parpadearán. //
//////////////////////////////////////////////////////////////////////////////////
void Atras(void)
{
output_low(M_IZQ); //El motor izquierdo gira adelante
output_low(M_DER); //El motor derecho gira hacia atras
set_pwm1_duty(1023); //Metemos un pulso del 100% en M. Izq.
set_pwm2_duty(1023); //Metemos un pulso del 100% en M. Der.
while(a<100)
{
output_high(PIN_A2); //enciendo el led
output_high(PIN_A3); //enciendo el led
delay_ms(1000); //retardo de 1s
output_low(PIN_A2); //apago
output_low(PIN_A3); //apago
delay_ms(1000);
a++;
}
output_low(PIN_A2);
output_low(PIN_A3);
return;
}
////////////////////////////////////////////////////////////////////////////////
//Función: Parada //
//Con esta función podemos hacemos que el seguidor pare. //
// //
////////////////////////////////////////////////////////////////////////////////
void Parada(void)
{
set_pwm1_duty(0); //Metemos un pulso del 0% en M. Izq.
set_pwm2_duty(0); //Metemos un pulso del 0% en M. Der.
return;
}
void main()
{
while(TRUE)
{
while(!input(PIN_C0)){}
Ini_motores();
delay_ms(2000);
Atras(); //llamo a esta función para ir atras
delay_ms(6000); //retardo para ejecutarla por 6s
Parada(); //llamo a esta función para para
delay_ms(2000); //estoy para 2s con este retardo
}
}
Es evidente que hay más funciones jeje, pero esta es de ejemplo.
Espero que me podais ayudar please.
Saludos,
Antonio.
es la primera vez que escribo en el foro, así que espero estar posteando en el lugar apropiado jeje!!
Tengo la siguiente duda:
He hecho un programa para poder regular la velocidad y sentido de giro de dos motores a la vez que hago que se encienda y apaguen un par de leds; sé como actuar por ellos en separado pero cuando intento hacer que vayan las dos cosas juntas los leds van a su aire con respecto a los motores. Os pego el código que he usado y ya me decis:
///////////////
#include <movimientos.h>
#include <16F877A.h>
#device adc=16
#FUSES NOWDT, HS, NOPUT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT
#use delay(clock=4000000)
#byte TRISB=0X86
#byte TRISC=0X87
#define M_IZQ PIN_B2
#define M_DER PIN_B3
////////////////////////////////////////////////////////////////////////////////
//Función: Ini_motores //
//Con esta función podemos configurar los motores. //
////////////////////////////////////////////////////////////////////////////////
void Ini_motores(void)
{
delay_ms(400);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_2);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_16,255,1);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
setup_comparator(NC_NC_NC_NC);
bit_clear(TRISC,1);
bit_clear(TRISC,2);
bit_clear(TRISB,2);
bit_clear(TRISB,3);
set_pwm1_duty(0);
set_pwm2_duty(0);
return;
}
//////////////////////////////////////////////////////////////////////////////////
//Función: Atras //
//Con esta función podemos hacemos que el seguidor vaya hacia atras, //
//además los leds parpadearán. //
//////////////////////////////////////////////////////////////////////////////////
void Atras(void)
{
output_low(M_IZQ); //El motor izquierdo gira adelante
output_low(M_DER); //El motor derecho gira hacia atras
set_pwm1_duty(1023); //Metemos un pulso del 100% en M. Izq.
set_pwm2_duty(1023); //Metemos un pulso del 100% en M. Der.
while(a<100)
{
output_high(PIN_A2); //enciendo el led
output_high(PIN_A3); //enciendo el led
delay_ms(1000); //retardo de 1s
output_low(PIN_A2); //apago
output_low(PIN_A3); //apago
delay_ms(1000);
a++;
}
output_low(PIN_A2);
output_low(PIN_A3);
return;
}
////////////////////////////////////////////////////////////////////////////////
//Función: Parada //
//Con esta función podemos hacemos que el seguidor pare. //
// //
////////////////////////////////////////////////////////////////////////////////
void Parada(void)
{
set_pwm1_duty(0); //Metemos un pulso del 0% en M. Izq.
set_pwm2_duty(0); //Metemos un pulso del 0% en M. Der.
return;
}
void main()
{
while(TRUE)
{
while(!input(PIN_C0)){}
Ini_motores();
delay_ms(2000);
Atras(); //llamo a esta función para ir atras
delay_ms(6000); //retardo para ejecutarla por 6s
Parada(); //llamo a esta función para para
delay_ms(2000); //estoy para 2s con este retardo
}
}
Es evidente que hay más funciones jeje, pero esta es de ejemplo.
Espero que me podais ayudar please.
Saludos,
Antonio.