Buenas practicas

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
AndreaC
Date:
Fri Oct 17 10:37:43 2014 +0000
Commit message:
Laboratorio_4

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Oct 17 10:37:43 2014 +0000
@@ -0,0 +1,176 @@
+#include "mbed.h"
+#include <iostream>
+
+#define MAX_CLIENTES 10
+
+/*-------------------------------------
+    VARIABLES
+  -------------------------------------*/
+  
+InterruptIn botton_entrada(PTD4);
+DigitalIn botton_salida();
+DigitalOut doPuerta(LED_BLUE);
+DigitalOut interrupcionLED(LED_RED);
+char Nombre_cliente;
+bool reconocercliente;
+bool imprimircliente;
+int gclienteadentro = 0;
+Timer TimerInterrupcion;
+
+/*-------------------------------------
+    VARIABLES GLOBALES
+  -------------------------------------*/
+  
+DigitalOut Puertas(LED_BLUE);       // Led Azul representa puertas. Encendido = Puertas cerradas. Apagado = Puertas abiertas. Comienza encendido.
+bool gbReconocerCliente = false;
+bool gbImprimirClientes = false;
+int giClientesAdentro = 0;
+Timer gtCerrarPuertas;
+Timer gtPrintDebounce;
+ 
+
+/* ---------------------------------------
+   PROTOTIPOS DE FUNCIONES
+   ---------------------------------------*/
+
+void fInterrupcion();
+/*Función de Interrupción.
+Solicita que se abran las puertas y se
+reconozca al cliente.
+Regresa:
+    TRUE si se abrieron las puertas,
+    FALSE en caso contrario.*/
+
+void xfAbrirPuertas();
+/*Función de Interrupción.
+Solicita que se imprima una lista
+de clientes dentro de la tienda.*/
+
+void fReconocerCliente(string * _strpClienteActual);
+//Solicita que se cierren las puertas y se salude al cliente.
+
+
+void xfImprimirClientes();
+/* Realiza reconocimiento de usuario.
+Para esta simulación se solicita el nombre
+por comunicación serial.
+Argumento:
+  _strpClienteActual - Guarda aquí el nombre.*/
+
+void fCerrarPuertas();
+//Imprime una lista de clientes.
+
+void fImprimirClientes(const string * straCliente, int iNumClientes);
+
+// Alumnos: Solo usen esto si ya comprendieron el concepto de namespace.
+using namespace std;
+ 
+
+/* ---------------------------------------
+    MAIN
+   ---------------------------------------*/
+
+int main()
+{
+    InterruptIn xiClientePorEntrar(PTA13);
+    InterruptIn xiImprimirClientes(PTD5);
+ 
+    //Un arreglo es un apuntador con un espacio delimitado:
+    string straCliente[MAX_CLIENTES];
+ 
+    int iClienteActual = 0;
+ 
+    Puertas = 0;
+ 
+    //Le decimos a InterruptIn qué funciones llamar:
+    xiClientePorEntrar.rise(&xfAbrirPuertas);
+    xiImprimirClientes.rise(&xfImprimirClientes);
+ 
+    while(1) {
+        //Atender posible solicitud de reconocer a cliente:
+        if(gbReconocerCliente) {
+            fReconocerCliente(&straCliente[iClienteActual]);
+            iClienteActual++;
+            gbReconocerCliente = false;
+        }
+ 
+        //Cerramos las puertas si ya pasaron 5 segundos:
+        if(gtCerrarPuertas.read() > 5.0f) {
+            fCerrarPuertas();
+            gtCerrarPuertas.stop();
+            gtCerrarPuertas.reset();
+        }
+ 
+        // Atender posible solicitud de imprimir clientes:
+        // En un OS o RTOS esto tendría proridada baja:
+        if(gbImprimirClientes) {
+            gtPrintDebounce.start();
+            fImprimirClientes(straCliente, giClientesAdentro);
+            gbImprimirClientes = false;
+        }
+ 
+ 
+        // Permitimos volver a imprimir la lista:
+        if(gtPrintDebounce.read() > 2.0f) {
+            gtPrintDebounce.stop();
+            gtPrintDebounce.reset();
+        }
+    }
+ 
+    return 0;
+}
+
+/*--------------------------------
+    Funciones
+  --------------------------------*/
+
+void fInterrupcion(){
+    int x;
+    interrupcionLED =! interrupcionLED;
+    TimerInterrupcion.start();
+    x = TimerInterrupcion.read_ms();
+    if(x == 1000) 
+        interrupcionLED =!interrupcionLED;
+}
+
+void xfAbrirPuertas(){
+
+    botton_entrada.rise(fInterrupcion);
+    if(giClientesAdentro < MAX_CLIENTES && Puertas == 0) {
+        Puertas = 1;
+        gbReconocerCliente = true;
+        gtCerrarPuertas.start();
+        giClientesAdentro++;
+    }
+}
+
+void fReconocerCliente(string *_strpClienteActual){
+    
+    printf("Nombre: ");
+    scanf("%s", _strpClienteActual);
+    printf("\nHasta pronto %s!\n", _strpClienteActual);
+    fCerrarPuertas();
+}
+
+void xfImprimirClientes(){
+ 
+    fReconocerCliente(string *_strpClienteActual);
+    if(gtPrintDebounce.read() == 0.0f) {
+        gbImprimirClientes = true;
+    }
+}
+
+void fCerrarPuertas(){
+    
+    fImprimirClientes(const string * straCliente, int iNumClientes);
+    Puertas = 0;
+}
+
+void fImprimirClientes(const string * straCliente, int iNumClientes){
+    
+    int i = 0;
+    printf("Clientes dentro de la tienda: %d\n", iNumClientes);
+    for(i = 0; i < iNumClientes; i++) {
+        printf("%s ", *straCliente[i]);
+    }
+} 
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Oct 17 10:37:43 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/552587b429a1
\ No newline at end of file