Julio Daniel Luna Villanueva / Mbed 2 deprecated FRDM_KL46Z_ProyEnsam

Dependencies:   mbed

Revision:
0:9f1d9b302ed4
Child:
1:dfa13453f7d2
Child:
2:ca7dc66b33ed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri May 31 00:20:46 2019 +0000
@@ -0,0 +1,350 @@
+/* ###########################################################################
+**    Archivo        : main.c
+**    Proyecto       : FRDM-KL46Z_Proyecto Ensamblado Baño Automático
+**    Procesador     : MKL46Z256VLL4
+**    Herramienta    : Mbed
+**    Version        : Driver 01.01
+**    Compilador     : GNU C Compiler
+**    Fecha/Hora     : 14-07-2015, 11:48, # CodeGen: 0
+**    Descripción    :
+**   Componentes     : GPIO, Timer, etc .
+**   Configuraciones : Includes, Stacks y Drivers externos
+**   Autores         :
+**         ATEAM Development Group:
+                Camacho Camacho Fermín Rodrigo
+                Luna Villanueva Julio Daniel
+                Sánchez Zarazua Edgar Omar
+**          - 
+**
+**   Versión        : Beta
+**   Revisión       : A
+**   Release        : 0
+**   Bugs & Fixes   :
+**   Date           : 20/10/2019
+**                    Added support for Led_RGB
+**                    22/09/2018 
+**                    Added LCD Menu, Beta version (with bugs)
+**
+** ###########################################################################*/
+/*
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+:  Includes
+::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+*/
+#include "mbed.h"
+
+/*
+:...............................................................................
+:  Definiciones
+:...............................................................................
+*/
+#define   On                    0
+#define   off                   1 
+#define   TRUE                  1
+#define   FALSE                 0 
+#define     hold            2           // Estado para boton mantenido
+#define     release         3           // Estado para boton liberado
+#define     TRUE            1
+#define     FALSE           0
+#define     Ticker_Time     1000        // Tiempo del Ticker (us)
+#define     Rate_Time       2           // Tiempo de Encendido de los Digitos (ms)
+#define     Scan_Time       2           // Tiempo de Barrido del Display (ms)
+#define     Shift_Time      2           // Tiempo de corrimiento  (x Counter_Time)
+#define     Counter_Time    100         // Tiempo de counter (ms)
+#define     Size_String     20          // Tamaño del Buffer de Caracteres
+#define     Digit_Null      0xFF        // Valor para apagar los Segmentos 
+#define     Degree_Symbol   0x0F        // Valor para el Símbolo de Grados
+/*
++-------------------------------------------------------------------------------
+|  Configuración de Puertos 
++-------------------------------------------------------------------------------
+*/
+Ticker     Barrido;                     // Interrupción del Timer
+BusOut     Anodos(PTA14, PTA15, PTA16, PTA17); // Salidas a los anodos del display: A4 A3 A2 A1
+BusOut     Catodos(PTE16, PTE17, PTE18, PTE19, PTE20, PTE21, PTE22, PTE23); // Salidas a los catodos: g f a b c d e p
+DigitalOut Green_Led (PTD5);            // Led de Actividad del Programa
+DigitalOut Red_Led   (PTE29);           // Led de Actividad del Programa
+
+DigitalIn Selector_seguro(PTD3);
+DigitalIn Limit_switch(PTB20);
+DigitalOut Ventilador(PTD4);  //Relé
+DigitalOut Luz(PTD7);       //Relé
+DigitalOut Seguro(PTD6); //Relé
+DigitalOut Red(PTE6);
+DigitalOut Green(PTE3);
+DigitalOut Blue(PTE2);
+DigitalOut Buzzer(PTE31);
+
+/*
++-------------------------------------------------------------------------------
+|  Variables Globales de Usuario 
++-------------------------------------------------------------------------------
+*/
+uint16_t Rate=325; // 1000us=1ms
+uint8_t cont_1ms=0;
+uint8_t cont_10ms=0;
+uint8_t cont_100ms=0;
+uint8_t cont_1s=0;
+bool Flag1=FALSE;
+bool Flag2=FALSE;   
+uint8_t u=0;                 
+  
+                    //Para el DISPLAY de 7 segmentos:
+/*Para CATODO COMUN:
+//            0    1    2    3    4    5    6    7    8    9    A    b    C    d    E    f    G    h    I    j    K    L    M    n    o    p    q    r    S    t    u    v    w    X    y    z
+//uint8_t Segmentos[]={0x7F,0x18,0xB6,0xBC,0xD8,0xEC,0xEE,0x38,0xFE,0xFC,0xFA,0xCE,0x66,0x9E,0xE6,0xE2,0x6E,0xCA,0x42,0x1C,0xD2,0x46,0x7A,0x8A,0x8E,0xF2,0xF8,0xC2,0xEC,0xC6,0x0E,0x1E,0x5E,0xDA,0xC8,0xB6};
+//      Millares,Centenas,Decenas,Unidades
+//uint8_t Digitos[]={0x0E, 0x0D, 0x0B, 0x07};
+// Para descomponer el valor en multiplos
+//Multiplos[]={Millares,Centenas,Decenas,Unidades}
+Utilizar C.I. 74LS126 como Latch para c/u de los segmentos del Display*/
+
+
+//Para ANODO COMUN:
+//                    0    1    2    3    4    5    6    7    8    9    10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30  31   32   33   34    35  36    37   
+//                    0    1    2    3    4    5    6    7    8    9    A    b    C    d    E    f    G    h    I    j    K    L    M    n    o    p    q    r    S    t    u    v    w    X    y    z  space  -
+uint8_t Segmentos[]={0x81,0xE7,0x49,0x43,0x27,0x13,0x11,0xC7,0x01,0x03,0x05,0x31,0x99,0x61,0x19,0x1D,0x91,0x35,0xBD,0xB3,0x2D,0xB9,0x85,0x75,0x71,0x0D,0x07,0x3D,0x13,0x39,0xF1,0xE1,0xA1,0x25,0x37,0x49,0xFF,0x7F};
+//      Millares,Centenas,Decenas,Unidades
+uint8_t Digitos[]={0x01, 0x02, 0x04, 0x08, 0x00, 0xFF};
+// Para descomponer el valor en multiplos
+//Multiplos[]={Millares,Centenas,Decenas,Unidades}
+//Utilizar C.I. 74LS125 como Latch para c/u de los segmentos del Display           
+uint8_t Mensaje1[]={36,36,24,12,30,25,10,13,24,36,36,36}; // MENSAJE Ocupado
+uint8_t Mensaje2[]={36,36,13,18,28,25,24,23,18,11,21,14.36,36}; // MENSAJE Disponible
+uint8_t Mensaje3[]={36,36,11,18,14,23,31,14,23,18,13,24,36,36}; // MENSAJE Bienvenido
+uint8_t  Numeros[]={11,10,23,24,36,36,36,36}; //MENSAJE INICIAL Bano
+uint8_t  Cadena[]={11,18,14,23,31,14,23,18,13,24,36,36}; //BUFFER Bienvenidos
+uint8_t  scan_rate = Scan_Time ;
+uint8_t  shift_rate= Shift_Time;
+uint16_t counter=1250;
+uint8_t  i=0;
+uint8_t  nchar=0;
+bool     flag1=FALSE;
+bool     flag2=FALSE;
+bool     mode=0;
+uint8_t  punto_decimal=0;   //Posición del Punto Decimal: 0=sin punto, 1=unidades, 2=decenas, 3=centemas 4=millares, 
+uint8_t control=0;
+/*
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+|  Definición de los Vectores de Interrupción
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+*/
+void Barrido_OnInterrupt(void); 
+/*
+________________________________________________________________________________
+|
+|  Funciones Prototipo
+|_______________________________________________________________________________
+*/
+                // Las Funciones Prototipo van aquí !
+bool BanoDisponible(void);
+bool BanoOcupado(void);
+bool PuertaAbierta(void);
+void Display(void);
+void Mensaje(void);
+/*
+#===============================================================================
+|
+|               P R O G R A M A     P R I N C I P A L
+|
+#=============================================================================== 
+*/
+
+//////////////////////////////  PROGRAMA PRINCIPAL  //////////////////////////////////////////
+int main()
+{ 
+    Buzzer=1;
+    wait(0.020);
+    Buzzer=0;
+    Red=0;
+    Blue=1;
+    Green=0;
+    wait(0.5);
+  Barrido.attach_us(&Barrido_OnInterrupt, Rate);   // Le asigna el periodo de barrido cada 10 ms
+  while(true)
+  { 
+    if(Limit_switch==1 && Selector_seguro==0)
+    { //Puerta Cerrada (BAÑO DISPONIBLE)
+        Seguro=0;           //Seguro desactivado
+        BanoDisponible();
+    }
+    if(Limit_switch==1 && Selector_seguro==1)
+    { //Puerta Cerrada (BAÑO OCUPADO)
+        Seguro=1;           //Seguro activado
+        BanoOcupado();
+    }
+    if(Limit_switch==0 && Selector_seguro==0)
+    {  //Puerta Abierta
+      Seguro=0; //Desactivado
+      PuertaAbierta();
+    }
+// LLama al Barrido del Display
+if (flag1==TRUE)
+        {
+                if (mode==1)
+                {
+                    Numeros[i]=Cadena[i+nchar];             // Aqui está el ptroblema!!!!
+                    if (nchar >= Size_String) nchar=0;   // Restablece el contador de caractres
+                    if (i==4)
+                    {
+                        i=0;    
+                        mode=0;         // Nos vamos a modo 0
+                    }                         
+                } 
+            Anodos=Digitos[4];          // Apaga todos los Digitos (Evita fantasmas)                
+            Catodos=Segmentos[Numeros[i]];  // Actualiza los segmentos
+            if (i==4) Catodos=(Segmentos[Numeros[i]]& 0xFE); // Enciende el punto decimal
+            Anodos=Digitos[i];          // Activa el Digito en cuestión
+            i++;                        // Apunta al siguiente dígito
+            if (i==4)                   // Es el últino digito?
+            {
+                i=0;                    // Reinicia el Barriodo
+                mode=0;                 // Nos vamos a modo 0
+                Red_Led=!Red_Led;       // Parpadeo del Led Rojo
+            }    
+            flag1=FALSE;                // Apaga la Bandera 1
+        }    
+       if (flag2==TRUE)                 // Está puesta la Bandera 2?
+       {
+        shift_rate--;                   // Decrementa el contador de Corrimientos
+        if (!shift_rate)                // Es Cero?
+        {    
+            mode=1;                     // Tiempo entre desplazamientos del mensaje
+            shift_rate = Shift_Time;    // Restablece el triempo de los corrimientos
+            nchar++;                    // corrimiento al siguiente conjunto de de caracteres
+            i=0;                        // Restablece el índice para comenzar el Barrido
+        } 
+           Green_Led=!Green_Led;        // Parpadeo del Led Verde
+           flag2=FALSE;                 // Apaga la Bandera 2
+       } 
+    }
+  // END while
+}
+// END main
+
+/*
+................................................................................
+:  Rutinas de los Vectores de Interrupción
+................................................................................
+*/
+void Barrido_OnInterrupt(void)              // Rutina de Atención al Ticker
+{                          //El servicio a la interrupcion van aqui!
+ cont_1ms++;
+    scan_rate++;
+    counter--;
+    if(scan_rate==4)
+    {
+        scan_rate=0;          
+        flag1=TRUE;
+    }        
+    if (cont_1ms>=10)
+    {
+        cont_10ms++;
+        cont_1ms=0;
+    }      
+    if (cont_10ms>=10)
+    {
+        cont_100ms++;
+        cont_10ms=0;
+    }    
+    if (cont_100ms>=10)
+    {
+        cont_1s++;
+        cont_100ms=0;
+    }    
+    if (cont_1s>=10) 
+    {
+        cont_1s=0;
+    }
+    if (!counter)
+    {
+        counter=300;
+        flag2=TRUE;            
+    }
+}
+/* END Events */        // Rutinas de Atención a Interrupciones
+
+
+////////////////////////// BARRIDO DEL DISPLAY  ////////////////////////////////////
+void Display()
+{
+// Barrido del Display //    
+    /*if (Flag2==TRUE)
+    {
+        
+        Anodos=Digitos[4];      // Evita Fantasmas       
+        Catodos=Segmentos[copia[i]];
+        Anodos=Digitos[i]; 
+        i++;
+        if (i==4)
+        {            //PROBLEMA?
+            i=0;   
+             
+        }          
+       Flag1=FALSE;        
+    }    */               
+}           
+// End Display 
+
+////////////////////////// FUNCIONES ESTADO DEL BAÑO  ////////////////////////////////////
+bool BanoDisponible()
+{
+      Luz=0; 
+      Ventilador=0;     //Luz y entilador apagados
+      Seguro=0;         //Seguro desactivado       
+      Green=0;  
+      Red=1;
+      Blue=1; 
+      control=2;
+      Mensaje(); 
+      return true;
+}
+
+bool BanoOcupado()
+{
+      Luz=1; 
+      Ventilador=1; //Luz y ventilador encendidos
+      Seguro=1;     // Seguro Activado
+      Red=0;
+      Green=1;
+      Blue=1;
+      control=1;
+      Mensaje();
+      return true;
+}
+      
+bool PuertaAbierta()
+{
+      Luz=1;
+      Ventilador=1;
+      Green=1;  
+      Red=0;
+      Blue=0;
+      control=3;
+      Mensaje();
+      return true;
+}
+////////////////////////// MENSAJES  ////////////////////////////////////
+void Mensaje()
+{
+    //corrimiento de mensaje// 
+    switch (control)
+    {
+      case 1:   
+        for(uint8_t o=0;o<=13;o++){
+            Cadena[o] = Mensaje1[o];
+        }
+        break;
+      case 2:   
+        for(uint8_t o=0;o<=13;o++){
+            Cadena[o] = Mensaje2[o];
+        }
+        break;  
+      case 3:   
+        for(uint8_t o=0;o<=13;o++){
+            Cadena[o] = Mensaje3[o];
+        }
+        break;
+    }
+} 
+// END Mbed
\ No newline at end of file