Prueba con puertos seriales Nucleo F303K8
Dependencies: BufferedSerial DebounceIn mbed
uf.h@0:132b26ef40ed, 2016-08-23 (annotated)
- Committer:
- mvargas_dtk
- Date:
- Tue Aug 23 21:20:02 2016 +0000
- Revision:
- 0:132b26ef40ed
Prueba Serial Nucleo F303K8
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mvargas_dtk | 0:132b26ef40ed | 1 | /* |
mvargas_dtk | 0:132b26ef40ed | 2 | * - Proyecto: Detektor Fuel Truck Monitoring System |
mvargas_dtk | 0:132b26ef40ed | 3 | Interconexión de Múltiples UFS270. |
mvargas_dtk | 0:132b26ef40ed | 4 | * - Lenguaje: ANSI C/C++ (mbed) |
mvargas_dtk | 0:132b26ef40ed | 5 | * - Tarjeta: Nucleo F091RC |
mvargas_dtk | 0:132b26ef40ed | 6 | * - Referencias: |
mvargas_dtk | 0:132b26ef40ed | 7 | * - Fecha: 2016/Mar |
mvargas_dtk | 0:132b26ef40ed | 8 | * - Autor(es): Felícito Manzano / |
mvargas_dtk | 0:132b26ef40ed | 9 | Mario Vargas |
mvargas_dtk | 0:132b26ef40ed | 10 | * - Compañia: V.S.R. de Centroamérica |
mvargas_dtk | 0:132b26ef40ed | 11 | * - País: SV / CR |
mvargas_dtk | 0:132b26ef40ed | 12 | */ |
mvargas_dtk | 0:132b26ef40ed | 13 | |
mvargas_dtk | 0:132b26ef40ed | 14 | #include "DebounceIn.h" |
mvargas_dtk | 0:132b26ef40ed | 15 | #include "BufferedSerial.h" |
mvargas_dtk | 0:132b26ef40ed | 16 | |
mvargas_dtk | 0:132b26ef40ed | 17 | /* DEFINICIÓN DE FUNCIONES */ |
mvargas_dtk | 0:132b26ef40ed | 18 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 19 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 20 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 21 | int ufs270_tfms(BufferedSerial *puerto_data, char nivel[6], char hw[2], char sw[2]) |
mvargas_dtk | 0:132b26ef40ed | 22 | { |
mvargas_dtk | 0:132b26ef40ed | 23 | /* Descripción de la función. |
mvargas_dtk | 0:132b26ef40ed | 24 | |
mvargas_dtk | 0:132b26ef40ed | 25 | REAL TIME FUEL LEVEL!! |
mvargas_dtk | 0:132b26ef40ed | 26 | |
mvargas_dtk | 0:132b26ef40ed | 27 | Esta función recibe un puerto serial Buffered en el que se recibe la trama |
mvargas_dtk | 0:132b26ef40ed | 28 | *QL,411D,01,01580,02D0,2205,01551,null# |
mvargas_dtk | 0:132b26ef40ed | 29 | |
mvargas_dtk | 0:132b26ef40ed | 30 | +-------------------------------------------------------+ |
mvargas_dtk | 0:132b26ef40ed | 31 | | PARAMETER | LENGHT | EXAMPLE | DESCRIPTION | |
mvargas_dtk | 0:132b26ef40ed | 32 | +----------------------+--------+---------+-------------+ |
mvargas_dtk | 0:132b26ef40ed | 33 | | HEADER | 3 | *QL, | | |
mvargas_dtk | 0:132b26ef40ed | 34 | | PROTOCOL | 1 | 4 | | |
mvargas_dtk | 0:132b26ef40ed | 35 | | FIRMWARE | 2 | 11 | | |
mvargas_dtk | 0:132b26ef40ed | 36 | | HARDWARE | 1 | D, | | |
mvargas_dtk | 0:132b26ef40ed | 37 | | RESERVED | 2 | 01, | | |
mvargas_dtk | 0:132b26ef40ed | 38 | | CALCULATE FUEL LEVEL | 5 | 01580, | Unit 0.1 mm | |
mvargas_dtk | 0:132b26ef40ed | 39 | | SIGNAL STRENG | 2 | 02 | | |
mvargas_dtk | 0:132b26ef40ed | 40 | | SOFTWARE STATUS CODE | 1 | D | | |
mvargas_dtk | 0:132b26ef40ed | 41 | | HARDWARE FAULT CODE | 1 | 0, | | |
mvargas_dtk | 0:132b26ef40ed | 42 | | RESERVED | 4 | 2205, | | |
mvargas_dtk | 0:132b26ef40ed | 43 | | REAL TIME FUEL LEVEL | 5 | 01551, | Unit 0.1 mm | |
mvargas_dtk | 0:132b26ef40ed | 44 | | RESERVED | 4 | null | | |
mvargas_dtk | 0:132b26ef40ed | 45 | | TAIL | 1 | # | | |
mvargas_dtk | 0:132b26ef40ed | 46 | +----------------------+--------+---------+-------------+ |
mvargas_dtk | 0:132b26ef40ed | 47 | |
mvargas_dtk | 0:132b26ef40ed | 48 | Se lee caracter por caracter, al encontrar un asterisco se inicia el conteo |
mvargas_dtk | 0:132b26ef40ed | 49 | de caracteres, aprovechando que la longitud de la trama es fija se extrae la |
mvargas_dtk | 0:132b26ef40ed | 50 | información de nivel de combustible (REAL TIME FUEL LEVEL) en base al contador |
mvargas_dtk | 0:132b26ef40ed | 51 | de caracteres, también se extrae el estatus de software y hardware. |
mvargas_dtk | 0:132b26ef40ed | 52 | |
mvargas_dtk | 0:132b26ef40ed | 53 | Si existe información en puerto Serial y es legible se retorna 1. |
mvargas_dtk | 0:132b26ef40ed | 54 | Si no existe información para leer en el puerto Serial se retorna 0. |
mvargas_dtk | 0:132b26ef40ed | 55 | */ |
mvargas_dtk | 0:132b26ef40ed | 56 | |
mvargas_dtk | 0:132b26ef40ed | 57 | char ufs270_begin = '*'; |
mvargas_dtk | 0:132b26ef40ed | 58 | int char_fuel = 29; |
mvargas_dtk | 0:132b26ef40ed | 59 | int char_fuel_limit = 33; |
mvargas_dtk | 0:132b26ef40ed | 60 | int char_swstatus = 21; |
mvargas_dtk | 0:132b26ef40ed | 61 | int char_hwstatus = 22; |
mvargas_dtk | 0:132b26ef40ed | 62 | int char_counter = 0; |
mvargas_dtk | 0:132b26ef40ed | 63 | int z = 0; |
mvargas_dtk | 0:132b26ef40ed | 64 | int begin = 0; |
mvargas_dtk | 0:132b26ef40ed | 65 | |
mvargas_dtk | 0:132b26ef40ed | 66 | while (puerto_data -> readable()) { |
mvargas_dtk | 0:132b26ef40ed | 67 | // If the character on the |
mvargas_dtk | 0:132b26ef40ed | 68 | char incoming_char = puerto_data -> getc(); |
mvargas_dtk | 0:132b26ef40ed | 69 | if (incoming_char == ufs270_begin) { |
mvargas_dtk | 0:132b26ef40ed | 70 | char_counter = 1; |
mvargas_dtk | 0:132b26ef40ed | 71 | z=0; |
mvargas_dtk | 0:132b26ef40ed | 72 | begin = 1; |
mvargas_dtk | 0:132b26ef40ed | 73 | } else { |
mvargas_dtk | 0:132b26ef40ed | 74 | char_counter++; |
mvargas_dtk | 0:132b26ef40ed | 75 | } |
mvargas_dtk | 0:132b26ef40ed | 76 | if ((char_counter == char_swstatus) && begin) { |
mvargas_dtk | 0:132b26ef40ed | 77 | sw[0] = incoming_char; |
mvargas_dtk | 0:132b26ef40ed | 78 | } else if ((char_counter == char_hwstatus) && begin) { |
mvargas_dtk | 0:132b26ef40ed | 79 | hw[0] = incoming_char; |
mvargas_dtk | 0:132b26ef40ed | 80 | } else if ((char_counter >= char_fuel) && (char_counter <= char_fuel_limit) && begin) { |
mvargas_dtk | 0:132b26ef40ed | 81 | nivel[z] = incoming_char; |
mvargas_dtk | 0:132b26ef40ed | 82 | z++; |
mvargas_dtk | 0:132b26ef40ed | 83 | } |
mvargas_dtk | 0:132b26ef40ed | 84 | } |
mvargas_dtk | 0:132b26ef40ed | 85 | |
mvargas_dtk | 0:132b26ef40ed | 86 | if (begin) { |
mvargas_dtk | 0:132b26ef40ed | 87 | return (1); |
mvargas_dtk | 0:132b26ef40ed | 88 | } else { |
mvargas_dtk | 0:132b26ef40ed | 89 | return (0); |
mvargas_dtk | 0:132b26ef40ed | 90 | } |
mvargas_dtk | 0:132b26ef40ed | 91 | } |
mvargas_dtk | 0:132b26ef40ed | 92 | |
mvargas_dtk | 0:132b26ef40ed | 93 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 94 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 95 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 96 | |
mvargas_dtk | 0:132b26ef40ed | 97 | int ufs270_calculateFL(BufferedSerial *puerto_data, char nivel[6], char hw[2], char sw[2]) |
mvargas_dtk | 0:132b26ef40ed | 98 | { |
mvargas_dtk | 0:132b26ef40ed | 99 | /* Descripción de la función. |
mvargas_dtk | 0:132b26ef40ed | 100 | |
mvargas_dtk | 0:132b26ef40ed | 101 | CALCULATE FUEL LEVEL |
mvargas_dtk | 0:132b26ef40ed | 102 | |
mvargas_dtk | 0:132b26ef40ed | 103 | Esta función recibe un puerto serial Buffered en el que se recibe la trama |
mvargas_dtk | 0:132b26ef40ed | 104 | *QL,411D,01,01580,02D0,2205,01551,null# |
mvargas_dtk | 0:132b26ef40ed | 105 | |
mvargas_dtk | 0:132b26ef40ed | 106 | +-------------------------------------------------------+ |
mvargas_dtk | 0:132b26ef40ed | 107 | | PARAMETER | LENGHT | EXAMPLE | DESCRIPTION | |
mvargas_dtk | 0:132b26ef40ed | 108 | +----------------------+--------+---------+-------------+ |
mvargas_dtk | 0:132b26ef40ed | 109 | | HEADER | 3 | *QL, | | |
mvargas_dtk | 0:132b26ef40ed | 110 | | PROTOCOL | 1 | 4 | | |
mvargas_dtk | 0:132b26ef40ed | 111 | | FIRMWARE | 2 | 11 | | |
mvargas_dtk | 0:132b26ef40ed | 112 | | HARDWARE | 1 | D, | | |
mvargas_dtk | 0:132b26ef40ed | 113 | | RESERVED | 2 | 01, | | |
mvargas_dtk | 0:132b26ef40ed | 114 | | CALCULATE FUEL LEVEL | 5 | 01580, | Unit 0.1 mm | |
mvargas_dtk | 0:132b26ef40ed | 115 | | SIGNAL STRENG | 2 | 02 | | |
mvargas_dtk | 0:132b26ef40ed | 116 | | SOFTWARE STATUS CODE | 1 | D | | |
mvargas_dtk | 0:132b26ef40ed | 117 | | HARDWARE FAULT CODE | 1 | 0, | | |
mvargas_dtk | 0:132b26ef40ed | 118 | | RESERVED | 4 | 2205, | | |
mvargas_dtk | 0:132b26ef40ed | 119 | | REAL TIME FUEL LEVEL | 5 | 01551, | Unit 0.1 mm | |
mvargas_dtk | 0:132b26ef40ed | 120 | | RESERVED | 4 | null | | |
mvargas_dtk | 0:132b26ef40ed | 121 | | TAIL | 1 | # | | |
mvargas_dtk | 0:132b26ef40ed | 122 | +----------------------+--------+---------+-------------+ |
mvargas_dtk | 0:132b26ef40ed | 123 | |
mvargas_dtk | 0:132b26ef40ed | 124 | Se lee caracter por caracter, al encontrar un asterisco se inicia el conteo |
mvargas_dtk | 0:132b26ef40ed | 125 | de caracteres, aprovechando que la longitud de la trama es fija se extrae la |
mvargas_dtk | 0:132b26ef40ed | 126 | información de nivel de combustible en base al contador de caracteres, también |
mvargas_dtk | 0:132b26ef40ed | 127 | se extrae el estatus de software y hardware. |
mvargas_dtk | 0:132b26ef40ed | 128 | |
mvargas_dtk | 0:132b26ef40ed | 129 | Si existe información en puerto Serial y es legible se retorna 1. |
mvargas_dtk | 0:132b26ef40ed | 130 | Si no existe información para leer en el puerto Serial se retorna 0. |
mvargas_dtk | 0:132b26ef40ed | 131 | */ |
mvargas_dtk | 0:132b26ef40ed | 132 | char ufs270_begin = '*'; |
mvargas_dtk | 0:132b26ef40ed | 133 | int char_fuel = 13; |
mvargas_dtk | 0:132b26ef40ed | 134 | int char_fuel_limit = 17; |
mvargas_dtk | 0:132b26ef40ed | 135 | int char_swstatus = 21; |
mvargas_dtk | 0:132b26ef40ed | 136 | int char_hwstatus = 22; |
mvargas_dtk | 0:132b26ef40ed | 137 | int char_counter = 0; |
mvargas_dtk | 0:132b26ef40ed | 138 | int z = 0; |
mvargas_dtk | 0:132b26ef40ed | 139 | int begin = 0; |
mvargas_dtk | 0:132b26ef40ed | 140 | |
mvargas_dtk | 0:132b26ef40ed | 141 | if (puerto_data -> readable()) { |
mvargas_dtk | 0:132b26ef40ed | 142 | while (puerto_data -> readable()) { |
mvargas_dtk | 0:132b26ef40ed | 143 | // If the character on the |
mvargas_dtk | 0:132b26ef40ed | 144 | char incoming_char = puerto_data -> getc(); |
mvargas_dtk | 0:132b26ef40ed | 145 | if (incoming_char == ufs270_begin) { |
mvargas_dtk | 0:132b26ef40ed | 146 | char_counter = 1; |
mvargas_dtk | 0:132b26ef40ed | 147 | z=0; |
mvargas_dtk | 0:132b26ef40ed | 148 | begin = 1; |
mvargas_dtk | 0:132b26ef40ed | 149 | } else { |
mvargas_dtk | 0:132b26ef40ed | 150 | char_counter++; |
mvargas_dtk | 0:132b26ef40ed | 151 | } |
mvargas_dtk | 0:132b26ef40ed | 152 | if ((char_counter >= char_fuel) && (char_counter <= char_fuel_limit) && begin) { |
mvargas_dtk | 0:132b26ef40ed | 153 | nivel[z] = incoming_char; |
mvargas_dtk | 0:132b26ef40ed | 154 | z++; |
mvargas_dtk | 0:132b26ef40ed | 155 | } else if ((char_counter == char_swstatus) && begin) { |
mvargas_dtk | 0:132b26ef40ed | 156 | sw[0] = incoming_char; |
mvargas_dtk | 0:132b26ef40ed | 157 | } else if ((char_counter == char_hwstatus) && begin) { |
mvargas_dtk | 0:132b26ef40ed | 158 | hw[0] = incoming_char; |
mvargas_dtk | 0:132b26ef40ed | 159 | } |
mvargas_dtk | 0:132b26ef40ed | 160 | } |
mvargas_dtk | 0:132b26ef40ed | 161 | return (1); |
mvargas_dtk | 0:132b26ef40ed | 162 | } else { |
mvargas_dtk | 0:132b26ef40ed | 163 | return (0); |
mvargas_dtk | 0:132b26ef40ed | 164 | } |
mvargas_dtk | 0:132b26ef40ed | 165 | } |
mvargas_dtk | 0:132b26ef40ed | 166 | |
mvargas_dtk | 0:132b26ef40ed | 167 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 168 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 169 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 170 | |
mvargas_dtk | 0:132b26ef40ed | 171 | int configurar_entradas(DebounceIn *i_0, DebounceIn *i_1, DebounceIn *i_2, |
mvargas_dtk | 0:132b26ef40ed | 172 | DebounceIn *i_3, DebounceIn *i_4, DebounceIn *i_5, |
mvargas_dtk | 0:132b26ef40ed | 173 | DebounceIn *i_6) |
mvargas_dtk | 0:132b26ef40ed | 174 | { |
mvargas_dtk | 0:132b26ef40ed | 175 | /* Descripción de la función. |
mvargas_dtk | 0:132b26ef40ed | 176 | Utilizando la librería DebounceIn para filtrar entradas digitales |
mvargas_dtk | 0:132b26ef40ed | 177 | se configuran las 9 entradas digitales en modo PullUp, se define |
mvargas_dtk | 0:132b26ef40ed | 178 | el tiempo de muestreo a 40ms (40000us) y la cantidad de muestras |
mvargas_dtk | 0:132b26ef40ed | 179 | para validar en 20. |
mvargas_dtk | 0:132b26ef40ed | 180 | Esta función siempre retorna 1 |
mvargas_dtk | 0:132b26ef40ed | 181 | */ |
mvargas_dtk | 0:132b26ef40ed | 182 | |
mvargas_dtk | 0:132b26ef40ed | 183 | // Tiempo para filtrar: |
mvargas_dtk | 0:132b26ef40ed | 184 | // 50 milisegundos |
mvargas_dtk | 0:132b26ef40ed | 185 | int rebote_us = 50000; |
mvargas_dtk | 0:132b26ef40ed | 186 | |
mvargas_dtk | 0:132b26ef40ed | 187 | // Cantidad de muestras para filtrar |
mvargas_dtk | 0:132b26ef40ed | 188 | int muestras = 10; |
mvargas_dtk | 0:132b26ef40ed | 189 | |
mvargas_dtk | 0:132b26ef40ed | 190 | // Configurar en modo PullUp |
mvargas_dtk | 0:132b26ef40ed | 191 | i_0 -> mode(PullUp); |
mvargas_dtk | 0:132b26ef40ed | 192 | i_1 -> mode(PullUp); |
mvargas_dtk | 0:132b26ef40ed | 193 | i_2 -> mode(PullUp); |
mvargas_dtk | 0:132b26ef40ed | 194 | i_3 -> mode(PullUp); |
mvargas_dtk | 0:132b26ef40ed | 195 | i_4 -> mode(PullUp); |
mvargas_dtk | 0:132b26ef40ed | 196 | i_5 -> mode(PullUp); |
mvargas_dtk | 0:132b26ef40ed | 197 | i_6 -> mode(PullUp); |
mvargas_dtk | 0:132b26ef40ed | 198 | |
mvargas_dtk | 0:132b26ef40ed | 199 | // Tiempo de Espera para que se tome el cambio |
mvargas_dtk | 0:132b26ef40ed | 200 | // en la configuración de entradas a PullUp |
mvargas_dtk | 0:132b26ef40ed | 201 | wait_ms(10); |
mvargas_dtk | 0:132b26ef40ed | 202 | |
mvargas_dtk | 0:132b26ef40ed | 203 | // Modificar el tiempo de rebote |
mvargas_dtk | 0:132b26ef40ed | 204 | i_0 -> set_debounce_us(rebote_us); |
mvargas_dtk | 0:132b26ef40ed | 205 | i_1 -> set_debounce_us(rebote_us); |
mvargas_dtk | 0:132b26ef40ed | 206 | i_2 -> set_debounce_us(rebote_us); |
mvargas_dtk | 0:132b26ef40ed | 207 | i_3 -> set_debounce_us(rebote_us); |
mvargas_dtk | 0:132b26ef40ed | 208 | i_4 -> set_debounce_us(rebote_us); |
mvargas_dtk | 0:132b26ef40ed | 209 | i_5 -> set_debounce_us(rebote_us); |
mvargas_dtk | 0:132b26ef40ed | 210 | i_6 -> set_debounce_us(rebote_us); |
mvargas_dtk | 0:132b26ef40ed | 211 | |
mvargas_dtk | 0:132b26ef40ed | 212 | // Modificar la cantidad de muestras |
mvargas_dtk | 0:132b26ef40ed | 213 | i_0 -> set_samples(muestras); |
mvargas_dtk | 0:132b26ef40ed | 214 | i_1 -> set_samples(muestras); |
mvargas_dtk | 0:132b26ef40ed | 215 | i_2 -> set_samples(muestras); |
mvargas_dtk | 0:132b26ef40ed | 216 | i_3 -> set_samples(muestras); |
mvargas_dtk | 0:132b26ef40ed | 217 | i_4 -> set_samples(muestras); |
mvargas_dtk | 0:132b26ef40ed | 218 | i_5 -> set_samples(muestras); |
mvargas_dtk | 0:132b26ef40ed | 219 | i_6 -> set_samples(muestras); |
mvargas_dtk | 0:132b26ef40ed | 220 | |
mvargas_dtk | 0:132b26ef40ed | 221 | return(1); |
mvargas_dtk | 0:132b26ef40ed | 222 | } |
mvargas_dtk | 0:132b26ef40ed | 223 | |
mvargas_dtk | 0:132b26ef40ed | 224 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 225 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 226 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 227 | |
mvargas_dtk | 0:132b26ef40ed | 228 | int leer_entradas(DebounceIn *i_0, DebounceIn *i_1, DebounceIn *i_2, |
mvargas_dtk | 0:132b26ef40ed | 229 | DebounceIn *i_3, DebounceIn *i_4, DebounceIn *i_5, |
mvargas_dtk | 0:132b26ef40ed | 230 | DebounceIn *i_6, int entradas[7]) |
mvargas_dtk | 0:132b26ef40ed | 231 | { |
mvargas_dtk | 0:132b26ef40ed | 232 | /* Descripción de Función: |
mvargas_dtk | 0:132b26ef40ed | 233 | Esta función realiza la lectura de las 19 entradas digitales. |
mvargas_dtk | 0:132b26ef40ed | 234 | El resultado de las lecturas se almacena en un vector entero |
mvargas_dtk | 0:132b26ef40ed | 235 | de 19 posiciones. Siempre se retorna un valor 1. |
mvargas_dtk | 0:132b26ef40ed | 236 | */ |
mvargas_dtk | 0:132b26ef40ed | 237 | |
mvargas_dtk | 0:132b26ef40ed | 238 | // Entradas Digitales |
mvargas_dtk | 0:132b26ef40ed | 239 | entradas[0] = i_0 -> read(); |
mvargas_dtk | 0:132b26ef40ed | 240 | wait_ms(5); |
mvargas_dtk | 0:132b26ef40ed | 241 | |
mvargas_dtk | 0:132b26ef40ed | 242 | entradas[1] = i_1 -> read(); |
mvargas_dtk | 0:132b26ef40ed | 243 | wait_ms(5); |
mvargas_dtk | 0:132b26ef40ed | 244 | |
mvargas_dtk | 0:132b26ef40ed | 245 | entradas[2] = i_2 -> read(); |
mvargas_dtk | 0:132b26ef40ed | 246 | wait_ms(5); |
mvargas_dtk | 0:132b26ef40ed | 247 | |
mvargas_dtk | 0:132b26ef40ed | 248 | entradas[3] = i_3 -> read(); |
mvargas_dtk | 0:132b26ef40ed | 249 | wait_ms(5); |
mvargas_dtk | 0:132b26ef40ed | 250 | |
mvargas_dtk | 0:132b26ef40ed | 251 | entradas[4] = i_4 -> read(); |
mvargas_dtk | 0:132b26ef40ed | 252 | wait_ms(5); |
mvargas_dtk | 0:132b26ef40ed | 253 | |
mvargas_dtk | 0:132b26ef40ed | 254 | entradas[5] = i_5 -> read(); |
mvargas_dtk | 0:132b26ef40ed | 255 | wait_ms(5); |
mvargas_dtk | 0:132b26ef40ed | 256 | |
mvargas_dtk | 0:132b26ef40ed | 257 | entradas[6] = i_6 -> read(); |
mvargas_dtk | 0:132b26ef40ed | 258 | wait_ms(5); |
mvargas_dtk | 0:132b26ef40ed | 259 | |
mvargas_dtk | 0:132b26ef40ed | 260 | return (1); |
mvargas_dtk | 0:132b26ef40ed | 261 | } |
mvargas_dtk | 0:132b26ef40ed | 262 | |
mvargas_dtk | 0:132b26ef40ed | 263 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 264 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 265 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 266 | |
mvargas_dtk | 0:132b26ef40ed | 267 | int comparar_entradas(int previas[7], int actuales[7]) |
mvargas_dtk | 0:132b26ef40ed | 268 | { |
mvargas_dtk | 0:132b26ef40ed | 269 | /* Descripción de función: |
mvargas_dtk | 0:132b26ef40ed | 270 | Esta función recibe dos vectores de enteros con 19 posiciones. |
mvargas_dtk | 0:132b26ef40ed | 271 | Cada posición representa una de las entradas del mando eléctrico. |
mvargas_dtk | 0:132b26ef40ed | 272 | Se realiza la comparación de cada posición, si una de las |
mvargas_dtk | 0:132b26ef40ed | 273 | posiciones es diferente se devuelve el valor 1 para indicar |
mvargas_dtk | 0:132b26ef40ed | 274 | que son diferentes. Si todas las posiciones son iguales entonces |
mvargas_dtk | 0:132b26ef40ed | 275 | se devuelve 0 para indicar que son iguales. |
mvargas_dtk | 0:132b26ef40ed | 276 | */ |
mvargas_dtk | 0:132b26ef40ed | 277 | |
mvargas_dtk | 0:132b26ef40ed | 278 | // Variables locales |
mvargas_dtk | 0:132b26ef40ed | 279 | int son_iguales = 0; |
mvargas_dtk | 0:132b26ef40ed | 280 | int entradas = 7; |
mvargas_dtk | 0:132b26ef40ed | 281 | int z; |
mvargas_dtk | 0:132b26ef40ed | 282 | |
mvargas_dtk | 0:132b26ef40ed | 283 | for (z=0; z<entradas; z++) { |
mvargas_dtk | 0:132b26ef40ed | 284 | (previas[z] == actuales[z]) ? (son_iguales *= 1) : son_iguales++; |
mvargas_dtk | 0:132b26ef40ed | 285 | } |
mvargas_dtk | 0:132b26ef40ed | 286 | |
mvargas_dtk | 0:132b26ef40ed | 287 | if (son_iguales > 0) { |
mvargas_dtk | 0:132b26ef40ed | 288 | return (1); |
mvargas_dtk | 0:132b26ef40ed | 289 | } else { |
mvargas_dtk | 0:132b26ef40ed | 290 | return (0); |
mvargas_dtk | 0:132b26ef40ed | 291 | } |
mvargas_dtk | 0:132b26ef40ed | 292 | } |
mvargas_dtk | 0:132b26ef40ed | 293 | |
mvargas_dtk | 0:132b26ef40ed | 294 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 295 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 296 | /*******************************************************************/ |
mvargas_dtk | 0:132b26ef40ed | 297 | |
mvargas_dtk | 0:132b26ef40ed | 298 | int incrementar_trama(int *tramas) |
mvargas_dtk | 0:132b26ef40ed | 299 | { |
mvargas_dtk | 0:132b26ef40ed | 300 | /* |
mvargas_dtk | 0:132b26ef40ed | 301 | Esta función recibe un entero que es el contador de tramas |
mvargas_dtk | 0:132b26ef40ed | 302 | realiza el incremento en uno y verifica si el valor es mayor |
mvargas_dtk | 0:132b26ef40ed | 303 | o igual que 65535 que es equivalente a 0xFFFF. Si se cumple |
mvargas_dtk | 0:132b26ef40ed | 304 | la condución se regresa el valor a 1. |
mvargas_dtk | 0:132b26ef40ed | 305 | Esta función siempre retorna 0. |
mvargas_dtk | 0:132b26ef40ed | 306 | */ |
mvargas_dtk | 0:132b26ef40ed | 307 | int actual = *tramas; |
mvargas_dtk | 0:132b26ef40ed | 308 | int limite = 65535; |
mvargas_dtk | 0:132b26ef40ed | 309 | actual++; |
mvargas_dtk | 0:132b26ef40ed | 310 | |
mvargas_dtk | 0:132b26ef40ed | 311 | if (actual > limite) { |
mvargas_dtk | 0:132b26ef40ed | 312 | *tramas = 1; |
mvargas_dtk | 0:132b26ef40ed | 313 | } else { |
mvargas_dtk | 0:132b26ef40ed | 314 | *tramas = actual; |
mvargas_dtk | 0:132b26ef40ed | 315 | } |
mvargas_dtk | 0:132b26ef40ed | 316 | return(0); |
mvargas_dtk | 0:132b26ef40ed | 317 | } |