Joaquín López
/
TP1_PUNTO1
Primer punto del TP1
main.cpp@0:52f58b5fcd97, 2018-05-31 (annotated)
- Committer:
- Joacolopez22
- Date:
- Thu May 31 14:08:05 2018 +0000
- Revision:
- 0:52f58b5fcd97
Punto 1 del TP1
Who changed what in which revision?
User | Revision | Line number | New 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 | } |