![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Buenas practicas
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 #include <iostream> 00003 00004 #define MAX_CLIENTES 10 00005 00006 /*------------------------------------- 00007 VARIABLES 00008 -------------------------------------*/ 00009 00010 InterruptIn botton_entrada(PTD4); 00011 DigitalIn botton_salida(); 00012 DigitalOut doPuerta(LED_BLUE); 00013 DigitalOut interrupcionLED(LED_RED); 00014 char Nombre_cliente; 00015 bool reconocercliente; 00016 bool imprimircliente; 00017 int gclienteadentro = 0; 00018 Timer TimerInterrupcion; 00019 00020 /*------------------------------------- 00021 VARIABLES GLOBALES 00022 -------------------------------------*/ 00023 00024 DigitalOut Puertas(LED_BLUE); // Led Azul representa puertas. Encendido = Puertas cerradas. Apagado = Puertas abiertas. Comienza encendido. 00025 bool gbReconocerCliente = false; 00026 bool gbImprimirClientes = false; 00027 int giClientesAdentro = 0; 00028 Timer gtCerrarPuertas; 00029 Timer gtPrintDebounce; 00030 00031 00032 /* --------------------------------------- 00033 PROTOTIPOS DE FUNCIONES 00034 ---------------------------------------*/ 00035 00036 void fInterrupcion(); 00037 /*Función de Interrupción. 00038 Solicita que se abran las puertas y se 00039 reconozca al cliente. 00040 Regresa: 00041 TRUE si se abrieron las puertas, 00042 FALSE en caso contrario.*/ 00043 00044 void xfAbrirPuertas(); 00045 /*Función de Interrupción. 00046 Solicita que se imprima una lista 00047 de clientes dentro de la tienda.*/ 00048 00049 void fReconocerCliente(string * _strpClienteActual); 00050 //Solicita que se cierren las puertas y se salude al cliente. 00051 00052 00053 void xfImprimirClientes(); 00054 /* Realiza reconocimiento de usuario. 00055 Para esta simulación se solicita el nombre 00056 por comunicación serial. 00057 Argumento: 00058 _strpClienteActual - Guarda aquí el nombre.*/ 00059 00060 void fCerrarPuertas(); 00061 //Imprime una lista de clientes. 00062 00063 void fImprimirClientes(const string * straCliente, int iNumClientes); 00064 00065 // Alumnos: Solo usen esto si ya comprendieron el concepto de namespace. 00066 using namespace std; 00067 00068 00069 /* --------------------------------------- 00070 MAIN 00071 ---------------------------------------*/ 00072 00073 int main() 00074 { 00075 InterruptIn xiClientePorEntrar(PTA13); 00076 InterruptIn xiImprimirClientes(PTD5); 00077 00078 //Un arreglo es un apuntador con un espacio delimitado: 00079 string straCliente[MAX_CLIENTES]; 00080 00081 int iClienteActual = 0; 00082 00083 Puertas = 0; 00084 00085 //Le decimos a InterruptIn qué funciones llamar: 00086 xiClientePorEntrar.rise(&xfAbrirPuertas); 00087 xiImprimirClientes.rise(&xfImprimirClientes); 00088 00089 while(1) { 00090 //Atender posible solicitud de reconocer a cliente: 00091 if(gbReconocerCliente) { 00092 fReconocerCliente(&straCliente[iClienteActual]); 00093 iClienteActual++; 00094 gbReconocerCliente = false; 00095 } 00096 00097 //Cerramos las puertas si ya pasaron 5 segundos: 00098 if(gtCerrarPuertas.read() > 5.0f) { 00099 fCerrarPuertas(); 00100 gtCerrarPuertas.stop(); 00101 gtCerrarPuertas.reset(); 00102 } 00103 00104 // Atender posible solicitud de imprimir clientes: 00105 // En un OS o RTOS esto tendría proridada baja: 00106 if(gbImprimirClientes) { 00107 gtPrintDebounce.start(); 00108 fImprimirClientes(straCliente, giClientesAdentro); 00109 gbImprimirClientes = false; 00110 } 00111 00112 00113 // Permitimos volver a imprimir la lista: 00114 if(gtPrintDebounce.read() > 2.0f) { 00115 gtPrintDebounce.stop(); 00116 gtPrintDebounce.reset(); 00117 } 00118 } 00119 00120 return 0; 00121 } 00122 00123 /*-------------------------------- 00124 Funciones 00125 --------------------------------*/ 00126 00127 void fInterrupcion(){ 00128 int x; 00129 interrupcionLED =! interrupcionLED; 00130 TimerInterrupcion.start(); 00131 x = TimerInterrupcion.read_ms(); 00132 if(x == 1000) 00133 interrupcionLED =!interrupcionLED; 00134 } 00135 00136 void xfAbrirPuertas(){ 00137 00138 botton_entrada.rise(fInterrupcion); 00139 if(giClientesAdentro < MAX_CLIENTES && Puertas == 0) { 00140 Puertas = 1; 00141 gbReconocerCliente = true; 00142 gtCerrarPuertas.start(); 00143 giClientesAdentro++; 00144 } 00145 } 00146 00147 void fReconocerCliente(string *_strpClienteActual){ 00148 00149 printf("Nombre: "); 00150 scanf("%s", _strpClienteActual); 00151 printf("\nHasta pronto %s!\n", _strpClienteActual); 00152 fCerrarPuertas(); 00153 } 00154 00155 void xfImprimirClientes(){ 00156 00157 fReconocerCliente(string *_strpClienteActual); 00158 if(gtPrintDebounce.read() == 0.0f) { 00159 gbImprimirClientes = true; 00160 } 00161 } 00162 00163 void fCerrarPuertas(){ 00164 00165 fImprimirClientes(const string * straCliente, int iNumClientes); 00166 Puertas = 0; 00167 } 00168 00169 void fImprimirClientes(const string * straCliente, int iNumClientes){ 00170 00171 int i = 0; 00172 printf("Clientes dentro de la tienda: %d\n", iNumClientes); 00173 for(i = 0; i < iNumClientes; i++) { 00174 printf("%s ", *straCliente[i]); 00175 } 00176 }
Generated on Fri Jul 22 2022 02:26:57 by
![doxygen](doxygen.png)