// modulo3v4.c - Criado pelo studio UNO 2.3
// 29 October 2015 1:31:10 pm
#include <uno.h>
// Defines
#define branco 255
#define linha 0
// Declaracao das Variaveis
unsigned char ace_x;
unsigned char ace_y;
unsigned char ace_z;
int enc_dir;
int enc_esq;
unsigned char ir_1;
unsigned char ir_2;
unsigned char ir_3;
unsigned char ir_4;
unsigned char ir_5;
unsigned char joy_c;
unsigned char joy_x;
unsigned char joy_y;
unsigned char joy_z;
// Prototipos
void le_segui(void);
void le_joy(void);
void gira_esq_180(void);
void inicia(void);
void seguelinha(void);
void gira_esq_90(void);
void freio(void);
void le_enconder(void);
void frente(void);
//Funcoes do Usuario
void le_segui(void)
{
ir_1 = __SeguidorGetDigital(1, 1);
__delay(5);
ir_2 = __SeguidorGetDigital(1, 2);
__delay(5);
ir_3 = __SeguidorGetDigital(1, 3);
__delay(5);
ir_4 = __SeguidorGetDigital(1, 4);
__delay(5);
ir_5 = __SeguidorGetDigital(1, 5);
__delay(5);
}
void le_joy(void)
{
ace_x = __ControllerGetAccelerometer_X(1);
__delay(10);
ace_y = __ControllerGetAccelerometer_Y(1);
__delay(10);
ace_z = __ControllerGetAccelerometer_Z(1);
__delay(10);
joy_x = __ControllerGetJoystick_X(1);
__delay(10);
joy_y = __ControllerGetJoystick_Y(1);
__delay(10);
joy_c = __ControllerGetButton_C(1);
__delay(10);
joy_z = __ControllerGetButton_Z(1);
__delay(10);
}
void gira_esq_180(void)
{
__SmartSensorCmd(1, 2, 9, 0);
__motor_curso(__LEFT_ROTATE);
while((__EncoderGetValue(2) < 34)) {
__delay(5);
while(!(__EncoderGetValue(2) > 34)) { __delay(10); }
__delay(5);
}
freio();
}
void inicia(void)
{
bitset(__TRIS_PWM, __DIGITAL1);
enc_esq = 0;
enc_dir = 0;
__SmartSensorCmd(2, 1, 14, 0);
__SmartSensorCmd(1, 1, 8, 0);
__SmartSensorCmd(1, 1, 9, 0);
__SmartSensorCmd(1, 2, 9, 0);
}
void seguelinha(void)
{
if (((ir_2 == linha) && ((ir_3 == linha) && (ir_4 == linha)))) {
freio();
}
if (((ir_2 == branco) && ((ir_3 == linha) && (ir_4 == branco)))) {
__motor_curso(__FORWARD);
}
if (((ir_2 == linha) && ((ir_3 == linha) && (ir_4 == branco)))) {
__motor(1, 900);
__motor(2, 1023);
}
if (((ir_2 == branco) && ((ir_3 == linha) && (ir_4 == linha)))) {
__motor(1, 1023);
__motor(2, 900);
}
if (((ir_2 == linha) && ((ir_3 == branco) && (ir_4 == branco)))) {
__motor(1, 700);
__motor(2, 1023);
}
if (((ir_2 == branco) && ((ir_3 == branco) && (ir_4 == linha)))) {
__motor(1, 1023);
__motor(2, 700);
}
}
void gira_esq_90(void)
{
__motor_curso(__LEFT_ROTATE);
while((__EncoderGetValue(2) < 34)) {
__delay(5);
while(!(__EncoderGetValue(2) > 34)) { __delay(10); }
__delay(5);
}
freio();
}
void freio(void)
{
__motor_curso(__REVERSE);
__delay(10);
__motor_curso(__STOP);
}
void le_enconder(void)
{
enc_esq = __EncoderGetValue(1);
__delay(10);
enc_dir = __EncoderGetValue(2);
__delay(10);
}
void frente(void)
{
while(((enc_esq < 324) || (enc_dir < 324))) {
le_enconder();
if ((enc_esq > enc_dir)) {
__motor_curso(__LEFT_TURN);
}
if ((enc_esq < enc_dir)) {
__motor_curso(__RIGHT_TURN);
}
if ((enc_esq == enc_dir)) {
__motor_curso(__FORWARD);
}
}
freio();
}
//Funcao Principal
void main(void)
{
__inicializa;
inicia();
__PWM1 = 180;
while((__analog_in(0) < 300)) {
le_segui();
seguelinha();
}
freio();
__PWM1 = 30;
__beep();
__delay(1000);
gira_esq_180();
while(!(((ir_2 == linha) && ((ir_3 == linha) && (ir_4 == linha))))) {
le_segui();
seguelinha();
}
__PWM1 = 180;
__beep();
while(TRUE) { }
}