Primer punto del TP1

Dependencies:   mbed

Committer:
Joacolopez22
Date:
Thu May 31 14:08:05 2018 +0000
Revision:
0:52f58b5fcd97
Punto 1 del TP1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Joacolopez22 0:52f58b5fcd97 1 #include "mbed.h"
Joacolopez22 0:52f58b5fcd97 2
Joacolopez22 0:52f58b5fcd97 3 // ENUMS //
Joacolopez22 0:52f58b5fcd97 4 enum {
Joacolopez22 0:52f58b5fcd97 5 ENCENDIDO,APAGADO
Joacolopez22 0:52f58b5fcd97 6 };
Joacolopez22 0:52f58b5fcd97 7 enum {
Joacolopez22 0:52f58b5fcd97 8 SUELTO, QUIZAS_PRESIONADO, PRESIONADO, QUIZAS_SUELTO
Joacolopez22 0:52f58b5fcd97 9 };
Joacolopez22 0:52f58b5fcd97 10
Joacolopez22 0:52f58b5fcd97 11 enum {
Joacolopez22 0:52f58b5fcd97 12 NO_PRESIONADO, APRETADO, DEJO_APRETAR
Joacolopez22 0:52f58b5fcd97 13 };
Joacolopez22 0:52f58b5fcd97 14
Joacolopez22 0:52f58b5fcd97 15
Joacolopez22 0:52f58b5fcd97 16 // PINOUTS //
Joacolopez22 0:52f58b5fcd97 17 DigitalIn PULSADOR(PTC6);
Joacolopez22 0:52f58b5fcd97 18 DigitalOut LED(LED_RED);
Joacolopez22 0:52f58b5fcd97 19 Ticker temporizador;
Joacolopez22 0:52f58b5fcd97 20
Joacolopez22 0:52f58b5fcd97 21 // VARIABLES //
Joacolopez22 0:52f58b5fcd97 22 int a = 0;
Joacolopez22 0:52f58b5fcd97 23 int b=0;
Joacolopez22 0:52f58b5fcd97 24 int c = 0;
Joacolopez22 0:52f58b5fcd97 25 int x = 0;
Joacolopez22 0:52f58b5fcd97 26 int timeout = 0;
Joacolopez22 0:52f58b5fcd97 27 int timeout2 = 0;
Joacolopez22 0:52f58b5fcd97 28 unsigned char LED_Estado= ENCENDIDO;
Joacolopez22 0:52f58b5fcd97 29 unsigned char PULS_estado = SUELTO;
Joacolopez22 0:52f58b5fcd97 30 unsigned char DETECTOR_estado = NO_PRESIONADO;
Joacolopez22 0:52f58b5fcd97 31
Joacolopez22 0:52f58b5fcd97 32
Joacolopez22 0:52f58b5fcd97 33 // PROTOCOLOS DE FUNCIO //
Joacolopez22 0:52f58b5fcd97 34 void LED_Titilar (void);
Joacolopez22 0:52f58b5fcd97 35 int PULS_Antirrebote(void);
Joacolopez22 0:52f58b5fcd97 36 int DETECTOR_Flancos(int antirrebote);
Joacolopez22 0:52f58b5fcd97 37 int Cant_toques(int detec_flan);
Joacolopez22 0:52f58b5fcd97 38 void timer (void);
Joacolopez22 0:52f58b5fcd97 39
Joacolopez22 0:52f58b5fcd97 40
Joacolopez22 0:52f58b5fcd97 41 // MAIN //
Joacolopez22 0:52f58b5fcd97 42 int main()
Joacolopez22 0:52f58b5fcd97 43 {
Joacolopez22 0:52f58b5fcd97 44 temporizador.attach(&timer,0.001);
Joacolopez22 0:52f58b5fcd97 45
Joacolopez22 0:52f58b5fcd97 46 while(1) {
Joacolopez22 0:52f58b5fcd97 47 a = PULS_Antirrebote();
Joacolopez22 0:52f58b5fcd97 48 b = DETECTOR_Flancos(a);
Joacolopez22 0:52f58b5fcd97 49 c = Cant_toques(b);
Joacolopez22 0:52f58b5fcd97 50 if(c == 1) {
Joacolopez22 0:52f58b5fcd97 51 LED_Titilar (); // Led titilando
Joacolopez22 0:52f58b5fcd97 52 }
Joacolopez22 0:52f58b5fcd97 53 if(c == 0) {
Joacolopez22 0:52f58b5fcd97 54 LED = 1; // Led apagado
Joacolopez22 0:52f58b5fcd97 55 }
Joacolopez22 0:52f58b5fcd97 56 }
Joacolopez22 0:52f58b5fcd97 57 }
Joacolopez22 0:52f58b5fcd97 58
Joacolopez22 0:52f58b5fcd97 59 // FUNCIONES //
Joacolopez22 0:52f58b5fcd97 60
Joacolopez22 0:52f58b5fcd97 61 void LED_Titilar (void) // Hace titilar al Led
Joacolopez22 0:52f58b5fcd97 62 {
Joacolopez22 0:52f58b5fcd97 63 if(timeout > 0)
Joacolopez22 0:52f58b5fcd97 64 return;
Joacolopez22 0:52f58b5fcd97 65 switch (LED_Estado) {
Joacolopez22 0:52f58b5fcd97 66 default:
Joacolopez22 0:52f58b5fcd97 67 case ENCENDIDO:
Joacolopez22 0:52f58b5fcd97 68 LED=0;
Joacolopez22 0:52f58b5fcd97 69 timeout=500;
Joacolopez22 0:52f58b5fcd97 70 LED_Estado=APAGADO;
Joacolopez22 0:52f58b5fcd97 71 break;
Joacolopez22 0:52f58b5fcd97 72 case APAGADO:
Joacolopez22 0:52f58b5fcd97 73 LED=1;
Joacolopez22 0:52f58b5fcd97 74 timeout=500;
Joacolopez22 0:52f58b5fcd97 75 LED_Estado=ENCENDIDO;
Joacolopez22 0:52f58b5fcd97 76 break;
Joacolopez22 0:52f58b5fcd97 77 }
Joacolopez22 0:52f58b5fcd97 78 }
Joacolopez22 0:52f58b5fcd97 79
Joacolopez22 0:52f58b5fcd97 80 int PULS_Antirrebote(void) // Elimina el rebote del pulsador //
Joacolopez22 0:52f58b5fcd97 81 {
Joacolopez22 0:52f58b5fcd97 82 int p;
Joacolopez22 0:52f58b5fcd97 83 switch (PULS_estado) {
Joacolopez22 0:52f58b5fcd97 84 default:
Joacolopez22 0:52f58b5fcd97 85 case SUELTO:
Joacolopez22 0:52f58b5fcd97 86 p = 0;
Joacolopez22 0:52f58b5fcd97 87 if (PULSADOR == 1) {
Joacolopez22 0:52f58b5fcd97 88 PULS_estado = QUIZAS_PRESIONADO;
Joacolopez22 0:52f58b5fcd97 89 timeout2 = 50;
Joacolopez22 0:52f58b5fcd97 90 }
Joacolopez22 0:52f58b5fcd97 91 break;
Joacolopez22 0:52f58b5fcd97 92 case QUIZAS_PRESIONADO:
Joacolopez22 0:52f58b5fcd97 93 p = 0;
Joacolopez22 0:52f58b5fcd97 94 if (timeout2 == 0 && PULSADOR == 1) {
Joacolopez22 0:52f58b5fcd97 95 PULS_estado = PRESIONADO;
Joacolopez22 0:52f58b5fcd97 96 }
Joacolopez22 0:52f58b5fcd97 97 if (timeout2 == 0 && PULSADOR == 0) {
Joacolopez22 0:52f58b5fcd97 98 PULS_estado = SUELTO;
Joacolopez22 0:52f58b5fcd97 99 }
Joacolopez22 0:52f58b5fcd97 100 break;
Joacolopez22 0:52f58b5fcd97 101 case PRESIONADO:
Joacolopez22 0:52f58b5fcd97 102 p = 1;
Joacolopez22 0:52f58b5fcd97 103 if (PULSADOR == 0) {
Joacolopez22 0:52f58b5fcd97 104 PULS_estado = QUIZAS_SUELTO;
Joacolopez22 0:52f58b5fcd97 105 timeout2 = 50;
Joacolopez22 0:52f58b5fcd97 106 }
Joacolopez22 0:52f58b5fcd97 107 break;
Joacolopez22 0:52f58b5fcd97 108 case QUIZAS_SUELTO:
Joacolopez22 0:52f58b5fcd97 109 p = 1;
Joacolopez22 0:52f58b5fcd97 110 if (timeout2 == 0 && PULSADOR == 1) {
Joacolopez22 0:52f58b5fcd97 111 PULS_estado = PRESIONADO;
Joacolopez22 0:52f58b5fcd97 112 }
Joacolopez22 0:52f58b5fcd97 113 if (timeout2 == 0 && PULSADOR == 0) {
Joacolopez22 0:52f58b5fcd97 114 PULS_estado = SUELTO;
Joacolopez22 0:52f58b5fcd97 115 }
Joacolopez22 0:52f58b5fcd97 116 break;
Joacolopez22 0:52f58b5fcd97 117 }
Joacolopez22 0:52f58b5fcd97 118 return p;
Joacolopez22 0:52f58b5fcd97 119 }
Joacolopez22 0:52f58b5fcd97 120
Joacolopez22 0:52f58b5fcd97 121 int DETECTOR_Flancos(int antirrebote) // Entrega un solo "1" cada vez
Joacolopez22 0:52f58b5fcd97 122 { // que se presiona el pulsador
Joacolopez22 0:52f58b5fcd97 123 int puls;
Joacolopez22 0:52f58b5fcd97 124 switch(DETECTOR_estado) {
Joacolopez22 0:52f58b5fcd97 125 case NO_PRESIONADO:
Joacolopez22 0:52f58b5fcd97 126 puls=0;
Joacolopez22 0:52f58b5fcd97 127 if(antirrebote == 1) {
Joacolopez22 0:52f58b5fcd97 128 DETECTOR_estado = APRETADO;
Joacolopez22 0:52f58b5fcd97 129 }
Joacolopez22 0:52f58b5fcd97 130 break;
Joacolopez22 0:52f58b5fcd97 131 case APRETADO:
Joacolopez22 0:52f58b5fcd97 132 puls=1;
Joacolopez22 0:52f58b5fcd97 133 DETECTOR_estado = DEJO_APRETAR;
Joacolopez22 0:52f58b5fcd97 134 break;
Joacolopez22 0:52f58b5fcd97 135 case DEJO_APRETAR:
Joacolopez22 0:52f58b5fcd97 136 puls=0;
Joacolopez22 0:52f58b5fcd97 137 if (antirrebote == 0) {
Joacolopez22 0:52f58b5fcd97 138 DETECTOR_estado = NO_PRESIONADO;
Joacolopez22 0:52f58b5fcd97 139 }
Joacolopez22 0:52f58b5fcd97 140 break;
Joacolopez22 0:52f58b5fcd97 141 }
Joacolopez22 0:52f58b5fcd97 142 return puls;
Joacolopez22 0:52f58b5fcd97 143 }
Joacolopez22 0:52f58b5fcd97 144
Joacolopez22 0:52f58b5fcd97 145 int Cant_toques(int detect_flan) // hace que la variable "x" cambie de "1" a "0"
Joacolopez22 0:52f58b5fcd97 146 { // y viceversa cada vez que se toca el pulsador
Joacolopez22 0:52f58b5fcd97 147 if(detect_flan == 1) {
Joacolopez22 0:52f58b5fcd97 148 x++;
Joacolopez22 0:52f58b5fcd97 149 }
Joacolopez22 0:52f58b5fcd97 150 if(x == 2) {
Joacolopez22 0:52f58b5fcd97 151 x=0;
Joacolopez22 0:52f58b5fcd97 152 }
Joacolopez22 0:52f58b5fcd97 153 return x;
Joacolopez22 0:52f58b5fcd97 154 }
Joacolopez22 0:52f58b5fcd97 155
Joacolopez22 0:52f58b5fcd97 156 void timer (void)
Joacolopez22 0:52f58b5fcd97 157 {
Joacolopez22 0:52f58b5fcd97 158 if (timeout >0)
Joacolopez22 0:52f58b5fcd97 159 timeout--;
Joacolopez22 0:52f58b5fcd97 160
Joacolopez22 0:52f58b5fcd97 161 if (timeout2 > 0)
Joacolopez22 0:52f58b5fcd97 162 timeout2--;
Joacolopez22 0:52f58b5fcd97 163 }