#include <18f4550.h>
#device ADC=10 // sensor
#fuses intxt, nomclr, nobrownout, nolvp, Nowdt, nodebug
#use delay(clock=8000000)
#use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7)
#include <stdio.h>
#byte portA=0xf80
#bit rb1=0xf81.1
#bit rb2=0xf81.2
#bit rb3=0xf81.3
#define eco pin_a0
#define disparo pin_a1



void instrucciones (void);
void delta (void);
void parar (void);
void estrella (void);
void mensaje (void);
void encendido (void);
void frenado (void);
float distancia(void);

int marcha=0;
int sentido=0;


void main (void)
{

char teclado;
char estado;

setup_oscillator(osc_8Mhz);
setup_timer_1(t1_internal|t1_div_by_1);//registro o timer 1 interno o el timer 1 dividio por 1
set_tris_a(0x01);//entrada
porta=00;
set_tris_b(0b11110001);
instrucciones();


while(true)
 {

   float distancia;
   long valor_medido; 
   output_high(disparo);
   delay_us(20);
   output_low(disparo);
   while (!input(eco))
   set_timer1(0);//lee en el timer canal 1 del timer1
    while (input(eco))
    valor_medido=get_timer1();
    delay_us(20);
    distancia=(valor_medido/58);

    
   if (distancia <= 14.0)
      {
      frenado();
      }
   else { 

teclado=getc();   
switch (teclado){

while (true) {
case 'p':
sentido='p';
parar ();
delay_ms(500);
puts(" control de motor");
puts(" (p) Parar el motor");
output_low (pin_b5);output_low (pin_b4);
delay_us(500);delay_us(500);
break;

case 'i':
encendido ();
sentido='i';
estrella ();
puts(" control de motor");
puts (" Motor en estrella");
output_high (pin_b5);
delay_ms(500);
delay_ms(2500);

delta();
sentido = 'd';
puts(" control de motor");
puts(" Motor al maximo de sus funciones");
break;

default:
mensaje();
break;
}
}
}
 }    
}



void instrucciones(void)
{
puts (" Electronics Company");
puts (" Pulse 'i' para encender la marcha");
puts (" pulse 'p' para detener el motor");
puts (" El motor encendido entrara en DELTA dentro de 7 seg");
}

void delta (void)
{
if ((marcha ==1)&&(sentido=='d'))
{

rb1=0;
delay_ms(200);
rb2=1;
marcha=1;
}
else
{
rb1=0;
delay_ms(200);
rb2=1;
marcha=1;
}
}

void parar (void)
{
if ((marcha==1)&&(sentido=='p'))
{
rb1=0;
rb2=0;
rb3=0;
marcha=0;
}
else
{
rb1=0;
rb2=0;
rb3=0;
marcha=0;
}
}
void estrella (void)
{
if ((marcha==1)&&(sentido=='i'))
{
rb1=1;
rb2=0;
marcha=1;
}
else
{
rb1=1;
rb2=0;
marcha=1;
}
}

void encendido (void)
{
if ((marcha==1)&&(sentido=='e'))
{
rb3=1;
marcha=1;
}
else
{
rb3=1;
marcha=1;
}
}

void mensaje (void)
{
puts ("tecla incorrecta");
}




void frenado (void)
{
rb1=0;
rb2=0;
rb3=0;
output_low (pin_b5);
}


