#define izq pin_c0 // naranja
#define medias pin_c1 // gris
#define acc pin_c2 // amarillo
#define der pin_c3 // blanco
#define stop pin_c4 // azul
// #define speed50 delay_ms(50)
//#define speed100 delay_ms(100)
// #define speed200 delay_ms(200)
// #define speed300 delay_ms(300)
// #define speed400 delay_ms(400)
// #byte valor=0
// typedef volatile char valor;
//secuencia 9
byte const s1d7[]={0b00000001,0b00000010,0b00000100,0b00001001,0b00010010,0b00100100,0b01001001,0b10010010
0b00100100,0b01001000,0b10010000,0b00100000,0b01000000,0b10000000,0b00000000};//0-14
// byte const s2d7[]={0,50,100,150,200,255};//0-14
// byte const s3d7[]={255,200,150,100,50,0};//0-14
// secuencia10
byte const s2d7[]={0,127,255};//0-14
byte const s3d7[]={255,127,0};//0-14
// byte const valor;
// *******************************************************************
// variables para pwm
signed int16 pwmh =0;
signed int16 pwml =0;
//*********************
int1 doble=0x01; // en 0 solo ascendente en 1 asciende y regresa
signed int8 i=0; // variable para las secuencias
signed int8 j=0; // variable para las secuencias
signed int8 k=0; // variable para las secuencias
signed int8 m=0; // variable para numero de salidas // para secuencia 9
signed int8 n=7; // numero de salidas
// int n=num; // numero de salidas que se van a utilizar
int8 mezcla =0; // alberga la info del puerto para luego pasarla a los puertos a y b
signed int16 s; // tiempo de retardo
signed int8 puerto =1; // 0 a y b / 1 a / 2 el b elige el puerto
//int puerto1 =1; // 0 a y b / 1 a / 2 el b elige el puerto
signed int16 f=0; // para secuencia10 pwm
int g=0; // para secuencia10 pwm
signed int intensidad=0;
signed int8 valor=0;
int1 flag=0;
int1 flag2=0;
signed int8 guardar;
// char rol=0;
// static int valor;
// declaracion funciones
void ret1 (); // retardo general secuencias
void secuencia1 ();
void secuencia2 ();
void secuencia3 ();
void secuencia4 ();
void secuencia5 ();
void secuencia6 ();
void secuencia7 ();
void secuencia8 ();
void secuencia9 ();
void secuencia10 ();
void secuencia11 ();
void salida (); // funcion para mostrar los efectos
void dimmer ();
void suiche();
//*******************
void freno();
void frenoflash();
#int_RDA
void RDA_isr(void)
{
//valor=0;
if(kbhit())//verifico si el dato ya esta disponible
{
//valor=0;
valor=getc();//adquiero el dato
flag=1;
puerto=0;
}
// valor=getc(); //Captura el dato recibido del PIC 1
// guardar=getc();
// flag=1;
//guardar =valor;
//putc(valor);
}
// EEPROM DISTRIBUCION //
/*
0 u pwmh
1 t pwml
2 v SECUENCIA DIRECCIONALES
3 w SECUENCIA ESTACIONARIAS
4 x SECUENCIA FRENO
5 y SECUENCIA MEDIAS
6 z SECUENCIA SALUDO
*/
// VOID MAIN //
void main()
{
SET_TRIS_a(0B00000000);
SET_TRIS_b(0B00000000);
SET_TRIS_c(0B10011111);
SET_TRIS_e(0B1);
setup_adc_ports(NO_ANALOGS);
setup_comparator(NC_NC_NC_NC);
portA=0x00;
portB=0x00;
//delay_ms(4000);
enable_interrupts(INT_RDA); //HAbilita interrupcion por puerto serial
enable_interrupts(GLOBAL); // Habilita las interrupcciones globales
s=80;
while(TRUE)
{
// configura # de salidas
//***********************
//num = sizeof(s4d7);
// porta=tama;
// num=num -1;
// num=8;
//****************************
// Reset_cpu();
// SALIDAS TRIS //
if (n>=7) // selecciono las salidas que necesito para que por error no se prendan los que no necesito
SET_TRIS_a(0B00000000);
if (n==6)
SET_TRIS_a(0B10000000);
if (n==5)
SET_TRIS_a(0B11000000);
if (n==4)
SET_TRIS_a(0B11100000);
if (n==3)
SET_TRIS_a(0B11110000);
if (n<=2)
SET_TRIS_a(0B11111000);
//*********************************
if (!input_state(acc))
{
ret1();
flag2=0;
}
if ((input_state(acc))&&(flag2==0))
{
flag2=1;
puerto=0;
secuencia3();
secuencia3();
}
// VALOR INTERUPCION /
if (flag==1)
{
//putc(valor);
//putc(guardar);
switch(valor)// aqui se pierde el contenido de valor
{
case 'a':
guardar=valor;
//puerto=0;
secuencia1();
break;
case 'b':
guardar=valor;
secuencia2();
break;
case 'c':
guardar=valor;
secuencia3();
break;
case 'd':
guardar=valor;
secuencia4();
break;
case 'e':
guardar=valor;
secuencia5();
break;
case 'f':
guardar=valor;
secuencia6();
break;
case 'g':
guardar=valor;
secuencia7();
break;
case 'h':
guardar=valor;
secuencia8();
break;
case 'i':
guardar=valor;
secuencia9();
break;
case 'j':
guardar=valor;
secuencia10();
break;
case 'k':
guardar=valor;
secuencia11();
break;
// EEPROM //
case 't': // pwmh
// write_eeprom(0,guardar);
case 'u': // pwml
// write_eeprom(1,guardar);
case 'v': //DIRECCIONALES
write_eeprom(2,guardar);
break;
case 'w': // ESTACIONARIAS
write_eeprom(3,guardar);
break;
case 'x': // FRENO
// write_eeprom(4,guardar);
break;
case 'y': // MEDIAS
// write_eeprom(5,guardar);
break;
case 'z': // SALUDO
//write_eeprom(6,guardar);
break;
// default:
}
//putc(guardar);
mezcla=0x00;// LIMPIO EL PUERTO LUEGO DE VISUALIZAR LA FUNCION QUE QUIERO
salida();
flag=0;
valor=0;
// guardar =valor;
}
/* if (input_state(der))
{
putc(guardar);
valor=read_eeprom(0);
flag=1;
}
*/
// DISRIMINA EL ESTADO STOP DIRECIONALES O MEDIAS //
//************************************************//
// puerto==0 solo las 2 direccionales1
// puerto==1 stop izquierdo y direccional derecha
// puerto==2 stop derecho y direccional izquierda
// puerto==3 solo direccional derecha
// puerto==4 solo direccional izquierda
if ((!input_state(stop))&&(!input_state(izq))&&(!input_state(der))&&(!input_state(medias)))// todo apagado
{
porta=0x00;
portb=0x00;
}
if ((input_state(stop))&&(!input_state(izq))&&(!input_state(der))&&(!input_state(medias)))// solo freno
{
puerto=0;
frenoflash();
}
if ((input_state(stop))&&(input_state(izq))&&(input_state(der))&&(!input_state(medias)))// ambas direccionales activas
{
puerto=0;
secuencia1();
}
if ((input_state(stop))&&(!input_state(izq))&&(input_state(der))&&(!input_state(medias)))//freno izquierdo activo - direccional derecha activa
{
puerto=1;
valor=read_eeprom(3);
flag=1;
}
if ((input_state(stop))&&(input_state(izq))&&(!input_state(der))&&(!input_state(medias))) // freno derecho activo - direccional izquierda activa
{
puerto =2;
//secuencia1();
}
if ((!input_state(stop))&&(input_state(izq))&&(input_state(der))&&(!input_state(medias))) //ambas direccionales estacionarias
{
puerto=0;
secuencia1();
}
if ((!input_state(stop))&&(!input_state(izq))&&(input_state(der))&&(!input_state(medias)))//solo direccional derecha activa
{
puerto=3;// solo direccional derecha
valor=read_eeprom(3);
flag=1;
}
if ((!input_state(stop))&&(input_state(izq))&&(!input_state(der))&&(!input_state(medias)))//solo direccional izquierda activa
{
puerto=4;
secuencia1();
}
if ((!input_state(stop))&&(!input_state(izq))&&(!input_state(der))&&(input_state(medias)))//solo medias
{
puerto=0;
secuencia10();// medias solo
}
if ((!input_state(stop))&&(input_state(izq))&&(input_state(der))&&(input_state(medias)))//solo direccionales estacionarias
{
puerto =0;
secuencia1();
}
if ((!input_state(stop))&&(!input_state(izq))&&(input_state(der))&&(input_state(medias))) //media izquierda activa dirrecional derecha activa
{
puerto=1;
secuencia1();
}
if ((!input_state(stop))&&(input_state(izq))&&(!input_state(der))&&(input_state(medias)))// media derecha activa direccional izquierda aciva
{
puerto=2;
secuencia1();
}
if ((input_state(stop))&&(input_state(izq))&&(input_state(der))&&(input_state(medias)))// todo activado da solo direccionals
{
puerto =0;
secuencia1();
}
if ((input_state(stop))&&(!input_state(izq))&&(!input_state(der))&&(input_state(medias)))// todo activado da solo direccionals
{
frenoflash();
}
}
}