// n2conhecer20160927.c - Criado pelo studio UNO 2.3
// 27 September 2016 1:47:53 pm
#include <uno.h>
// Declaracao das Variaveis
unsigned int Angulo;
unsigned int Distancia;
int EncDir;
int EncEsq;
unsigned int Graus;
unsigned char SegIr1;
unsigned char SegIr2;
unsigned char SegIr3;
unsigned char SegIr4;
unsigned char SegIr5;
unsigned int Tempo;
int Velocidade;
// Prototipos
void Freio(void);
void ZeraEncoders(void);
void CurvaEsquerda(void);
void Resgate(void);
void DiminuiVel(void);
void EmFrente(void);
void CurvaDireita(void);
void LeEncoders(void);
void Reto(void);
//Funcoes do Usuario
void Freio(void)
{
__motor_curso(__REVERSE);
__delay(30);
__motor_curso(__STOP);
}
void ZeraEncoders(void)
{
__SmartSensorCmd(1, 1, 9, 0);
__SmartSensorCmd(1, 2, 9, 0);
EncEsq = 0;
EncDir = 0;
}
void CurvaEsquerda(void)
{
__motor(1, -550);
__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 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 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, -550);
}
void LeEncoders(void)
{
EncEsq = __EncoderGetValue(1);
EncDir = __EncoderGetValue(2);
__delay(5);
}
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);
}
}
//Funcao Principal
void main(void)
{
__inicializa;
Velocidade = 900;
while(TRUE) {
SegIr2 = __SeguidorGetAnalog(1, 2);
SegIr3 = __SeguidorGetAnalog(1, 3);
SegIr4 = __SeguidorGetAnalog(1, 4);
if ((SegIr2 < 25)) {
CurvaEsquerda();
}
if ((SegIr3 < 25)) {
__motor_curso(__FORWARD);
}
if ((SegIr4 < 25)) {
CurvaDireita();
}
}
while(TRUE) { }
}