Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
Diff: main.cpp
- 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