// m3-desafio formas geometricas.c - Criado pelo studio UNO 2.3
// 6 November 2015 1:10:46 pm
#include <uno.h>
// Declaracao das Variaveis
unsigned char angulo;
int aux2;
unsigned char auxiliar;
unsigned int auxiliar2;
unsigned int curva;
int direita;
int esquerda;
float m1;
float m2;
unsigned char n_curva;
unsigned char raio;
float relacao;
// Prototipos
void display(void);
void interface(void);
void display_3(void);
void Pcurva(void);
void pare(void);
void parametro1(void);
void display_2(void);
void circulo(void);
void frente_reto(void);
//Funcoes do Usuario
void display(void)
{
if (__UP_KEY) {
__lcd_clear();
auxiliar++;
if ((auxiliar > 6)) {
auxiliar = 3;
}
while(!!(__UP_KEY)) { __delay(10); }
}
if (__BOTTOM_KEY) {
__lcd_clear();
auxiliar--;
if ((auxiliar < 3)) {
auxiliar = 6;
}
while(!!(__BOTTOM_KEY)) { __delay(10); }
}
display_2();
}
void interface(void)
{
while(!!(__ENTER_KEY)) { __delay(10); }
auxiliar = 3;
__backlight(__ON);
__lcd_goto(0x7f, 1);
__lcd_puts("apos selecao");
__lcd_goto(0xbf, 1);
__lcd_puts("aperte enter");
while(!__ENTER_KEY) { __delay(10); }
while(!!(__ENTER_KEY)) { __delay(10); }
__lcd_clear();
while(!(__ENTER_KEY)) {
display();
}
parametro1();
while(!!(__ENTER_KEY)) { __delay(10); }
__lcd_goto(0x7f, 1);
__lcd_puts("informe tamanho");
__lcd_goto(0xbf, 1);
__lcd_puts("lado/raio");
while(!__ENTER_KEY) { __delay(10); }
while(!!(__ENTER_KEY)) { __delay(10); }
__lcd_clear();
auxiliar = 1;
while(!(__ENTER_KEY)) {
display_3();
}
}
void display_3(void)
{
__lcd_goto(0x7f, 1);
auxiliar2 = (auxiliar * 100);
__lcd_puts("%u", auxiliar2);
__lcd_goto(0x7f, 7);
__lcd_puts("mm");
if (__UP_KEY) {
auxiliar++;
while(!!(__UP_KEY)) { __delay(10); }
}
if (__BOTTOM_KEY) {
auxiliar--;
while(!!(__BOTTOM_KEY)) { __delay(10); }
}
}
void Pcurva(void)
{
__SmartSensorCmd(1, 1, 9, 0);
__SmartSensorCmd(1, 2, 9, 0);
__motor_curso(__LEFT_TURN);
while((__EncoderGetValue(2) < curva)) {
while(!(__EncoderGetValue(2) >= curva)) { __delay(10); }
}
}
void pare(void)
{
__motor_curso(__REVERSE);
__delay(50);
__motor_curso(__STOP);
}
void parametro1(void)
{
if ((auxiliar == 3)) {
angulo = 60;
n_curva = 3;
}
if ((auxiliar == 4)) {
angulo = 90;
n_curva = 4;
}
if ((auxiliar == 5)) {
angulo = 120;
n_curva = 5;
}
if ((auxiliar == 6)) {
raio = 1;
}
}
void display_2(void)
{
if ((auxiliar == 3)) {
__lcd_goto(0xbf, 1);
__lcd_puts("triangulo");
}
if ((auxiliar == 4)) {
__lcd_goto(0xbf, 1);
__lcd_puts("quadrado");
}
if ((auxiliar == 5)) {
__lcd_goto(0xbf, 1);
__lcd_puts("pentagono");
}
if ((auxiliar == 6)) {
__lcd_goto(0xbf, 1);
__lcd_puts("circulo");
}
}
void circulo(void)
{
aux2 = (((2 * auxiliar2) * 3.1415) / 6.18);
m1 = (((2 * (auxiliar2 + 145)) * 3.1415) / 6.18);
m2 = (((2 * auxiliar2) * 3.1415) / 6.18);
relacao = (m1 / m2);
__SmartSensorCmd(1, 1, 9, 0);
__SmartSensorCmd(1, 2, 9, 0);
esquerda = __EncoderGetValue(1);
direita = __EncoderGetValue(2);
__motor(2, 1023);
while((direita < aux2)) {
while((direita < aux2)) {
esquerda = __EncoderGetValue(1);
direita = __EncoderGetValue(2);
if ((direita < (esquerda * relacao))) {
__motor(1, 850);
}
else {
__motor(1, 1023);
}
__delay(10);
}
esquerda = __EncoderGetValue(1);
direita = __EncoderGetValue(2);
__delay(10);
}
}
void frente_reto(void)
{
esquerda = __EncoderGetValue(1);
direita = __EncoderGetValue(2);
if ((esquerda == direita)) {
__motor_curso(__FORWARD);
}
if ((esquerda < direita)) {
__motor_curso(__RIGHT_TURN);
}
if ((esquerda > direita)) {
__motor_curso(__LEFT_TURN);
}
}
//Funcao Principal
void main(void)
{
__inicializa;
__SmartSensorCmd(1, 1, 8, 0);
interface();
if ((raio == 1)) {
auxiliar = 6;
display_2();
circulo();
pare();
raio = 0;
}
else {
aux2 = (auxiliar2 / 6.18);
auxiliar = n_curva;
display_2();
for (int __i1 = 0; __i1 < n_curva; ++__i1) {
__SmartSensorCmd(1, 1, 9, 0);
__SmartSensorCmd(1, 2, 9, 0);
while((__EncoderGetValue(2) < aux2)) {
while((__EncoderGetValue(2) < aux2)) {
frente_reto();
__delay(10);
}
}
curva = ((180 - angulo) / 2.62);
Pcurva();
__delay(10);
}
pare();
}
while(TRUE) { }
}