Last active
August 29, 2015 14:00
-
-
Save chukitow/11387845 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /************************************************/ | |
| /*PIN_B0 FOCO 1 */ | |
| /*PIN_B1 FOCO 2 */ | |
| /*PIN_B2 SENSADO FOCO 1 */ | |
| /*PIN_B3 SENSADO FOCO 2 */ | |
| /*PIN_B4 VENTANA 1 */ | |
| /*PIN_B5 VENTANA 2 */ | |
| /*PIN_B6 PUERTA 1 */ | |
| /*PIN_B6 PUERTA 2 */ | |
| /************************************************/ | |
| #include <18f4520.h> | |
| #fuses XT, PUT, NODEBUG , NOBROWNOUT , NOPROTECT , NOLVP | |
| #use delay(clock=4000000) | |
| #use rs232(baud=9600, bits = 8 , parity = N ,xmit=PIN_C6,rcv=PIN_C7) | |
| #use fast_io(B) | |
| char trama[50]; //Contenedor de la trama | |
| int index=0; //Indice del buffer; | |
| char buffer; //auxiliar para almacenar el caracter tecleado | |
| boolean cambioDeEstado = false; //Auxuliar para detectar cambios de estado | |
| int estados; //Es la enmascaracion que recopila los estados de las ventanas y puertas | |
| boolean foco1 = false; //Estado del Foco 1 | |
| boolean foco2 = false; //Estado del Foco 2 | |
| boolean ventana1 = false; //Estado de la Ventana 1 | |
| boolean ventana2 = false; //Estado de la Ventana 2 | |
| boolean puerta1 = false; //Estado de la puerta 1 | |
| boolean puerta2 = false; //Estado de la puerta 2; | |
| void init(); //Funcion que se ejecuta al iniciar el programa que analiza el estado en el que se encuentran los componentes | |
| void analizarTrama(); //Analiza la trama hasta encontrar los caracteres de inicio y cierre | |
| void analyzeTokens(); //Analiza el contenido de la trama "PROTOCOLO" | |
| void limpiarTrama(); //Vacia la trama | |
| void analizarEstados(); | |
| boolean estadoFoco1(); | |
| boolean estadoFoco2(); | |
| boolean estadoVentana1(); | |
| boolean estadoVentana2(); | |
| boolean estadoPuerta1(); | |
| boolean estadoPuerta2(); | |
| /***********INTERRUPCIONES***************/ | |
| //Leer datos del serial | |
| #INT_RDA | |
| void ra_isr(void) | |
| { | |
| //Hay datos pendientes ?? | |
| if(kbhit()) | |
| { | |
| //Si es el backspace borramos la trama | |
| int asciiKEY; | |
| buffer= getc(); | |
| asciiKEY = buffer; | |
| if(asciiKEY == 8) | |
| { | |
| if(index>0) | |
| { | |
| trama[index] = ' '; | |
| index--; | |
| } | |
| } | |
| else | |
| { | |
| if(index>50)index=0; | |
| trama[index] = buffer; | |
| index++; | |
| } | |
| } | |
| } | |
| //Analizar cambios de estados | |
| #INT_RB | |
| void rb_isr(void) | |
| { | |
| /*VENTANA 1*/ | |
| if(input(PIN_B4)) | |
| { | |
| if(ventana1==false) | |
| { | |
| ventana1=true; | |
| printf("Se cerro V1"); | |
| } | |
| } | |
| else | |
| { | |
| if(ventana1==true) | |
| { | |
| ventana1= false; | |
| printf("Se abrio V1"); | |
| } | |
| } | |
| /*VENTANA 2*/ | |
| if(input(PIN_B5)) | |
| { | |
| if(ventana2==false) | |
| { | |
| ventana2=true; | |
| printf("Se cerro V2"); | |
| } | |
| } | |
| else | |
| { | |
| if(ventana2==true) | |
| { | |
| ventana2= false; | |
| printf("Se abrio V2"); | |
| } | |
| } | |
| /*PUERTA 1*/ | |
| if(input(PIN_B6)) | |
| { | |
| if(puerta1==false) | |
| { | |
| puerta1=true; | |
| printf("Se cerro P1"); | |
| } | |
| } | |
| else | |
| { | |
| if(puerta1==true) | |
| { | |
| puerta1= false; | |
| printf("Se abrio P1"); | |
| } | |
| } | |
| /*PUERTA 2*/ | |
| if(input(PIN_B7)) | |
| { | |
| if(puerta2==false) | |
| { | |
| puerta2=true; | |
| printf("Se cerro P2"); | |
| } | |
| } | |
| else | |
| { | |
| if(puerta2==true) | |
| { | |
| puerta2= false; | |
| printf("Se cerro P1"); | |
| } | |
| } | |
| } | |
| void main(void) | |
| { | |
| set_tris_b(252); | |
| enable_interrupts(INT_RDA); | |
| enable_interrupts(INT_RB); | |
| enable_interrupts(GLOBAL); | |
| init(); | |
| printf("************************************\r"); | |
| printf(" SISTEMA DOMOTICO UDC 1.0V \r"); | |
| printf("************************************\r"); | |
| while(true) | |
| { | |
| analizarTrama(); | |
| } | |
| } | |
| void init() | |
| { | |
| /*FOCO 1*/ | |
| if(input(PIN_B2)) | |
| { | |
| foco1 = true; | |
| } | |
| /*FOCO 2*/ | |
| if(input(PIN_B3)) | |
| { | |
| foco2 = true; | |
| } | |
| /*Ventana 1*/ | |
| if(input(PIN_B4)) | |
| { | |
| ventana1 = true; | |
| } | |
| /*VENTANA 2*/ | |
| if(input(PIN_B5)) | |
| { | |
| ventana2 = true; | |
| } | |
| /*PUERTA 1*/ | |
| if(input(PIN_B6)) | |
| { | |
| puerta1 = true; | |
| } | |
| /*PUERTA 2*/ | |
| if(input(PIN_B7)) | |
| { | |
| puerta2 = true; | |
| } | |
| } | |
| void analizarTrama() | |
| { | |
| /* Analizamos si la trama esta completa */ | |
| int i; | |
| //Analizar si esta completa | |
| boolean inicioTrama = false; | |
| boolean finalTrama = false; | |
| for( i=0; i<=index;i++) | |
| { | |
| if(trama[i] == '<') | |
| { | |
| inicioTrama = true; | |
| } | |
| else if(trama[i] == '>') | |
| { | |
| finalTrama = true; | |
| } | |
| } | |
| /*LA TRAMA ESTA COMPLETA*/ | |
| if(inicioTrama == true && finalTrama == true) | |
| { | |
| analyzeTokens(); | |
| limpiarTrama(); | |
| } | |
| } | |
| void analyzeTokens() | |
| { | |
| switch(trama[1]) | |
| { | |
| /*PRENDER FOCOS*/ | |
| case 'A': | |
| /*FOCO 1*/ | |
| if(trama[2]=='1') | |
| { | |
| output_high(PIN_B0); | |
| if(estadoFoco1()) | |
| { | |
| printf("Se apago F1"); | |
| foco1=true; | |
| } | |
| else | |
| { | |
| //printf("MENSAJE DE ERROR : ERROR AL ENCENDER EL FOCO 1 \r"); | |
| } | |
| } | |
| /*FOCO 2*/ | |
| else if(trama[2]=='2') | |
| { | |
| output_high(PIN_B1); | |
| if(estadoFoco2()) | |
| { | |
| printf("Se apago F2"); | |
| foco2=true; | |
| } | |
| else | |
| { | |
| //printf("MENSAJE DE ERROR: ERROR AL ENCENDER EL FOCO 2 \r"); | |
| } | |
| } | |
| else | |
| { | |
| printf("MENSAJE DE ERROR: NO SE DETECTO FOCO CUAL ENCENDER \r"); | |
| } | |
| break; | |
| /*APAGAR FOCOS*/ | |
| case 'P': | |
| /*FOCO 1*/ | |
| if(trama[2]=='1') | |
| { | |
| output_low(PIN_B0); | |
| if(estadoFoco1() == false) | |
| { | |
| printf("Se prendio F1"); | |
| foco1=false; | |
| } | |
| else | |
| { | |
| //printf("MENSAJE DE ERROR: ERROR AL APAGAR FOCO 1\r"); | |
| } | |
| } | |
| /*FOCO 2*/ | |
| else if(trama[2]=='2') | |
| { | |
| output_low(PIN_B1); | |
| if(estadoFoco2() == false) | |
| { | |
| printf("Se prendio F1"); | |
| foco2=false; | |
| } | |
| else | |
| { | |
| //printf("MENSAJE DE ERROR: ERROR AL APAGAR FOCO 2\r"); | |
| } | |
| } | |
| else | |
| { | |
| //printf("MENSAJE DE ERROR: NO SE DETECTO EL FOCO EL CUAL APAGAR\r"); | |
| } | |
| break; | |
| case 'C': | |
| if(trama[2]=='F') | |
| { | |
| if(trama[3]=='1') | |
| { | |
| if(foco1) | |
| { | |
| printf("Esta prendido F1"); | |
| } | |
| else | |
| { | |
| printf("Esta apagado F1"); | |
| } | |
| } | |
| else if(trama[3]=='2') | |
| { | |
| if(foco2) | |
| { | |
| printf("Esta prendido F2"); | |
| } | |
| else | |
| { | |
| printf("Esta apagado F1"); | |
| } | |
| } | |
| else | |
| { | |
| //printf("MENSAJE DE ERROR: NO SE DETECTO EL FOCO EL CUAL APAGAR\r"); | |
| } | |
| } | |
| else if(trama[2]=='V') | |
| { | |
| if(trama[3]=='1') | |
| { | |
| if(ventana1) | |
| { | |
| printf("Esta cerrada V1"); | |
| } | |
| else | |
| { | |
| printf("Esta abierta V1"); | |
| } | |
| } | |
| else if(trama[3]=='2') | |
| { | |
| if(ventana2) | |
| { | |
| printf("Esta cerrada V2"); | |
| } | |
| else | |
| { | |
| printf("Esta abierta V2"); | |
| } | |
| } | |
| else | |
| { | |
| //printf("MENSAJE DE ERROR: NO SE DETECTO EL FOCO EL CUAL APAGAR\r"); | |
| } | |
| } | |
| else if(trama[2]=='P') | |
| { | |
| if(trama[3]=='1') | |
| { | |
| if(puerta1) | |
| { | |
| printf("Esta abierta P1"); | |
| } | |
| else | |
| { | |
| printf("Esta abierta P1"); | |
| } | |
| } | |
| else if(trama[3]=='2') | |
| { | |
| if(puerta2) | |
| { | |
| printf("Esta cerrada P2"); | |
| } | |
| else | |
| { | |
| printf("Esta abierta P2"); | |
| } | |
| } | |
| else | |
| { | |
| //printf("MENSAJE DE ERROR: NO SE DETECTO EL FOCO EL CUAL APAGAR\r"); | |
| } | |
| } | |
| else | |
| { | |
| //printf("MENSAJE DE ERROR: NO SE DETECTO EL FOCO EL CUAL APAGAR\r"); | |
| } | |
| break; | |
| } | |
| } | |
| void limpiarTrama() | |
| { | |
| int i; | |
| for(i=0; i<=index; i++) | |
| { | |
| trama[i] = ' '; | |
| } | |
| index=0; | |
| } | |
| boolean estadoFoco1() | |
| { | |
| boolean bandera = false; | |
| if(input(PIN_B2)) | |
| { | |
| bandera = true; | |
| } | |
| return bandera; | |
| } | |
| boolean estadoFoco2() | |
| { | |
| boolean bandera = false; | |
| if(input(PIN_B3)) | |
| { | |
| bandera = true; | |
| } | |
| return bandera; | |
| } | |
| boolean estadoVentana1() | |
| { | |
| boolean bandera = false; | |
| if(input(PIN_B4)) | |
| { | |
| bandera = true; | |
| } | |
| return bandera; | |
| } | |
| boolean estadoVentana2() | |
| { | |
| boolean bandera = false; | |
| if(input(PIN_B5)) | |
| { | |
| bandera = true; | |
| } | |
| return bandera; | |
| } | |
| boolean estadoPuerta1() | |
| { | |
| boolean bandera = false; | |
| if(input(PIN_B6)) | |
| { | |
| bandera = true; | |
| } | |
| return bandera; | |
| } | |
| boolean estadoPuerta2() | |
| { | |
| boolean bandera = false; | |
| if(input(PIN_B7)) | |
| { | |
| bandera = true; | |
| } | |
| return bandera; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment