// n4conhecer.c - Criado pelo studio UNO 2.3
// 11 August 2016 12:47:12 pm
#include <uno.h>
// Defines
#define TempoSinc 5
// Declaracao das Variaveis
unsigned int Angulo;
unsigned int Distancia;
int EncDir;
int EncEsq;
int Pulsos;
unsigned int Velocidade;
// Prototipos
void freio(void);
void GiraEsquerda(void);
void LeEncoders(void);
void Reto(void);
void RetoAteObjeto(void);
void GiraDireita(void);
void ZeraEncoders(void);
void RetoPorDistancia(void);
//Funcoes do Usuario
void freio(void)
{
__motor_curso(__REVERSE);
__delay(40);
__motor_curso(__STOP);
}
void GiraEsquerda(void)
{
ZeraEncoders();
__motor_curso(__LEFT_ROTATE);
// NP=Angulo/4.19
Pulsos = (Angulo / 4.19);
while((__EncoderGetValue(2) < Pulsos)) {
while(!(__EncoderGetValue(2) >= Pulsos)) { __delay(10); }
}
}
void LeEncoders(void)
{
EncEsq = __EncoderGetValue(1);
EncDir = __EncoderGetValue(2);
__delay(TempoSinc);
}
void Reto(void)
{
if ((EncEsq > EncDir)) {
__motor(1, 0);
__motor(2, Velocidade);
}
if ((EncEsq < EncDir)) {
__motor(1, Velocidade);
__motor(2, 0);
}
if ((EncEsq == EncDir)) {
__motor(1, Velocidade);
__motor(2, Velocidade);
}
}
void RetoAteObjeto(void)
{
ZeraEncoders();
while((__analog_in(0) < 500)) {
reto();
LeEncoders();
}
}
void GiraDireita(void)
{
ZeraEncoders();
__motor_curso(__RIGHT_ROTATE);
// NP=Angulo/4.19
Pulsos = (Angulo / 4.19);
while((__EncoderGetValue(1) < Pulsos)) {
while(!(__EncoderGetValue(1) >= Pulsos)) { __delay(10); }
}
}
void ZeraEncoders(void)
{
__SmartSensorCmd(1, 1, 9, 0);
__SmartSensorCmd(1, 2, 9, 0);
EncEsq = 0;
EncDir = 0;
}
void RetoPorDistancia(void)
{
ZeraEncoders();
// Pulsos=Distancia/0.618
Pulsos = (Distancia / 0.618);
while(((EncEsq < Pulsos) || (EncDir < Pulsos))) {
reto();
LeEncoders();
}
}
//Funcao Principal
void main(void)
{
__inicializa;
__SmartSensorCmd(1, 1, 8, 0);
Angulo = 90;
Velocidade = 900;
Distancia = 40;
RetoPorDistancia();
GiraDireita();
RetoPorDistancia();
GiraEsquerda();
RetoAteObjeto();
freio();
while(TRUE) { }
}