Carrito Seguilineas con Pic16f877a y Cny70

Muy buenos dias, quisiera saber si me podrian ayudar con mi diagrama de mi circuito y mi codigo es para un carrito seguilineas.

espero alguien me pueda ayudar segun yo esta bien.

Código:
#include "C:\Users\miguel\Documents\escuela\Instrumentacion\carrito seguilineas\bueno\main.h"

short s1=0;
short s2=0;
short s3=0;

void main()
{
 while(true)
    { 
s1=!input_state(pin_b0);
s2=!input_state(pin_b1);
s3=!input_state(pin_b2);

if(s1==1&&s2==0&&s3==1) //Adelante
{
output_high(pin_d7);
output_low(pin_d6);
output_high(pin_d5);
output_low(pin_d4);
}
if(s1==0&&s2==0&&s3==1) //izquierda
{
output_low(pin_d7);
output_low(pin_d6);
output_high(pin_d5);
output_low(pin_d4);
}
if(s1==1&&s2==1&&s3==0) //Derecha
{
output_high(pin_d7);
output_low(pin_d6);
output_low(pin_d5);
output_low(pin_d4);
}
    }
delay_ms(1000);
}
 

Adjuntos

  • 2 diagrama.jpg
    2 diagrama.jpg
    144.8 KB · Visitas: 28
¿Y cuál es el problema, de software o de hardware?

Lo único que noto extraño en el programa, es al usar lo siguiente: s1 = !input_state(pin_b0);
O sea, s1 retornará un 1 cuando el pin RB0 esté en nivel lógico 0.
Que viene siendo lo contrario a: s1 = input_state(pin_b0);
En donde sí se recibe el estado actual del pin.

Para mi resulta más fácil identificar y comparar el estado actual del pin, que recibirlo con el nivel invertido.

Otras cosas. El retardo está dentro del main, por lo que retrasaría un segundo el inicio del programa.
Y si lo piensas usar dentro del bucle, retrasaría el proceso de comparación. Así qué, omítelo.
También te recomiendo que le des un estado inicial a los pines de dirección del L293D y hagas uso de los pines EN1 y EN2 para un mejor control.
 
Yo recomendaría que usara un comparador en lugar de una compuerta lógica, esto te permitirá calibrar los sensores de forma simple.
 
Atrás
Arriba