// m3-localizando objeto.c - Criado pelo studio UNO 2.3
// 8 October 2014 6:42:55 pm
#include <uno.h>
// Declaracao das Variaveis
unsigned char angulo;
unsigned char auxiliar;
unsigned char direita;
unsigned int distancia;
unsigned char esquerda;
// Prototipos
void resgate(void);
void busca(void);
void frente(void);
void giro(void);
void varredura(void);
//Funcoes do Usuario
void resgate(void)
{
while((__analog_in(0) < 880)) {
frente();
}
__motor_curso(__STOP);
__PWM0 = 40;
__delay(500);
__motor_curso(__RIGHT_ROTATE);
__SmartSensorCmd(1, 1, 9, 0);
__SmartSensorCmd(1, 2, 9, 0);
while((__EncoderGetValue(1) < (180 / 4.2))) {
while(!(__EncoderGetValue(1) >= (180 / 4.2))) { __delay(10); }
}
while(!(__ENTER_KEY)) {
frente();
}
__motor_curso(__STOP);
__beep();
__PWM0 = 180;
}
void busca(void)
{
distancia = __UltrasonicGetValueMM(1);
while(((distancia > 500) || (distancia < 100))) {
distancia = __UltrasonicGetValueMM(1);
varredura();
}
__PWM1 = angulo;
}
void frente(void)
{
__SmartSensorCmd(1, 1, 9, 0);
__SmartSensorCmd(1, 2, 9, 0);
esquerda = __EncoderGetValue(1);
direita = __EncoderGetValue(2);
if ((esquerda == direita)) {
__motor_curso(__FORWARD);
}
if ((esquerda > direita)) {
__motor_curso(__LEFT_TURN);
}
if ((esquerda < direita)) {
__motor_curso(__RIGHT_TURN);
}
}
void giro(void)
{
__SmartSensorCmd(1, 1, 9, 0);
__SmartSensorCmd(1, 2, 9, 0);
if ((angulo < 90)) {
__motor_curso(__RIGHT_ROTATE);
while((__EncoderGetValue(1) < ((90 - angulo) / 4.2))) {
while(!(__EncoderGetValue(1) >= ((90 - angulo) / 4.2))) { __delay(10); }
}
}
else {
__motor_curso(__LEFT_ROTATE);
while((__EncoderGetValue(2) < ((angulo - 90) / 4.2))) {
while(!(__EncoderGetValue(2) >= ((angulo - 90) / 4.2))) { __delay(10); }
}
}
__motor_curso(__STOP);
__PWM1 = 90;
}
void varredura(void)
{
while((auxiliar < 180)) {
auxiliar += 5;
if ((angulo == 90)) {
__PWM1 = auxiliar;
__delay(55);
}
distancia = __UltrasonicGetValueMM(1);
if (((distancia < 500) && (distancia > 100))) {
angulo = auxiliar;
__motor_curso(__STOP);
auxiliar = 180;
}
}
while((auxiliar > 1)) {
auxiliar -= 5;
if ((angulo == 90)) {
__PWM1 = auxiliar;
__delay(55);
}
distancia = __UltrasonicGetValueMM(1);
if (((distancia < 500) && (distancia > 100))) {
angulo = auxiliar;
__motor_curso(__STOP);
auxiliar = 1;
}
}
}
//Funcao Principal
void main(void)
{
__inicializa;
__SmartSensorCmd(1, 2, 7, 0);
__SmartSensorCmd(1, 1, 8, 0);
auxiliar = 1;
angulo = 90;
bitset(__TRIS_PWM, __DIGITAL0);
bitset(__TRIS_PWM, __DIGITAL1);
bitset(__TRIS_PWM, __DIGITAL2);
__PWM1 = auxiliar;
__PWM2 = 5;
__delay(500);
frente();
busca();
__delay(300);
giro();
__PWM0 = 180;
__delay(500);
resgate();
while(TRUE) { }
}