// n2conhecer20161018.c - Criado pelo studio UNO 2.3
// 11 October 2016 1:30:06 pm
#include <uno.h>
// Defines
#define PRETO 20
#define REDUZIDO -200
// Declaracao das Variaveis
unsigned int Angulo;
unsigned int Distancia;
int EncDir;
int EncEsq;
unsigned int Graus;
unsigned char Parar;
unsigned char SegIr1;
unsigned char SegIr2;
unsigned char SegIr3;
unsigned char SegIr4;
unsigned char SegIr5;
unsigned int Tempo;
int Velocidade;
// Prototipos
void LeSeguidorAnalogico(void);
void Freio(void);
void Reto(void);
void EmFrente(void);
void CurvaDireita(void);
void LeEncoders(void);
void DiminuiVel(void);
void Frente(void);
void CurvaEsquerda(void);
void Resgate(void);
void ZeraEncoders(void);
//Funcoes do Usuario
void LeSeguidorAnalogico(void)
{
SegIr1 = __SeguidorGetAnalog(1, 1);
SegIr2 = __SeguidorGetAnalog(1, 2);
SegIr3 = __SeguidorGetAnalog(1, 3);
SegIr4 = __SeguidorGetAnalog(1, 4);
SegIr5 = __SeguidorGetAnalog(1, 5);
}
void Freio(void)
{
__motor_curso(__REVERSE);
__delay(30);
__motor_curso(__STOP);
}
void Reto(void)
{
LeEncoders();
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 EmFrente(void)
{
ZeraEncoders();
EncDir = 0;
while(TRUE) {
if (__ENTER_KEY) {
Velocidade = 0;
}
if (__UP_KEY) {
Velocidade = 1023;
}
if (__LEFT_KEY) {
Velocidade = 899;
}
if (__RIGHT_KEY) {
Velocidade = 775;
}
if (__BOTTOM_KEY) {
Velocidade = 650;
}
Reto();
}
}
void CurvaDireita(void)
{
__motor(1, Velocidade);
__motor(2, REDUZIDO);
}
void LeEncoders(void)
{
EncEsq = __EncoderGetValue(1);
EncDir = __EncoderGetValue(2);
__delay(5);
}
void DiminuiVel(void)
{
__SmartSensorCmd(1, 1, 8, 0);
ZeraEncoders();
Velocidade = 1023;
while(TRUE) {
Reto();
if ((__UltrasonicGetValueMM(1) < 250)) {
__motor_curso(__LEFT_ROTATE);
__delay(1200);
freio();
ZeraEncoders();
}
}
}
void Frente(void)
{
__motor(1, Velocidade);
__motor(2, Velocidade);
}
void CurvaEsquerda(void)
{
__motor(1, REDUZIDO);
__motor(2, Velocidade);
}
void Resgate(void)
{
bitset(__TRIS_PWM, __DIGITAL1);
__PWM1 = 180;
__motor_curso(__FORWARD);
__timer_sistema = 0;
while(!(__analog_in(0) > 150)) { __delay(10); }
Tempo = __timer_sistema;
freio();
__PWM1 = 40;
__motor_curso(__BACKWARD);
__delay(Tempo);
freio();
__PWM1 = 180;
}
void ZeraEncoders(void)
{
__SmartSensorCmd(1, 1, 9, 0);
__SmartSensorCmd(1, 2, 9, 0);
EncEsq = 0;
EncDir = 0;
}
//Funcao Principal
void main(void)
{
__inicializa;
Parar = 0;
while((Parar == 0)) {
LeSeguidorAnalogico();
// Ir do meio sobre a linha. Toda vez que Sensor esta sobre a
// linha preta o valor é menor que 25.
if (((SegIr2 > PRETO) && ((SegIr3 < PRETO) && (SegIr4 > PRETO)))) {
// Ir da esquerda sobre a linha
Velocidade = 1023;
Frente();
}
if ((// Ir da Direita sobre a linha
(SegIr2 < PRETO) && ((SegIr3 > PRETO) && (SegIr4 > PRETO)))) {
Velocidade = 750;
CurvaEsquerda();
}
if (((SegIr2 > PRETO) && ((SegIr3 > PRETO) && (SegIr4 < PRETO)))) {
Velocidade = 750;
CurvaDireita();
}
if (((SegIr2 > PRETO) && ((SegIr3 > PRETO) && (SegIr4 > PRETO)))) {
Velocidade = 1023;
Frente();
}
if (((SegIr2 < PRETO) && ((SegIr3 < PRETO) && (SegIr4 < PRETO)))) {
Parar = 1;
}
}
Freio();
while(TRUE) { }
}