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
chentinox
Respuestas: 15
Topic starter
(@chentinox)
Active Member
Registrado: hace 18 años

Fe de Erratas:En el codigo pone set_tris_b(0b00000000) y deberia poner set_tris_b(0b11111111)
Lo he probado de las dos formas.
Lo volvi a comprobar con set_tris_b(0b11111111) y solo definir 2 cnys
Mi sorpresa fue que funcionaba el primer cny (s1)que ni siquiera lo mencionaba en el programa.

#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 s4 PIN_4
#define s7 PIN_B7

#define ON output_high
#define OFF output_low

void main()
{

for (;;){
if (input(s4) == 0) {on(md_ade);}else{off(md_ade);}
if (input(s7) == 0) {on(md_ade);}else{off(mi_ade);}
}
}

Gizer_20 te dejo la foto de los cny para aclarar si es V o V invertida.

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

Opp,la foto...

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

Como no pongas una foto con más calidad, poco se puede ver.

Responder
boops
Respuestas: 1813
(@boops)
Ardero
Registrado: hace 19 años

Yo diria que estan puestos en media luna 😀

Responder
bastian
Respuestas: 384
(@bastian)
Ardero
Registrado: hace 17 años

Hola!

Te voy ha hacer una pequeña recomendación... cuando programes en c y abras una llave hazlo en una linea nueva y con un tabulador antes...

Llevo un rato intentando seguir tu programa y estoy a punto de cortarme las venas... te quedará más facil de seguir y de entender. Por ejemplo:
#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;
}
}
}
}
}

y una segunda recomendación... pon comentarios en el código. Si no dentro de unos dias no entenderás tu propio código.

Otra cosa: es dificil entender el código si no sabemos que sensor es que señal... s0 es el sensor derecho, el izquierdo, el central derecho...

Sobre el segundo programa:
Creo que tienes mal el #define del pin_4 e intuyo que si S7==0 mueves el motor Izq. Supongo que quieres seguir recto cuando los dos están sobre la linea.

#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 s4 PIN_B4 //deberia ser #define s4 PIN_B4
#define s7 PIN_B7

#define ON output_high
#define OFF output_low

void main()
{
for (;;)
{
if (input(s4) == 0)
{
on(md_ade);
}
else
{
off(md_ade);
}
if (input(s7) == 0)
{
on(mi_ade); //creo que es así
}
else
{
off(mi_ade);
}
}
}

Particularmente no me gusta lo de utilizar bucles infinitos y salir con un break. Antes que eso utilizaria el while(condición){} o el do{}while(condicion);

Una última pregunta:
¿Conectas directamente los CNY a los pines del PIC o utilizas inversores Trigger-Schmitt?

Salu2!

Responder
Página 5 / 6
Compartir: