Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:
Hola,estoy empezando en el mundillo de los bots y no tengo mucha idea de programar en C,necesito un algoritmo rastreador para mi SKYBOT con 4 sensores CNY 70.
A ver esa gente experta ke me eche un cable y me pase uno para fijarme un poco en por donde van los tiros,por mas que lo busco en los foros no lo encuentro.
Muchas gracias y nos vemos en CP Bot 07
Bueno,ya estoy aqui de nuevo gastando tiempo y pilas en hacer funcionar mi 16f84A como rastreador.
En primer lugar quisiera saber como hacer que todos los RB sean de entrada,quizas sea poniendo justo despues del void:
set_trisb_b(11111111);
Lopongo pero los rb4,5,6,7 no me responden.
Cual seria la mejor opcion para hacer un rastreador,yo estuy utilizando la sentencia for(;;).
He probado con while(true),pero no controlo bien los movimientos.
A partir de seguir la linea negra,el detectar cruces es toda una odisea para un principiante como yo.
Nadia me puede pasar un ejemplo en c,para 4 cny70 con el que pueda empezar a trabajar y seguir yo solo.
Gracias de nuevo.
Antes que nada, ¿qué compilador estás usando? ¿CCS, c18, sdcc, pic-gcc? Respecto a la programación, lo mejor sería un PID para ir centrado en la linea y luego, cuando detectes un cruce, desactivarlo y controlar los motores directamente.
De todos modos, desde ya te aviso de que 4 sensores no me parecen suficientes para hacer un buen control, sobre todo si quieres ir un poco rápido. Ten en cuenta que si usas los 2 centrales para ir sobre la linea, solo te quedarán 2 para detección de bifurcaciones y cruces. A penas te desvíes un poco de la linea puede que uno de los sensores no te detecte un cruce o bifurcación...
Si usa SET_TRIS_B(), es que está usando CCS, pues esa instrucción es exclusiva de ese compilador.
Respecto a activar los pines como entrada, debes tener en cuenta una cosa: los números en binario en el CCS van precedidos por 0b, sino se trata de un número decimal. Eso quiere decir que para activar todos los bits deberías poner:
SET_TRIS_B(0b11111111);
Pues entonces no veo el motivo por el cual usar esa función, simplemente con data = input_b() ya le valdría. Esta función ya ajusta el registro TRIS de forma automática (salvo que usemos directivas del tipo #USE *_IO).
Saludos.
Hola!
A mi particularmente no me gusta ni una forma de utilizar los puertos ni la otra. Lo que menos me gusta de CCS es el uso excesivo de las librerias de funciones para cosas tan simples como encender un led.
Yo lo que hago es definir como variables las direcciones de los registros, por ejemplo:
#byte portB=0x06 //Le ponemos el nombre portB al registro 0x06 (puerto B)
#byte TRISB=0x86 //Le ponemos el nombre TRISB al registro 0x86 (trisB)
#bit Led = portB.0 //Le ponemos el nombre Led al bit 0 del puerto B
Si los defines así, luego puedes hacer...
TRISB=0xFE; //Puerto B como entradas excepto el bit 0
Led=1; //Activo el bit 0 del puerto B
.
.
.
De todas formas y atendiendo a la duda:
set_trisb_b(11111111);
Lopongo pero los rb4,5,6,7 no me responden.
¿Te funcionan como entradas los bit 0, 1, 2, y 3?... ¿Que conectas en las entradas y como?... ¿has tenido en cuenta los pull-ups internos del puerto B?
Y por otro lado:
Cual seria la mejor opcion para hacer un rastreador,yo estuy utilizando la sentencia for(;;).
He probado con while(true),pero no controlo bien los movimientos.
La sentencia for no se como te puede ayudar a hacer un rastreador básico... lo más sencillo seria un bucle infinito con while(1) y dentro evaluar el estado de los sensores y tomar decisiones con sentencias if-else.
Salu2!