Conexión de un UFS270 al la tarjeta NUCLEO-F091RC, se envia el dato de la altura real del liquido al puerto RS232 del GV300 cada 30seg (Aplicacion para tanques estacionarios)
Dependencies: BufferedSerial mbed
funciones_UFS270.h@0:d74fc1505b54, 2016-05-26 (annotated)
- Committer:
- mvargas_dtk
- Date:
- Thu May 26 21:19:42 2016 +0000
- Revision:
- 0:d74fc1505b54
Conexion de un solo sensor ultrasonico de combustible al nucleo-F091RC, y lectura del valor real de altura del liquido. Aplicacion para tanques estacionarios
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mvargas_dtk | 0:d74fc1505b54 | 1 | /* |
mvargas_dtk | 0:d74fc1505b54 | 2 | * - Proyecto: CH SABMiller. |
mvargas_dtk | 0:d74fc1505b54 | 3 | * - Lenguaje: ANSI C/C++ (mbed) |
mvargas_dtk | 0:d74fc1505b54 | 4 | * - Tarjeta: Nucleo F091RC |
mvargas_dtk | 0:d74fc1505b54 | 5 | * - Referencias: |
mvargas_dtk | 0:d74fc1505b54 | 6 | * - Fecha: 2016/May |
mvargas_dtk | 0:d74fc1505b54 | 7 | * - Autor(es): Felícito Manzano / |
mvargas_dtk | 0:d74fc1505b54 | 8 | Mario Vargas |
mvargas_dtk | 0:d74fc1505b54 | 9 | * - Compañia: V.S.R. de Centroamérica |
mvargas_dtk | 0:d74fc1505b54 | 10 | * - País: SV / CR |
mvargas_dtk | 0:d74fc1505b54 | 11 | */ |
mvargas_dtk | 0:d74fc1505b54 | 12 | |
mvargas_dtk | 0:d74fc1505b54 | 13 | #include "mbed.h" |
mvargas_dtk | 0:d74fc1505b54 | 14 | #include "BufferedSerial.h" |
mvargas_dtk | 0:d74fc1505b54 | 15 | #include "constantes.hpp" |
mvargas_dtk | 0:d74fc1505b54 | 16 | |
mvargas_dtk | 0:d74fc1505b54 | 17 | /* DEFINICIÓN DE FUNCIONES */ |
mvargas_dtk | 0:d74fc1505b54 | 18 | /*******************************************************************/ |
mvargas_dtk | 0:d74fc1505b54 | 19 | /*******************************************************************/ |
mvargas_dtk | 0:d74fc1505b54 | 20 | |
mvargas_dtk | 0:d74fc1505b54 | 21 | int ufs270_rtFL(BufferedSerial *puerto_data, char nivel[6], char hw[2], char sw[2]) |
mvargas_dtk | 0:d74fc1505b54 | 22 | { |
mvargas_dtk | 0:d74fc1505b54 | 23 | /* |
mvargas_dtk | 0:d74fc1505b54 | 24 | Descripción de la función. |
mvargas_dtk | 0:d74fc1505b54 | 25 | |
mvargas_dtk | 0:d74fc1505b54 | 26 | REAL TIME FUEL LEVEL!! |
mvargas_dtk | 0:d74fc1505b54 | 27 | |
mvargas_dtk | 0:d74fc1505b54 | 28 | Esta función recibe un puerto serial Buffered en el que se recibe la trama |
mvargas_dtk | 0:d74fc1505b54 | 29 | *QL,411D,01,01580,02D0,2205,01551,null# |
mvargas_dtk | 0:d74fc1505b54 | 30 | |
mvargas_dtk | 0:d74fc1505b54 | 31 | +-------------------------------------------------------+ |
mvargas_dtk | 0:d74fc1505b54 | 32 | | PARAMETER | LENGHT | EXAMPLE | DESCRIPTION | |
mvargas_dtk | 0:d74fc1505b54 | 33 | +----------------------+--------+---------+-------------+ |
mvargas_dtk | 0:d74fc1505b54 | 34 | | HEADER | 3 | *QL, | | |
mvargas_dtk | 0:d74fc1505b54 | 35 | | PROTOCOL | 1 | 4 | | |
mvargas_dtk | 0:d74fc1505b54 | 36 | | FIRMWARE | 2 | 11 | | |
mvargas_dtk | 0:d74fc1505b54 | 37 | | HARDWARE | 1 | D, | | |
mvargas_dtk | 0:d74fc1505b54 | 38 | | RESERVED | 2 | 01, | | |
mvargas_dtk | 0:d74fc1505b54 | 39 | | CALCULATE FUEL LEVEL | 5 | 01580, | Unit 0.1 mm | |
mvargas_dtk | 0:d74fc1505b54 | 40 | | SIGNAL STRENG | 2 | 02 | | |
mvargas_dtk | 0:d74fc1505b54 | 41 | | SOFTWARE STATUS CODE | 1 | D | | |
mvargas_dtk | 0:d74fc1505b54 | 42 | | HARDWARE FAULT CODE | 1 | 0, | | |
mvargas_dtk | 0:d74fc1505b54 | 43 | | RESERVED | 4 | 2205, | | |
mvargas_dtk | 0:d74fc1505b54 | 44 | | REAL TIME FUEL LEVEL | 5 | 01551, | Unit 0.1 mm | |
mvargas_dtk | 0:d74fc1505b54 | 45 | | RESERVED | 4 | null | | |
mvargas_dtk | 0:d74fc1505b54 | 46 | | TAIL | 1 | # | | |
mvargas_dtk | 0:d74fc1505b54 | 47 | +----------------------+--------+---------+-------------+ |
mvargas_dtk | 0:d74fc1505b54 | 48 | |
mvargas_dtk | 0:d74fc1505b54 | 49 | Se lee caracter por caracter, al encontrar un asterisco se inicia el conteo |
mvargas_dtk | 0:d74fc1505b54 | 50 | de caracteres, aprovechando que la longitud de la trama es fija se extrae la |
mvargas_dtk | 0:d74fc1505b54 | 51 | información de nivel de combustible (REAL TIME FUEL LEVEL) en base al contador |
mvargas_dtk | 0:d74fc1505b54 | 52 | de caracteres, también se extrae el estatus de software y hardware. |
mvargas_dtk | 0:d74fc1505b54 | 53 | |
mvargas_dtk | 0:d74fc1505b54 | 54 | Si existe información en puerto Serial y es legible se retorna 1. |
mvargas_dtk | 0:d74fc1505b54 | 55 | Si no existe información para leer en el puerto Serial se retorna 0. |
mvargas_dtk | 0:d74fc1505b54 | 56 | */ |
mvargas_dtk | 0:d74fc1505b54 | 57 | |
mvargas_dtk | 0:d74fc1505b54 | 58 | char ufs270_begin = '*'; |
mvargas_dtk | 0:d74fc1505b54 | 59 | int char_fuel = 29; |
mvargas_dtk | 0:d74fc1505b54 | 60 | int char_fuel_limit = 33; |
mvargas_dtk | 0:d74fc1505b54 | 61 | int char_swstatus = 21; |
mvargas_dtk | 0:d74fc1505b54 | 62 | int char_hwstatus = 22; |
mvargas_dtk | 0:d74fc1505b54 | 63 | |
mvargas_dtk | 0:d74fc1505b54 | 64 | int char_counter = 0; |
mvargas_dtk | 0:d74fc1505b54 | 65 | int z = 0; |
mvargas_dtk | 0:d74fc1505b54 | 66 | int begin = 0; |
mvargas_dtk | 0:d74fc1505b54 | 67 | |
mvargas_dtk | 0:d74fc1505b54 | 68 | while (puerto_data -> readable()) { |
mvargas_dtk | 0:d74fc1505b54 | 69 | // If the character on the |
mvargas_dtk | 0:d74fc1505b54 | 70 | char incoming_char = puerto_data -> getc(); |
mvargas_dtk | 0:d74fc1505b54 | 71 | if (incoming_char == ufs270_begin) { |
mvargas_dtk | 0:d74fc1505b54 | 72 | char_counter = 1; |
mvargas_dtk | 0:d74fc1505b54 | 73 | z=0; |
mvargas_dtk | 0:d74fc1505b54 | 74 | begin = 1; |
mvargas_dtk | 0:d74fc1505b54 | 75 | } else { |
mvargas_dtk | 0:d74fc1505b54 | 76 | char_counter++; |
mvargas_dtk | 0:d74fc1505b54 | 77 | } |
mvargas_dtk | 0:d74fc1505b54 | 78 | if ((char_counter == char_swstatus) && begin) { |
mvargas_dtk | 0:d74fc1505b54 | 79 | sw[0] = incoming_char; |
mvargas_dtk | 0:d74fc1505b54 | 80 | } else if ((char_counter == char_hwstatus) && begin) { |
mvargas_dtk | 0:d74fc1505b54 | 81 | hw[0] = incoming_char; |
mvargas_dtk | 0:d74fc1505b54 | 82 | } else if ((char_counter >= char_fuel) && (char_counter <= char_fuel_limit) && begin) { |
mvargas_dtk | 0:d74fc1505b54 | 83 | nivel[z] = incoming_char; |
mvargas_dtk | 0:d74fc1505b54 | 84 | z++; |
mvargas_dtk | 0:d74fc1505b54 | 85 | } |
mvargas_dtk | 0:d74fc1505b54 | 86 | } |
mvargas_dtk | 0:d74fc1505b54 | 87 | |
mvargas_dtk | 0:d74fc1505b54 | 88 | if (begin) { |
mvargas_dtk | 0:d74fc1505b54 | 89 | return (1); |
mvargas_dtk | 0:d74fc1505b54 | 90 | } else { |
mvargas_dtk | 0:d74fc1505b54 | 91 | return (0); |
mvargas_dtk | 0:d74fc1505b54 | 92 | } |
mvargas_dtk | 0:d74fc1505b54 | 93 | } |
mvargas_dtk | 0:d74fc1505b54 | 94 | |
mvargas_dtk | 0:d74fc1505b54 | 95 | |
mvargas_dtk | 0:d74fc1505b54 | 96 | |
mvargas_dtk | 0:d74fc1505b54 | 97 | int ufs270_calcFL(BufferedSerial *puerto_data, char nivel[6], char hw[2], char sw[2]) |
mvargas_dtk | 0:d74fc1505b54 | 98 | { |
mvargas_dtk | 0:d74fc1505b54 | 99 | /* Descripción de la función. |
mvargas_dtk | 0:d74fc1505b54 | 100 | |
mvargas_dtk | 0:d74fc1505b54 | 101 | CALCULATE FUEL LEVEL |
mvargas_dtk | 0:d74fc1505b54 | 102 | |
mvargas_dtk | 0:d74fc1505b54 | 103 | Esta función recibe un puerto serial Buffered en el que se recibe la trama |
mvargas_dtk | 0:d74fc1505b54 | 104 | *QL,411D,01,01580,02D0,2205,01551,null# |
mvargas_dtk | 0:d74fc1505b54 | 105 | |
mvargas_dtk | 0:d74fc1505b54 | 106 | +-------------------------------------------------------+ |
mvargas_dtk | 0:d74fc1505b54 | 107 | | PARAMETER | LENGHT | EXAMPLE | DESCRIPTION | |
mvargas_dtk | 0:d74fc1505b54 | 108 | +----------------------+--------+---------+-------------+ |
mvargas_dtk | 0:d74fc1505b54 | 109 | | HEADER | 3 | *QL, | | |
mvargas_dtk | 0:d74fc1505b54 | 110 | | PROTOCOL | 1 | 4 | | |
mvargas_dtk | 0:d74fc1505b54 | 111 | | FIRMWARE | 2 | 11 | | |
mvargas_dtk | 0:d74fc1505b54 | 112 | | HARDWARE | 1 | D, | | |
mvargas_dtk | 0:d74fc1505b54 | 113 | | RESERVED | 2 | 01, | | |
mvargas_dtk | 0:d74fc1505b54 | 114 | | CALCULATE FUEL LEVEL | 5 | 01580, | Unit 0.1 mm | |
mvargas_dtk | 0:d74fc1505b54 | 115 | | SIGNAL STRENG | 2 | 02 | | |
mvargas_dtk | 0:d74fc1505b54 | 116 | | SOFTWARE STATUS CODE | 1 | D | | |
mvargas_dtk | 0:d74fc1505b54 | 117 | | HARDWARE FAULT CODE | 1 | 0, | | |
mvargas_dtk | 0:d74fc1505b54 | 118 | | RESERVED | 4 | 2205, | | |
mvargas_dtk | 0:d74fc1505b54 | 119 | | REAL TIME FUEL LEVEL | 5 | 01551, | Unit 0.1 mm | |
mvargas_dtk | 0:d74fc1505b54 | 120 | | RESERVED | 4 | null | | |
mvargas_dtk | 0:d74fc1505b54 | 121 | | TAIL | 1 | # | | |
mvargas_dtk | 0:d74fc1505b54 | 122 | +----------------------+--------+---------+-------------+ |
mvargas_dtk | 0:d74fc1505b54 | 123 | |
mvargas_dtk | 0:d74fc1505b54 | 124 | Se lee caracter por caracter, al encontrar un asterisco se inicia el conteo |
mvargas_dtk | 0:d74fc1505b54 | 125 | de caracteres, aprovechando que la longitud de la trama es fija se extrae la |
mvargas_dtk | 0:d74fc1505b54 | 126 | información de nivel de combustible en base al contador de caracteres, también |
mvargas_dtk | 0:d74fc1505b54 | 127 | se extrae el estatus de software y hardware. |
mvargas_dtk | 0:d74fc1505b54 | 128 | |
mvargas_dtk | 0:d74fc1505b54 | 129 | Si existe información en puerto Serial y es legible se retorna 1. |
mvargas_dtk | 0:d74fc1505b54 | 130 | Si no existe información para leer en el puerto Serial se retorna 0. |
mvargas_dtk | 0:d74fc1505b54 | 131 | */ |
mvargas_dtk | 0:d74fc1505b54 | 132 | char ufs270_begin = '*'; |
mvargas_dtk | 0:d74fc1505b54 | 133 | int char_fuel = 13; |
mvargas_dtk | 0:d74fc1505b54 | 134 | int char_fuel_limit = 17; |
mvargas_dtk | 0:d74fc1505b54 | 135 | int char_swstatus = 21; |
mvargas_dtk | 0:d74fc1505b54 | 136 | int char_hwstatus = 22; |
mvargas_dtk | 0:d74fc1505b54 | 137 | |
mvargas_dtk | 0:d74fc1505b54 | 138 | int char_counter = 0; |
mvargas_dtk | 0:d74fc1505b54 | 139 | int z = 0; |
mvargas_dtk | 0:d74fc1505b54 | 140 | int begin = 0; |
mvargas_dtk | 0:d74fc1505b54 | 141 | |
mvargas_dtk | 0:d74fc1505b54 | 142 | if (puerto_data -> readable()) { |
mvargas_dtk | 0:d74fc1505b54 | 143 | while (puerto_data -> readable()) { |
mvargas_dtk | 0:d74fc1505b54 | 144 | // If the character on the |
mvargas_dtk | 0:d74fc1505b54 | 145 | char incoming_char = puerto_data -> getc(); |
mvargas_dtk | 0:d74fc1505b54 | 146 | if (incoming_char == ufs270_begin) { |
mvargas_dtk | 0:d74fc1505b54 | 147 | char_counter = 1; |
mvargas_dtk | 0:d74fc1505b54 | 148 | z=0; |
mvargas_dtk | 0:d74fc1505b54 | 149 | begin = 1; |
mvargas_dtk | 0:d74fc1505b54 | 150 | } else { |
mvargas_dtk | 0:d74fc1505b54 | 151 | char_counter++; |
mvargas_dtk | 0:d74fc1505b54 | 152 | } |
mvargas_dtk | 0:d74fc1505b54 | 153 | if ((char_counter >= char_fuel) && (char_counter <= char_fuel_limit) && begin) { |
mvargas_dtk | 0:d74fc1505b54 | 154 | nivel[z] = incoming_char; |
mvargas_dtk | 0:d74fc1505b54 | 155 | z++; |
mvargas_dtk | 0:d74fc1505b54 | 156 | } else if ((char_counter == char_swstatus) && begin) { |
mvargas_dtk | 0:d74fc1505b54 | 157 | sw[0] = incoming_char; |
mvargas_dtk | 0:d74fc1505b54 | 158 | } else if ((char_counter == char_hwstatus) && begin) { |
mvargas_dtk | 0:d74fc1505b54 | 159 | hw[0] = incoming_char; |
mvargas_dtk | 0:d74fc1505b54 | 160 | } |
mvargas_dtk | 0:d74fc1505b54 | 161 | } |
mvargas_dtk | 0:d74fc1505b54 | 162 | return (1); |
mvargas_dtk | 0:d74fc1505b54 | 163 | } else { |
mvargas_dtk | 0:d74fc1505b54 | 164 | return (0); |
mvargas_dtk | 0:d74fc1505b54 | 165 | } |
mvargas_dtk | 0:d74fc1505b54 | 166 | } |