Pic detection objet
Forum robotique : robot quadrupede, hexapode et petits robots autonomes :: Robotique :: Robotique IUT :: Programmation
Page 1 sur 1
Pic detection objet
voila le programe pour comander un servomoteur et donc un gp2d12 et placé desu pour savoir dans kel direction et l'objet
pour l'instant il manque une petit parti pour envoyait la distance par une frequence variable
pour l'instant il manque une petit parti pour envoyait la distance par une frequence variable
- Code:
#include "C:\Users\giovanni\Documents\robot\teterobot1.h"
#ZERO_RAM
int i=0,t=0,C=0;
void main()
{
setup_adc_ports(sAN0|VSS_VDD);
setup_adc(ADC_OFF);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_comparator(NC_NC);
setup_vref(FALSE);
while(1)
while(i<100)
{
i++;
output_high(pin_a5);
delay_ms(1);
delay_us(i);
output_low(pin_a5);
delay_ms(18);
t=999-i;
delay_us(t);
set_adc_channel(2);
delay_us(20);
c=read_adc();
if (c<128)
{if(c>18)
{ output_high(pin_a4);
if ( i>0)
{if(i<333)
{output_high(pin_a3);}}
if ( i>333)
{if(i<666)
{output_high(pin_a2);}}
if ( i>666)
{if(i<1000)
{output_high(pin_a3);
output_high(pin_a2);}}
}
output_low(pin_a2);
output_low(pin_a3);
output_low(pin_a4);
}
while(i==0)
{
i--;
output_high(pin_a5);
delay_ms(1);
delay_us(i);
output_low(pin_a5);
delay_ms(18);
t=999-i;
delay_us(t);
set_adc_channel(2);
delay_us(20);
c=read_adc();
if (c<128)
{if(c>18)
{ output_high(pin_a4);
if ( i>0)
{if(i<333)
{output_high(pin_a3);}}
if ( i>333)
{if(i<666)
{output_high(pin_a2);}}
if ( i>666)
{if(i<1000)
{output_high(pin_a3);
output_high(pin_a2);}}
}
output_low(pin_a2);
output_low(pin_a3);
output_low(pin_a4);
}
}

GiovannI- Nombre de messages : 27
Date d'inscription : 25/03/2009
Re: Pic detection objet
C'est un peut compliqué ton code ... Je te conseille de faire une fonction pour contrôler ton servomoteur afin de l'appeller quand tu veut le controler.
Pourrait tu commenter ton code car j'ai un peut de mal à le comprendre svp
edit :
Pour piloter ton servomoteur tu peut utiliser cette fonction :
Je pense que sa peut marcher mais je ne l'ai jamais testé ...
on peut alors utiliser le code suivant :
Les deux utilisé ensemble vont permettre de mesurer la distance et de controler le servomoteur
Pourrait tu commenter ton code car j'ai un peut de mal à le comprendre svp
edit :
Pour piloter ton servomoteur tu peut utiliser cette fonction :
- Code:
Void servo(int8 A,int32 T)
// A l'angle voulu entre 0 et 255 et T la durée de mise en marche du servo en ms
// Attention T >=20 !!!!!
{
float T1=0,T2=0;
int8 i;
//conversion de la valeur A en ms
T1=(A*2)/255;
T2=20-T1;
T1=T*1000 // conversion en µs
T=T/20;
for(i=1;i<=T;i++){
output_high(pin_a5);// La sortie qui pilote le servomoteur
delay_us(T1);
output_low(pin_a5);
delay_ms(T2);
}
Je pense que sa peut marcher mais je ne l'ai jamais testé ...
on peut alors utiliser le code suivant :
- Code:
INT16 read_captor() // Retourne la distance avec un obstacle
{
int16 C=0;
set_adc_channel(2);
delay_us(20);
C=read_adc();
return C;
}
Les deux utilisé ensemble vont permettre de mesurer la distance et de controler le servomoteur
_________________
la critique est nécessaire mais l'invention est vitale, car dans toute invention il y a une critique de la convention...
Forum robotique : robot quadrupede, hexapode et petits robots autonomes :: Robotique :: Robotique IUT :: Programmation
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum|
|
|


