fbpx

Expresate

Si además quieres enviarnos un Artículo para el Blog y redes sociales, pulsa el siguiente botón:

Algoritmo rastreado...
 
Avisos
Vaciar todo

Algoritmo rastreador en C

28 Respuestas
9 Usuarios
0 Reactions
11.6 K Visitas
chentinox
Respuestas: 15
Topic starter
(@chentinox)
Active Member
Registrado: hace 18 años

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

Responder
27 respuestas
fj_sanchez
Respuestas: 1083
(@fj_sanchez)
Ardero
Registrado: hace 19 años

Una aclaración while(TRUE) y for(;;) son exáctamente lo mismo, bucles infinitos. CCS los pasa a ensamblador como BRA directos a una posición.
.................... while(TRUE) {
.................... }
106A: BRA 106A

.................... for(;;) {
.................... }
106A: BRA 106A

Responder
dragonet80
Respuestas: 1328
(@dragonet80)
Ardero
Registrado: hace 17 años

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:

A mi me pasa exactamente lo mismo, y eso, exactamente me estoy haciendo ahora con el dsPIC para poder trabajar directamente con los pines y registros especiales desde el CCS.

Responder
chentinox
Respuestas: 15
Topic starter
(@chentinox)
Active Member
Registrado: hace 18 años

Bueno,he conseguido hacer que me funcionen los rb0,1,2,3 y hacerle un siguelineas detectando linea y giros con dos bucles for(;;) con if-else dentro.
Tambien lo probre con while(1) y funcina de manera similar.
Soy consciente que me hacen falta por lo menos dos entradas mas para detectar los cruces,de hecho tengo 8 cny70 en V.
Lo primero es habilitar el puerto b todos como entradas para poder seguir el programa y tener los rb4,5,6,7 , probrare con las intrucciones que me habeis posteado.
Estoy con CCS con PWH.
Mañana os posteo el programa por si lo podeis depurar un poco,entre todos algo sacare.

Responder
gizer20
Respuestas: 1570
(@gizer20)
Noble Member
Registrado: hace 19 años

Los sensores estan en V o V invertida??

Responder
chentinox
Respuestas: 15
Topic starter
(@chentinox)
Active Member
Registrado: hace 18 años

Gizer_20 , no se que es lo de la V invertida,pero yo tengo los sensores centrales los primeros y los laterales detras de los centrales.
He probrado a poner despues del void set_trisb_b(0b0000000) y me siguen sin funcionar los otros 4 cny.
Ahora me sigue linea negra y detecta los giros dcha/Izq perfectamente pero si no habilito los demas cny70, no se como continuar.
Pongo el codigo para que lo mireis haber que me puede faltar, para poner los rb4,5,6,7 como entradas.

El codigo es el siguiente:

#include <16F84A.h>
#fuses XT,NOWDT
#use delay(clock=4000000)

#define md_ade PIN_A3
#define md_atr PIN_A2
#define mi_ade PIN_A1
#define mi_atr PIN_A0

#define s0 PIN_B0
#define s1 PIN_B1
#define s2 PIN_B2
#define s3 PIN_B3
#define s4 PIN_B4
#define s5 PIN_B5
#define s6 PIN_B6
#define s7 PIN_B7

#define ON output_high
#define OFF output_low

void main()
{
off(md_ade);
off(mi_ade);
off(md_atr);
off(mi_atr);

for (;;){
if (input(s1) == 0) {on(md_ade);}else{for(;;){
if (input(s0) == 0) {for(;;){
if (input(s1) == 0){off(md_ade);off(mi_atr);break;}
else{on(md_ade);on(mi_atr);}

}
}
else {off(md_ade);break;}
}
}

if (input(s2) == 0) {on(mi_ade);}else{for(;;){
if (input(s3) == 0) {for(;;){
if (input(s2) == 0){off(mi_ade);off(md_atr);break;}else{on(mi_ade);on(md_atr);}

}
} else {off(mi_ade);break;}
}
}

}
}

Responder
Página 4 / 6
Compartir: