Problema con programación de motores en C++

Hola a tod@s. Me encuentro realizando un proyecto en lenguaje C++ como hobbie, se trata de realizar un carrito a control remoto, ya realicé uno pero ese fué solo secuencial; ahora me encuentro realizando otro que se mueva cada vez que mantenga presionado un botón, ya tengo una parte programada y funciona a la perfección, solo tengo problema en lo siguiente, pero primero les comentaré que llevo para que tengan una idea: dispongo de 4 pulsadores, A, B, C y D. Cuando mantenga presionado el pulsador A, el carrito debe avanzar, de lo contrario no, Cuano mantenga pulsado B, el carrito debe retroceder, de lo contrario no, para esta parte utilizo el integrado de un puente H L293d que me permite invertir el giro de los motores, Ah, lo olividaba, estoy usando dos motores. Ahora sí paso a contarles el problema: cuando quiera presionar C, uno de los motores debe activarse mientras que el otro no, pero cuando voy a simular esta parte las anteriores acciones se bloquean, no sé a qué se debe. Paso a continuación el código en C para que le hechen un vistazo. Por si quieren ver también la simulación les envío el archivo DSN y el .C del código, solo denle descomprimir.


Código:
#include "F:\Users\Home\Desktop\Prueba Pulsador\Pulsador.h"
#byte LEDS=0x07//CONFIGURO TODO EL BYTE PARA LOS LEDS EN EL PUERTO C
#byte MOTORES=0x08//CONFIGURO TODO EL BYTE PARA LOS MOTORES EN EL PUERTO D

#bit led_amarillo_1=0x07.0//PARA CONECTAR UN SOLO LED EN EL PIN RC7.0
#bit led_amarillo_2=0x07.1//PARA CONECTAR UN SOLO LED EN EL PIN RC7.1
#bit led_rojo_1=0x07.2//PARA CONECTAR UN SOLO LED EN EL PIN RC7.2
#bit led_rojo_2=0x07.3//PARA CONECTAR UN SOLO LED EN EL PIN RC7.3
#bit pulsador_A=0x05.0//PARA CONECTAR EL PULSADOR A EN EL PIN RA0
#bit pulsador_B=0x05.1//PARA CONECTAR EL PULSADOR B EN EL PIN RA1
#bit pulsador_C=0x05.2//PARA CONECTAR EL PULSADOR C EN EL PIN RA2
#bit pulsador_D=0x05.3//PARA CONECTAR EL PULSADOR D EN EL PIN RA3
#bit MOTOR1_DER=0x08.0//PARA CONECTAR UN MOTOR DE GIRO DERECHA EN EL PIN RD0
#bit MOTOR1_IZQ=0x08.1//PARA CONECTAR UN MOTOR DE GIRO IZQUIERDA EN EL PIN RD1

#bit MOTOR2_DER=0x08.2//PARA CONECTAR UN MOTOR DE GIRO DERECHA EN EL PIN RD2
#bit MOTOR2_IZQ=0x08.3//PARA CONECTAR UN MOTOR DE GIRO IZQUIERDA EN EL PIN RD3

#byte tris_led=0x87//PARA DECIRLE SI VA A HACER ENTRADA O SALIDA LOS LED
#byte tris_pulsador=0x85//PARA DECIRLE SI VA A HACER ENTRADA O SALIDA LOS PULSADORES
#byte tris_motores=0x88//PARA DECIRLE SI VA A HACER ENTRADA O SALIDA LOS MOTORES

void main()
{
tris_pulsador=0b11111111;//CONFIGURO LOS PULSADORES COMO ENTRADAS
tris_led=0b11110000;//CONFIGURO LOS LED COMO SALIDAS
tris_motores=0b11110000;//CONFIGURO LOS MOTORES COMO SALIDAS
leds=0x00;//COMIENZAN LOS LEDS APAGADOS
motores=0x00;//COMIENZAN LOS MOTORES APAGADOS

while(1)
{
if(pulsador_A==1)//SI PULSADOR A SE MANTIENE PRESIONADO
{
 led_amarillo_1=1;//SE ENCIENDEN LOS LEDS, AUNQUE SE ENCIENDEN REALMENTE DESDE QUE SE ALIMENTA EL PIC
 led_amarillo_2=1;
 MOTOR1_DER=1;//LOS MOTORES 1 Y 2 DERECHA SE ACTIVAN
 MOTOR2_DER=1;
}
else//DE LO CONTRARIO, SI NO SE MANTIENE PRESIONADO A
{
 led_amarillo_1=1;//LOS LEDS IGUAL CONTINUAN PRENDIDOS
 led_amarillo_2=1;
 MOTOR1_DER=0;//LOS MOTORES EN CAMBIO DEBEN DESACTIVARSE
 MOTOR2_DER=0;
}
if(pulsador_B==1)//SI SE MANTIENE PRESIONADO B
{
 led_rojo_1=1;//CONTINUAN LOS LEDS ENCENDIDOS
 led_rojo_2=1;//LOS MOTORES  Y 2 IZQUIERDA SE ACTIVAN PARA QUE EL CARRITO RETROCEDA
 MOTOR1_IZQ=1; 
 MOTOR2_IZQ=1;
} 
else//DE LO CONTRARIO, SI NO SE MANTIENE PRESIONADO B
{
 led_rojo_1=1;
 led_rojo_2=1;
 MOTOR1_IZQ=0;//LOS MOTORES 1 Y 2 IZQUIERDA SE DESACTIVAN
 MOTOR2_IZQ=0;
 
}
if(pulsador_C==1)//AQUÍ ES DONDE QUIERO QUE AL PRESIONAR C, EL MOTOR 1 DERECHA SE ACTIVE SOLAMENTE
{

}
else
{

}
}
}
 

Adjuntos

  • Prueba Pulsador.rar
    37.6 KB · Visitas: 3
Última edición por un moderador:
Hola. El lenguaje es del CCS y es C no C++.
Viendo solo el código configuras IO digitales pero sucede que este PIC tiene entradas análogas en el PORTA que están activas por defecto... es decir que para que funciona como digital el PORTA necesitas desactivar las entradas análogas... debe ser el ADCON o CMCON no recuerdo.

Sobre el circuito, una entrada digital no debe de estar flotante... ahí antes de los pulsadores necesitas unas resistencias "Pull-Down" para que la lógica funcione.

Saludos
 
Atrás
Arriba