{"id":4086,"date":"2023-07-27T05:29:18","date_gmt":"2023-07-27T10:29:18","guid":{"rendered":"http:\/\/blog.espol.edu.ec\/girni\/?p=4086"},"modified":"2025-06-20T11:48:00","modified_gmt":"2025-06-20T16:48:00","slug":"lorawan-pluviometro-archivo-ino","status":"publish","type":"post","link":"https:\/\/blog.espol.edu.ec\/girni\/lorawan-pluviometro-archivo-ino\/","title":{"rendered":"LoRaWan - Pluviometro Archivo.ino"},"content":{"rendered":"<p>Las instrucciones para control del pluvi\u00f3metro y sensores complementarios se encuentran segmentadas por bloques:<\/p>\n<ul>\n<li>Bloque principal<\/li>\n<li>Sensores<\/li>\n<li>Env\u00edo de tramas<\/li>\n<li>Recepci\u00f3n de tramas<\/li>\n<\/ul>\n<p>[ <a href=\"#sensores\">sensores<\/a> ] [ <a href=\"#envia\">env\u00eda<\/a> ] [ <a href=\"#recibe\">recibe<\/a> ] [ <a href=\"#principal\">principal<\/a> ]<br \/>\n<a id=\"sensores\"><\/a>...<\/p>\n<h2>Sensores<\/h2>\n<p>El bloque de sensores se simplifica por partes de control y comunicaci\u00f3n acorde al\u00a0 tipo de sensor:<\/p>\n<ul>\n<li>pulsos: Pluvi\u00f3metro<\/li>\n<li>Anal\u00f3gicos: bater\u00eda<\/li>\n<li>I2C: humedad, temperatura y presi\u00f3n atmosf\u00e9rica<\/li>\n<\/ul>\n<h3>Pulsos: pluvi\u00f3metro<\/h3>\n<p>El pluvi\u00f3metro se centra en medir el vaciado de la \"doble cubeta basculante\".<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/Pluviometro_CubetasBaculantes.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-4111 alignright\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/Pluviometro_CubetasBaculantes.png\" alt=\"Doble Cubeta Basculante\" width=\"283\" height=\"215\" \/><\/a>Para la detecci\u00f3n se usa un interruptor magn\u00e9tico que marca el cambio de estado mediante un pulso (<code>pulse<\/code>) conectado al pin asignado (<code>pluvioPin<\/code>). Para que la detecci\u00f3n sea independiente del estado del dispositivo se usa una interrupci\u00f3n de instrucciones (<code>pulse_tip<\/code>)\u00a0 que cuenta el pulso (<code>pulse<\/code>) en flanco de subida (<code>RISING<\/code>)y marca el evento (<code>pulse_flag<\/code>).<\/p>\n<pre>attachInterrupt(pluvioPin, pulse_tip, RISING);<\/pre>\n<p>El dispositivo cuenta\u00a0 los pulsos generados durante un minuto\u00a0 (<code>sample_period<\/code>) y los almacena en una lista (<code>pulse_list<\/code>) hasta la transmisi\u00f3n de los datos\u00a0 hacia el gateway LoRa.<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/Pluviometro_pulse_tip01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-4113 size-full aligncenter\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/Pluviometro_pulse_tip01.png\" alt=\"pulse_tip muestreo\" width=\"730\" height=\"181\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/Pluviometro_pulse_tip01.png 730w, https:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/Pluviometro_pulse_tip01-300x74.png 300w\" sizes=\"auto, (max-width: 730px) 100vw, 730px\" \/><\/a><\/p>\n<h3>Anal\u00f3gicos: Bater\u00eda<\/h3>\n<p>El sensor de estado de bater\u00eda es un ADC que toma una lectura del estado de la bater\u00eda antes de cada transmisi\u00f3n LoRa.<\/p>\n<h3>I2C: humedad, temperatura y presi\u00f3n atmosf\u00e9rica<\/h3>\n<p>Los sensores de humedad, temperatura y presi\u00f3n son de tipo I2C que se activan solo al ser le\u00eddos en cada ciclo de transmisi\u00f3n mediante el pin\u00a0<code>Vext<\/code>, Posterior a la lectura apagan para optimizar el ahorro de energ\u00eda.<\/p>\n<p>Antes de cada lectura, se realiza una verificaci\u00f3n de estado de conexi\u00f3n al sensor optimizando el tiempo de \u00e9ste proceso en caso de fallas del sensor expuesto a condiciones ambientales.<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroSensores01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-4089 size-full\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroSensores01.png\" alt=\"LoRaWan pluviometro sensores bloque\" width=\"894\" height=\"113\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroSensores01.png 894w, https:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroSensores01-300x38.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroSensores01-768x97.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<pre><span style=\"color: #434f54\">\/\/ sensors block<\/span>\r\n<span style=\"color: #434f54\">\/\/ pluviometer pulse counter at interrupt<\/span>\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #000000\">pulse_tip<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">pulse<\/span><span style=\"color: #434f54\">&lt;=<\/span><span style=\"color: #000000\">255<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span><span style=\"color: #000000\">pulse<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">pulse<\/span> <span style=\"color: #434f54\">+<\/span> <span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #000000\">}<\/span>\r\n \u00a0<span style=\"color: #000000\">pulse_flag<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #000000\">}<\/span>\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #000000\">pulse_check<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">pulse_flag<\/span><span style=\"color: #434f54\">==<\/span><span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">pulse<\/span><span style=\"color: #434f54\">&gt;<\/span><span style=\"color: #000000\">255<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span><span style=\"color: #000000\">pulse<\/span><span style=\"color: #434f54\">=<\/span><span style=\"color: #000000\">255<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #000000\">}<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">pulse_flag<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">tipfree<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">serial_msg<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\"_|_: \"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span><b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">pulse<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">}<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">turnOnRGB<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">128<\/span><span style=\"color: #434f54\">,<\/span><span style=\"color: #000000\">200<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #000000\">turnOffRGB<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">}<\/span>\r\n<span style=\"color: #000000\">}<\/span>\r\n\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #000000\">minute_check<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0<span style=\"color: #00979c\">int<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span> \r\n \u00a0<span style=\"color: #000000\">pulse_list<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">i_minute<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">pulse<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">i_minute<\/span><span style=\"color: #434f54\">&gt;=<\/span><span style=\"color: #000000\">n_minute<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #434f54\">\/\/ pluviometer update<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #5e6d03\">for<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">&lt;<\/span> <span style=\"color: #000000\">n_minute<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">+<\/span> <span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">)<\/span> <span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #000000\">pluviometer<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">i<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">pulse_list<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">i<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #000000\">pulse_list<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">i<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">}<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">i_minute<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">loop_0<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">sensor_flag<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">tx_done<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">}<\/span>\r\n\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">serial_msg<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\"i_minute:\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span><b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">i_minute<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" ; pulse_list:\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #5e6d03\">for<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">&lt;<\/span> <span style=\"color: #000000\">n_minute<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">+<\/span> <span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">)<\/span> <span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" \"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span> <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">pulse_list<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">i<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">}<\/span>\r\n \u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" ; pluviometer:\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #5e6d03\">for<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">&lt;<\/span> <span style=\"color: #000000\">n_minute<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">+<\/span> <span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">)<\/span> <span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" \"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span> <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">pluviometer<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">i<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">}<\/span>\r\n \u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" ; tipfree \"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span> <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">tipfree<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">}<\/span>\r\n<span style=\"color: #000000\">}<\/span>\r\n\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #000000\">read_sensors<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0<span style=\"color: #000000\">batteryVoltage<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">getBatteryVoltage<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n \u00a0<span style=\"color: #434f54\">\/\/ sensors check i2c on<\/span>\r\n \u00a0<span style=\"color: #00979c\">byte<\/span> <span style=\"color: #000000\">sensor_error<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">address<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #d35400\">digitalWrite<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">Vext<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #00979c\">LOW<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #d35400\">delay<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">300<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Wire<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">begin<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\r\n \u00a0<span style=\"color: #000000\">humitemp_active<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Wire<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">beginTransmission<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">0x40<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">sensor_error<\/span> <span style=\"color: #434f54\">=<\/span> <b><span style=\"color: #d35400\">Wire<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">endTransmission<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">sensor_error<\/span> <span style=\"color: #434f54\">==<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span><span style=\"color: #000000\">humitemp_active<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #000000\">}<\/span>\r\n\r\n \u00a0<span style=\"color: #000000\">prestemp_active<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Wire<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">beginTransmission<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">0x77<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">sensor_error<\/span> <span style=\"color: #434f54\">=<\/span> <b><span style=\"color: #d35400\">Wire<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">endTransmission<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">sensor_error<\/span> <span style=\"color: #434f54\">==<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span><span style=\"color: #000000\">prestemp_active<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #000000\">}<\/span>\r\n\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">humitemp_active<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span><span style=\"color: #000000\">hdc1080<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">begin<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">0x40<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #000000\">}<\/span>\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">prestemp_active<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span><span style=\"color: #000000\">bmp<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">begin<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #000000\">}<\/span>\r\n \u00a0\u00a0\u00a0\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">humitemp_active<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">ht_temp<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">hdc1080<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">readTemperature<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">ht_humi<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">hdc1080<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #000000\">readHumidity<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">}<\/span>\r\n\r\n \u00a0<span style=\"color: #00979c\">float<\/span> <span style=\"color: #000000\">bar_alti<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">bar_sea_pres<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">bar_sea_alt<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">prestemp_active<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">bar_temp<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">bmp<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">readTemperature<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">bar_pres<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">bmp<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #000000\">readPressure<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">bar_alti<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">bmp<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #000000\">readAltitude<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">bar_sea_pres<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">bmp<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #000000\">readSealevelPressure<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">bar_sea_alt<\/span> \u00a0<span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">bmp<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #000000\">readAltitude<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">100800<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">}<\/span>\r\n\r\n \u00a0<span style=\"color: #434f54\">\/\/ sensors I2C off<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Wire<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">end<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #d35400\">digitalWrite<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">Vext<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #00979c\">HIGH<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">serial_msg<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\"Battery = \"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span><b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">batteryVoltage<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0\r\n \u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" ; --- sensor \"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\"hum_temp: \"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span> <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">humitemp_active<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" ; bar_temp: \"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span> <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">prestemp_active<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0\r\n \u00a0\u00a0\u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">humitemp_active<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\"HDC1080 Temperature = \"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">ht_temp<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span> <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" C ; Humidity = \"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">ht_humi<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span><b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" %\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">}<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">prestemp_active<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\"BMP180 \u00a0Temperature = \"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">bar_temp<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span><b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" C\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" \u00a0Pressure = \u00a0\u00a0\u00a0\u00a0\u00a0\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">bar_pres<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span><b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" Pa ; Altitude = \"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">bar_alti<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span><b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" meters\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" \u00a0SeaLevel(calc)= \"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">bar_sea_pres<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span> <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" Pa ; Altitude = \"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">bar_sea_alt<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span> <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" meters\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">}<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\"\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">}<\/span>\r\n<span style=\"color: #000000\">}<\/span>\r\n\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #000000\">onSleep<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\"\\n \u00a0i_minute:\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span><b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">i_minute<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">printf<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" ;Going into lowpower mode, %d ms later wake up.\\r\\n\"<\/span><span style=\"color: #434f54\">,<\/span><span style=\"color: #000000\">timetillwakeup<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">lowpower<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/timetillwakeup ms later wake up;<\/span>\r\n \u00a0<span style=\"color: #000000\">timetillwakeup<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">sample_period<\/span><span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">1000<\/span> <span style=\"color: #434f54\">-<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #d35400\">millis<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #434f54\">-<\/span><span style=\"color: #000000\">sample_ti<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">TimerSetValue<\/span><span style=\"color: #000000\">(<\/span> <span style=\"color: #434f54\">&amp;<\/span><span style=\"color: #000000\">wakeUp<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">timetillwakeup<\/span> <span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">TimerStart<\/span><span style=\"color: #000000\">(<\/span> <span style=\"color: #434f54\">&amp;<\/span><span style=\"color: #000000\">wakeUp<\/span> <span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #000000\">}<\/span>\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #000000\">onWakeUp<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" \u00a0... Woke up by time\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #434f54\">\/\/, %d ms later into lowpower mode.\\r\\n\",timetillsleep);<\/span>\r\n\t<span style=\"color: #000000\">lowpower<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">sleep_flag<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">sleep_done<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">;<\/span>\r\n\t<span style=\"color: #434f54\">\/\/timetillsleep ms later into lowpower mode;<\/span>\r\n\t<span style=\"color: #434f54\">\/\/TimerSetValue( &amp;sleep, timetillsleep );<\/span>\r\n\t<span style=\"color: #434f54\">\/\/TimerStart( &amp;sleep );<\/span>\r\n<span style=\"color: #000000\">}<\/span>\r\n<\/pre>\n<p>Adicionalmente existen dos procedimientos usados para el control del modo de ahorro de energ\u00eda: <code>onSleep()<\/code> y <code>onWakeup()<\/code>, que junto a la instrucci\u00f3n <code>lowPowerHandler()<\/code> permiten un mayor ahorro de energ\u00eda en los ciclos donde no se han producido pulsos del pluvi\u00f3metro. Esto minimiza el uso de bater\u00eda ante los periodos sin lluvia y manteniendo a\u00fan el registro por minuto durante largos periodos.<\/p>\n<p>B\u00e1sicamente, se usa el modo de ahorro de energ\u00eda si no han ocurrido eventos de conteo del pluvi\u00f3metro durante al menos un ciclo de <code>n_minute<\/code>, caso contrario se mantiene el controlador activo.<\/p>\n<p>[ <a href=\"#sensores\">sensores<\/a> ] [ <a href=\"#envia\">env\u00eda<\/a> ] [ <a href=\"#recibe\">recibe<\/a> ] [ <a href=\"#principal\">principal<\/a> ]<br \/>\n<a id=\"envia\"><\/a>...<\/p>\n<h2>LoRaWan - Envia trama<\/h2>\n<p>La trama se configura usando los par\u00e1metros obtenidos en el dispositivo para cada sensor.<\/p>\n<ul>\n<li>Rssi Downlink (1 byte)<\/li>\n<li>Snr Downlink (1 byte)<\/li>\n<li>Datarate Downlink (1 byte)<\/li>\n<li>Voltaje de bater\u00eda (2 bytes)<\/li>\n<li>sensores (15 bytes)<\/li>\n<\/ul>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroEnvia01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4091\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroEnvia01.png\" alt=\"LoRaWan pluviometro envia\" width=\"895\" height=\"115\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroEnvia01.png 895w, https:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroEnvia01-300x39.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroEnvia01-768x99.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<pre><span style=\"color: #95a5a6\">\/* Prepares the payload of the frame *\/<\/span>\r\n<span style=\"color: #00979c\">static<\/span> <span style=\"color: #00979c\">void<\/span> <span style=\"color: #000000\">prepareTxFrame<\/span><span style=\"color: #000000\">(<\/span> <span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">port<\/span> <span style=\"color: #000000\">)<\/span> <span style=\"color: #000000\">{<\/span>\r\n \u00a0<span style=\"color: #00979c\">unsigned<\/span> <span style=\"color: #00979c\">char<\/span> <span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">puc<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #00979c\">signed<\/span> <span style=\"color: #00979c\">char<\/span> <span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">pucs<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ trama<\/span>\r\n \u00a0<span style=\"color: #000000\">appDataSize<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">15<\/span> <span style=\"color: #434f54\">+<\/span> <span style=\"color: #000000\">n_minute<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #434f54\">\/\/ 15+pluvio_list size<\/span>\r\n \u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">ack_rssi<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #434f54\">\/\/Ack leido en dispositivo<\/span>\r\n \u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">ack_snr<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">2<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">ack_datarate<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">3<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #00979c\">uint8_t<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">batteryVoltage<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">4<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #00979c\">uint8_t<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">batteryVoltage<\/span><span style=\"color: #434f54\">&gt;&gt;<\/span><span style=\"color: #000000\">8<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n \u00a0<span style=\"color: #434f54\">\/\/ convierte float a bytes<\/span>\r\n \u00a0<span style=\"color: #00979c\">int<\/span> <span style=\"color: #000000\">ht_temp_int<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #d35400\">round<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">ht_temp<\/span><span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">100<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">pucs<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #00979c\">signed<\/span> <span style=\"color: #00979c\">char<\/span> <span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #434f54\">&amp;<\/span><span style=\"color: #000000\">ht_temp_int<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">5<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">pucs<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">6<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">pucs<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n \u00a0<span style=\"color: #434f54\">\/\/ convierte float a bytes<\/span>\r\n \u00a0<span style=\"color: #00979c\">int<\/span> <span style=\"color: #000000\">ht_humi_int<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #d35400\">round<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">ht_humi<\/span><span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">100<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">puc<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #00979c\">unsigned<\/span> <span style=\"color: #00979c\">char<\/span> <span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #434f54\">&amp;<\/span><span style=\"color: #000000\">ht_humi_int<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">7<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">puc<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">8<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">puc<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n \u00a0<span style=\"color: #434f54\">\/\/ convierte float a bytes<\/span>\r\n \u00a0<span style=\"color: #00979c\">int<\/span> <span style=\"color: #000000\">bar_temp_int<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #d35400\">round<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">bar_temp<\/span><span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">100<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">pucs<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #00979c\">signed<\/span> <span style=\"color: #00979c\">char<\/span> <span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #434f54\">&amp;<\/span><span style=\"color: #000000\">bar_temp_int<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">9<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">pucs<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">10<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">pucs<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n \u00a0<span style=\"color: #434f54\">\/\/ convierte float a bytes<\/span>\r\n \u00a0<span style=\"color: #000000\">puc<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #00979c\">unsigned<\/span> <span style=\"color: #00979c\">char<\/span> <span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #434f54\">&amp;<\/span><span style=\"color: #000000\">bar_pres<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">11<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">puc<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">12<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">puc<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">13<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">puc<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">2<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">14<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">puc<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">3<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n \u00a0<span style=\"color: #5e6d03\">for<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #00979c\">int<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">&lt;<\/span> <span style=\"color: #000000\">n_minute<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">+<\/span> <span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">)<\/span> <span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">appData<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">15<\/span><span style=\"color: #434f54\">+<\/span><span style=\"color: #000000\">i<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">pluviometer<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">i<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">}<\/span>\r\n\r\n \u00a0<span style=\"color: #434f54\">\/\/ if (serial_msg){<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0Serial.print(\"send pluviometer:\");<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0for (int i = 0; i &lt; n_minute; i = i + 1) {<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0\u00a0\u00a0Serial.print(\" \");<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0\u00a0\u00a0Serial.print(pluviometer[i]);<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0}<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0Serial.println(\"\");<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ }<\/span>\r\n \u00a0<span style=\"color: #5e6d03\">for<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #00979c\">int<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">&lt;<\/span> <span style=\"color: #000000\">n_minute<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">+<\/span> <span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">)<\/span> <span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">pluviometer<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">i<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #434f54\">=<\/span><span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">}<\/span>\r\n<span style=\"color: #000000\">}<\/span>\r\n\r\n<\/pre>\n<p>[ <a href=\"#sensores\">sensores<\/a> ] [ <a href=\"#envia\">env\u00eda<\/a> ] [ <a href=\"#recibe\">recibe<\/a> ] [ <a href=\"#principal\">principal<\/a> ]<br \/>\n<a id=\"recibe\"><\/a>...<\/p>\n<h2>LoRaWan - Recibe trama<\/h2>\n<p>Manejo de tramas recibidas por el dispositivo para control o recibo de recibidos (Ack)<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroRecibe01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4090\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroRecibe01.png\" alt=\"\" width=\"894\" height=\"119\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroRecibe01.png 894w, https:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroRecibe01-300x40.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroRecibe01-768x102.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<pre><span style=\"color: #434f54\">\/\/downlink data handle and downLink Ack Handle functions<\/span>\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #000000\">downLinkDataHandle<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">McpsIndication_t<\/span> <span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">mcpsIndication<\/span><span style=\"color: #000000\">)<\/span> <span style=\"color: #000000\">{<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ revisa parametros<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\"\\nLleg\u00f3 un mensaje para dispositivo...\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ Serial.print(\"Rssi: \");<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ Serial.println(mcpsIndication-&gt;Rssi);<\/span>\r\n\r\n \u00a0<span style=\"color: #434f54\">\/\/ Serial.printf(\"+REV DATA:%s,RXSIZE %d,PORT %d\\r\\n\",<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mcpsIndication-&gt;RxSlot ? \"RXWIN2\" : \"RXWIN1\",<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0mcpsIndication-&gt;BufferSize, mcpsIndication-&gt;Port);<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ Serial.print(\"+REV DATA:\");<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ for (uint8_t i = 0; i &lt; mcpsIndication-&gt;BufferSize; i++) {<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0Serial.printf(\"%02X\", mcpsIndication-&gt;Buffer[i]);<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ }<\/span>\r\n\r\n \u00a0<span style=\"color: #434f54\">\/\/ parametros de recepcion<\/span>\r\n \u00a0<span style=\"color: #000000\">ack_rssi<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">uint8_t<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #d35400\">abs<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">mcpsIndication<\/span><span style=\"color: #434f54\">-<\/span><span style=\"color: #434f54\">&gt;<\/span><span style=\"color: #000000\">Rssi<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">ack_snr<\/span> \u00a0<span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">uint8_t<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">mcpsIndication<\/span><span style=\"color: #434f54\">-<\/span><span style=\"color: #434f54\">&gt;<\/span><span style=\"color: #000000\">Snr<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">ack_datarate<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">uint8_t<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">mcpsIndication<\/span><span style=\"color: #434f54\">-<\/span><span style=\"color: #434f54\">&gt;<\/span><span style=\"color: #000000\">RxDoneDatarate<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ recibido de trama<\/span>\r\n \u00a0<span style=\"color: #000000\">Up_rssi<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">uint8_t<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">mcpsIndication<\/span><span style=\"color: #434f54\">-<\/span><span style=\"color: #434f54\">&gt;<\/span><span style=\"color: #000000\">Buffer<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n \u00a0<span style=\"color: #434f54\">\/\/<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\"Rx ack_Rssi:-\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span> <b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">ack_rssi<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\", ack_Snr:\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span><b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">ack_snr<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\", ack_Datarate: \"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span><b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">ack_datarate<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" Up_rssi:\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">print<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #434f54\">-<\/span><span style=\"color: #000000\">1<\/span><span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">Up_rssi<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">printf<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" +REV DATA:%s,RXSIZE %d,PORT %d\\r\"<\/span><span style=\"color: #434f54\">,<\/span><span style=\"color: #000000\">mcpsIndication<\/span><span style=\"color: #434f54\">-<\/span><span style=\"color: #434f54\">&gt;<\/span><span style=\"color: #000000\">RxSlot<\/span><span style=\"color: #434f54\">?<\/span><span style=\"color: #005c5f\">\"RXWIN2\"<\/span><span style=\"color: #434f54\">:<\/span><span style=\"color: #005c5f\">\"RXWIN1\"<\/span><span style=\"color: #434f54\">,<\/span><span style=\"color: #000000\">mcpsIndication<\/span><span style=\"color: #434f54\">-<\/span><span style=\"color: #434f54\">&gt;<\/span><span style=\"color: #000000\">BufferSize<\/span><span style=\"color: #434f54\">,<\/span><span style=\"color: #000000\">mcpsIndication<\/span><span style=\"color: #434f54\">-<\/span><span style=\"color: #434f54\">&gt;<\/span><span style=\"color: #000000\">Port<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #000000\">}<\/span>\r\n\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #000000\">downLinkAckHandle<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">McpsIndication_t<\/span> <span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">mcpsIndication<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0<span style=\"color: #000000\">ack_rssi<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">uint8_t<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #d35400\">abs<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">mcpsIndication<\/span><span style=\"color: #434f54\">-<\/span><span style=\"color: #434f54\">&gt;<\/span><span style=\"color: #000000\">Rssi<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">ack_snr<\/span> \u00a0<span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">uint8_t<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">mcpsIndication<\/span><span style=\"color: #434f54\">-<\/span><span style=\"color: #434f54\">&gt;<\/span><span style=\"color: #000000\">Snr<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">ack_datarate<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">uint8_t<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">mcpsIndication<\/span><span style=\"color: #434f54\">-<\/span><span style=\"color: #434f54\">&gt;<\/span><span style=\"color: #000000\">RxDoneDatarate<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">tx_done<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ if (serial_msg){<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0Serial.println(' ');<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0Serial.print(\" ack received(rssi,snr,datarate): -\");<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0Serial.print(ack_rssi);Serial.print(\" ,\");<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0Serial.print(ack_snr);Serial.print(\" ,\");<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0Serial.println(ack_datarate);<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/ }<\/span>\r\n<span style=\"color: #000000\">}<\/span>\r\n\r\n<\/pre>\n<p>[ <a href=\"#sensores\">sensores<\/a> ] [ <a href=\"#envia\">env\u00eda<\/a> ] [ <a href=\"#recibe\">recibe<\/a> ] [ <a href=\"#principal\">principal<\/a> ]<br \/>\n<a id=\"principal\"><\/a>...<\/p>\n<h2>LoRaWan - Bloque principal<\/h2>\n<p>El bloque principal se basa en el esquema b\u00e1sico de LoRaWan usado para sensores, cambiando la parte de ahorro de energ\u00eda entre transmisiones DEVICE_STATE_SLEEP a una controlada por periodos de muestreo del pluvi\u00f3metro con los procedimientos onSleep() y onWakeUp() descritos en la parte de sensores. Se controla las actividades de Lectura de sensores y modos de ahorro de energ\u00eda por la sucesi\u00f3n de cada evento.<\/p>\n<p><a href=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroPrincipal01.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-4092\" src=\"http:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroPrincipal01.png\" alt=\"LoRaWan pluviometro bloque principal\" width=\"895\" height=\"118\" srcset=\"https:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroPrincipal01.png 895w, https:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroPrincipal01-300x40.png 300w, https:\/\/blog.espol.edu.ec\/girni\/files\/2023\/07\/LoRaWan_PluviometroPrincipal01-768x101.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><\/p>\n<pre><span style=\"color: #434f54\">\/\/ LoRaWan Pluviometer, temperature, humidity and barometric pressure<\/span>\r\n<span style=\"color: #434f54\">\/\/ 2023 April<\/span>\r\n<span style=\"color: #434f54\">\/\/ <\/span><u><span style=\"color: #434f54\">http:\/\/blog.espol.edu.ec\/girni\/lorawan-pluviometro-ino\/<\/span><\/u>\r\n<span style=\"color: #5e6d03\">#include<\/span> <span style=\"color: #005c5f\">\"LoRaWan_APP.h\"<\/span>\r\n<span style=\"color: #5e6d03\">#include<\/span> <span style=\"color: #005c5f\">\"Arduino.h\"<\/span>\r\n<span style=\"color: #5e6d03\">#include<\/span> <span style=\"color: #434f54\">&lt;<\/span><b><span style=\"color: #d35400\">Wire<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #000000\">h<\/span><span style=\"color: #434f54\">&gt;<\/span>\r\n<span style=\"color: #5e6d03\">#include<\/span> <span style=\"color: #434f54\">&lt;<\/span><span style=\"color: #000000\">HDC1080<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #000000\">h<\/span><span style=\"color: #434f54\">&gt;<\/span>\r\n<span style=\"color: #5e6d03\">#include<\/span> <span style=\"color: #434f54\">&lt;<\/span><span style=\"color: #000000\">BMP180<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #000000\">h<\/span><span style=\"color: #434f54\">&gt;<\/span>\r\n\r\n<span style=\"color: #95a5a6\">\/* set LoraWan_RGB to Active,the RGB active in loraWan<\/span>\r\n<span style=\"color: #95a5a6\"> * red \u00a0\u00a0|sending; \u00a0\u00a0purple | joined done;<\/span>\r\n<span style=\"color: #95a5a6\"> * blue \u00a0|RxWindow1; yellow | means RxWindow2;<\/span>\r\n<span style=\"color: #95a5a6\"> * green | received done;<\/span>\r\n<span style=\"color: #95a5a6\"> *\/<\/span>\r\n<span style=\"color: #95a5a6\">\/* LoRaWan: OTAA parameters*\/<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">devEui<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">{<\/span> <span style=\"color: #000000\">0x2e<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x4f<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xa4<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xdd<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xf0<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x2f<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x06<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xeb<\/span> <span style=\"color: #000000\">}<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">appEui<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">{<\/span> <span style=\"color: #000000\">0x00<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x00<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x00<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x00<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x00<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x00<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x00<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x00<\/span> <span style=\"color: #000000\">}<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">appKey<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">{<\/span> <span style=\"color: #000000\">0x13<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xb9<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xd1<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x66<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x30<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x2a<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xeb<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x53<\/span><span style=\"color: #434f54\">,<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #000000\">0x46<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x6c<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x0d<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x2d<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xa2<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x31<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x6b<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xf0<\/span> <span style=\"color: #000000\">}<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #95a5a6\">\/* ABP parameters*\/<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">nwkSKey<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">{<\/span> <span style=\"color: #000000\">0xe2<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x28<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x89<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xe0<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x73<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x22<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xcb<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xd1<\/span><span style=\"color: #434f54\">,<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #000000\">0xa7<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x95<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x64<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x2e<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xdb<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xe5<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x94<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x42<\/span> <span style=\"color: #000000\">}<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">appSKey<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">{<\/span> <span style=\"color: #000000\">0x1a<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xfc<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x10<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xc5<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x6f<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xb8<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xba<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x86<\/span><span style=\"color: #434f54\">,<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #000000\">0x0d<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xf3<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xcf<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xc5<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xd2<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0xdb<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">0x44<\/span> <span style=\"color: #434f54\">,<\/span><span style=\"color: #000000\">0xb8<\/span> <span style=\"color: #000000\">}<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">uint32_t<\/span> <span style=\"color: #000000\">devAddr<\/span> <span style=\"color: #434f54\">=<\/span> \u00a0<span style=\"color: #000000\">(<\/span> <span style=\"color: #00979c\">uint32_t<\/span> <span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">0x01d06174<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #95a5a6\">\/*LoraWan channelsmask, default channels 0-7*\/<\/span> \r\n<span style=\"color: #00979c\">uint16_t<\/span> <span style=\"color: #000000\">userChannelsMask<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">6<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #434f54\">=<\/span><span style=\"color: #000000\">{<\/span> <span style=\"color: #000000\">0x00FF<\/span><span style=\"color: #434f54\">,<\/span><span style=\"color: #000000\">0x0000<\/span><span style=\"color: #434f54\">,<\/span><span style=\"color: #000000\">0x0000<\/span><span style=\"color: #434f54\">,<\/span><span style=\"color: #000000\">0x0000<\/span><span style=\"color: #434f54\">,<\/span><span style=\"color: #000000\">0x0000<\/span><span style=\"color: #434f54\">,<\/span><span style=\"color: #000000\">0x0000<\/span> <span style=\"color: #000000\">}<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n<span style=\"color: #95a5a6\">\/*Select in arduino IDE tools*\/<\/span>\r\n<span style=\"color: #000000\">LoRaMacRegion_t<\/span> <span style=\"color: #000000\">loraWanRegion<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">ACTIVE_REGION<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #000000\">DeviceClass_t<\/span> <span style=\"color: #000000\">loraWanClass<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">LORAWAN_CLASS<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">overTheAirActivation<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">LORAWAN_NETMODE<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">loraWanAdr<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">LORAWAN_ADR<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">keepNet<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">LORAWAN_NET_RESERVE<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">isTxConfirmed<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">LORAWAN_UPLINKMODE<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n<span style=\"color: #434f54\">\/\/ sample period<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">sample_min<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span> \r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">sample_seg<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">5<\/span><span style=\"color: #000000\">;<\/span> \r\n<span style=\"color: #00979c\">uint32_t<\/span> <span style=\"color: #000000\">sample_period<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">sample_min<\/span><span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">60<\/span> <span style=\"color: #434f54\">+<\/span> <span style=\"color: #000000\">sample_seg<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n<span style=\"color: #00979c\">uint32_t<\/span> <span style=\"color: #000000\">appTxDutyCycle<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">sample_min<\/span><span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">60<\/span> <span style=\"color: #434f54\">+<\/span> <span style=\"color: #000000\">sample_seg<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">1000<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #434f54\">\/\/ min*seg*ms<\/span>\r\n\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">appPort<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">4<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #95a5a6\">\/* Application port *\/<\/span>\r\n<span style=\"color: #95a5a6\">\/* trials to transmit frame, if didn't receive ack.<\/span>\r\n<span style=\"color: #95a5a6\"> * The MAC performs a datarate adaptation,<\/span>\r\n<span style=\"color: #95a5a6\"> * Tx nb|Data Rate<\/span>\r\n<span style=\"color: #95a5a6\"> * -----|----------<\/span>\r\n<span style=\"color: #95a5a6\"> * 1 \u00a0\u00a0\u00a0|DR \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0* 5 \u00a0\u00a0\u00a0| max(DR-2,0)<\/span>\r\n<span style=\"color: #95a5a6\"> * 2 \u00a0\u00a0\u00a0|DR \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0* 6 \u00a0\u00a0\u00a0| max(DR-2,0)<\/span>\r\n<span style=\"color: #95a5a6\"> * 3 \u00a0\u00a0\u00a0|max(DR-1,0) \u00a0* 7 \u00a0\u00a0\u00a0| max(DR-3,0)<\/span>\r\n<span style=\"color: #95a5a6\"> * 4 \u00a0\u00a0\u00a0|max(DR-1,0) \u00a0* 8 \u00a0\u00a0\u00a0| max(DR-3,0)<\/span>\r\n<span style=\"color: #95a5a6\">*\/<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">confirmedNbTrials<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">4<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n<span style=\"color: #434f54\">\/\/ Ack reception parameters<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">ack_rssi<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">ack_snr<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">ack_datarate<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">Up_rssi<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n<span style=\"color: #434f54\">\/\/ serial print messages<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">serial_msg<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n<span style=\"color: #434f54\">\/\/ time variables and control check<\/span>\r\n<span style=\"color: #00979c\">unsigned<\/span> <span style=\"color: #00979c\">long<\/span> <span style=\"color: #000000\">sample_t0<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">unsigned<\/span> <span style=\"color: #00979c\">long<\/span> <span style=\"color: #000000\">sample_ti<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">unsigned<\/span> <span style=\"color: #00979c\">long<\/span> <span style=\"color: #000000\">sample_dt<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">pluvio_flag<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">sensor_flag<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">unsigned<\/span> <span style=\"color: #00979c\">long<\/span> <span style=\"color: #000000\">tx_t0<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">tx_flag<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">tx_done<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">tipfree<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">loop_0<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">sleep_flag<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">sleep_done<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">i_minute<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">const<\/span> <span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">n_minute<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">5<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">pulse_list<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">n_minute<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">pluviometer<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">n_minute<\/span><span style=\"color: #000000\">]<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">pulse<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">pulse_flag<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">const<\/span> <span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">pluvioPin<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">GPIO5<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n<span style=\"color: #5e6d03\">#define<\/span> <span style=\"color: #000000\">timetillsleep<\/span> <span style=\"color: #000000\">60<\/span><span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">60<\/span><span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">1000<\/span>\r\n<span style=\"color: #00979c\">int<\/span> <span style=\"color: #000000\">timetillwakeup<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">sample_period<\/span><span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">1000<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">static<\/span> <span style=\"color: #000000\">TimerEvent_t<\/span> <span style=\"color: #000000\">sleep<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">static<\/span> <span style=\"color: #000000\">TimerEvent_t<\/span> <span style=\"color: #000000\">wakeUp<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">uint8_t<\/span> <span style=\"color: #000000\">lowpower<\/span><span style=\"color: #434f54\">=<\/span><span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n<span style=\"color: #434f54\">\/\/sensors libraries<\/span>\r\n<span style=\"color: #000000\">HDC1080<\/span> <span style=\"color: #000000\">hdc1080<\/span><span style=\"color: #000000\">;<\/span> \u00a0<span style=\"color: #434f54\">\/\/ humidity and temperature sensor<\/span>\r\n<span style=\"color: #000000\">BMP085<\/span> <span style=\"color: #000000\">bmp<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #434f54\">\/\/ barometer and temperature sensor<\/span>\r\n\r\n<span style=\"color: #434f54\">\/\/ sensors I2C active check and value variables<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">humitemp_active<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">bool<\/span> <span style=\"color: #000000\">prestemp_active<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">float<\/span> <span style=\"color: #000000\">ht_temp<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">ht_humi<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #00979c\">float<\/span> <span style=\"color: #000000\">bar_temp<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">bar_pres<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n<span style=\"color: #00979c\">uint16_t<\/span> <span style=\"color: #000000\">batteryVoltage<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #5e6d03\">setup<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span> <span style=\"color: #000000\">{<\/span>\r\n \u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">begin<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">115200<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n<span style=\"color: #5e6d03\">#if<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">AT_SUPPORT<\/span><span style=\"color: #000000\">)<\/span>\r\n\t<span style=\"color: #000000\">enableAt<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #5e6d03\">#endif<\/span>\r\n\r\n \u00a0<span style=\"color: #434f54\">\/\/ OLED display status<\/span>\r\n \u00a0<span style=\"color: #434f54\">\/\/LoRaWAN.displayMcuInit();<\/span>\r\n\r\n \u00a0<span style=\"color: #d35400\">pinMode<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">pluvioPin<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #00979c\">INPUT<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #434f54\">\/\/OUTPUT_PULLUP);<\/span>\r\n \u00a0<span style=\"color: #d35400\">attachInterrupt<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">pluvioPin<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">pulse_tip<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #00979c\">RISING<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\r\n \u00a0<span style=\"color: #5e6d03\">for<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #00979c\">int<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">&lt;<\/span> <span style=\"color: #000000\">n_minute<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">i<\/span> <span style=\"color: #434f54\">+<\/span> <span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">)<\/span> <span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">pulse_list<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">i<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">pluviometer<\/span><span style=\"color: #000000\">[<\/span><span style=\"color: #000000\">i<\/span><span style=\"color: #000000\">]<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">}<\/span>\r\n \u00a0\r\n \u00a0<span style=\"color: #434f54\">\/\/ sensors I2C Vcc pin control<\/span>\r\n \u00a0<span style=\"color: #d35400\">pinMode<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">Vext<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #00979c\">OUTPUT<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">read_sensors<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n\r\n \u00a0<span style=\"color: #434f54\">\/\/ time variables iniciated<\/span>\r\n \u00a0<span style=\"color: #000000\">sample_t0<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #d35400\">millis<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">sample_ti<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">sample_t0<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">tx_t0<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">sample_t0<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\r\n \u00a0<span style=\"color: #000000\">deviceState<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">DEVICE_STATE_INIT<\/span><span style=\"color: #000000\">;<\/span>\r\n\t<span style=\"color: #000000\">LoRaWAN<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #000000\">ifskipjoin<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span> <span style=\"color: #434f54\">\/\/if joinned,skip<\/span>\r\n\r\n \u00a0<span style=\"color: #434f54\">\/\/ lowpower mode<\/span>\r\n \u00a0<span style=\"color: #000000\">Radio<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #000000\">Sleep<\/span><span style=\"color: #000000\">(<\/span> <span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">TimerInit<\/span><span style=\"color: #000000\">(<\/span> <span style=\"color: #434f54\">&amp;<\/span><span style=\"color: #000000\">sleep<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">onSleep<\/span> <span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">TimerInit<\/span><span style=\"color: #000000\">(<\/span> <span style=\"color: #434f54\">&amp;<\/span><span style=\"color: #000000\">wakeUp<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">onWakeUp<\/span> <span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">onWakeUp<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #000000\">}<\/span>\r\n\r\n<span style=\"color: #00979c\">void<\/span> <span style=\"color: #5e6d03\">loop<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span> <span style=\"color: #000000\">{<\/span>\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">lowpower<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span><span style=\"color: #000000\">lowPowerHandler<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #000000\">}<\/span>\r\n\r\n \u00a0<span style=\"color: #000000\">pulse_check<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">sample_t0<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #d35400\">millis<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">sample_dt<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #d35400\">abs<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">sample_t0<\/span><span style=\"color: #434f54\">-<\/span><span style=\"color: #000000\">sample_ti<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">sample_dt<\/span><span style=\"color: #434f54\">&gt;=<\/span><span style=\"color: #000000\">sample_period<\/span><span style=\"color: #434f54\">*<\/span><span style=\"color: #000000\">1000<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">sample_ti<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">sample_t0<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">i_minute<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">i_minute<\/span> <span style=\"color: #434f54\">+<\/span> <span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">pulse<\/span><span style=\"color: #434f54\">==<\/span><span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span> <span style=\"color: #434f54\">\/\/ tipfree counter do not overflow<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">tipfree<\/span><span style=\"color: #434f54\">&lt;=<\/span><span style=\"color: #000000\">250<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span><span style=\"color: #000000\">tipfree<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">tipfree<\/span> <span style=\"color: #434f54\">+<\/span> <span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #000000\">}<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">tipfree<\/span><span style=\"color: #434f54\">&gt;<\/span><span style=\"color: #000000\">250<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span><span style=\"color: #000000\">tipfree<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #000000\">}<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">}<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">pulse<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">0<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">minute_check<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0<span style=\"color: #000000\">}<\/span>\r\n \u00a0\r\n \u00a0<span style=\"color: #434f54\">\/\/ read I2C sensors at i_minute=0<\/span>\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">i_minute<\/span><span style=\"color: #434f54\">==<\/span><span style=\"color: #000000\">0<\/span> <span style=\"color: #434f54\">&amp;&amp;<\/span> <span style=\"color: #000000\">sensor_flag<\/span> <span style=\"color: #434f54\">==<\/span> <span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0<b><span style=\"color: #d35400\">Serial<\/span><\/b><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">println<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #005c5f\">\" \u00a0reading sensors ...\"<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">read_sensors<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">sensor_flag<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">}<\/span>\r\n\r\n \u00a0<span style=\"color: #434f54\">\/\/ tx check<\/span>\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">i_minute<\/span><span style=\"color: #434f54\">==<\/span><span style=\"color: #000000\">0<\/span> <span style=\"color: #434f54\">&amp;&amp;<\/span> <span style=\"color: #000000\">tx_flag<\/span><span style=\"color: #434f54\">==<\/span><span style=\"color: #00979c\">false<\/span> <span style=\"color: #434f54\">&amp;&amp;<\/span> <span style=\"color: #000000\">tx_done<\/span> <span style=\"color: #434f54\">==<\/span> <span style=\"color: #00979c\">false<\/span> <span style=\"color: #434f54\">&amp;&amp;<\/span> <span style=\"color: #000000\">loop_0<\/span><span style=\"color: #434f54\">==<\/span><span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">tx_t0<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">sample_t0<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">deviceState<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">DEVICE_STATE_SEND<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">tx_flag<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">tx_done<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">}<\/span>\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">i_minute<\/span> <span style=\"color: #434f54\">&gt;=<\/span> <span style=\"color: #000000\">n_minute<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span><span style=\"color: #000000\">tx_flag<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span><span style=\"color: #000000\">}<\/span>\r\n \u00a0\r\n \u00a0<span style=\"color: #434f54\">\/\/ sleep check<\/span>\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">i_minute<\/span><span style=\"color: #434f54\">==<\/span><span style=\"color: #000000\">0<\/span> <span style=\"color: #434f54\">&amp;&amp;<\/span> <span style=\"color: #000000\">tipfree<\/span><span style=\"color: #434f54\">&gt;=<\/span><span style=\"color: #000000\">n_minute<\/span> <span style=\"color: #434f54\">&amp;&amp;<\/span> <span style=\"color: #000000\">sleep_flag<\/span><span style=\"color: #434f54\">==<\/span><span style=\"color: #00979c\">false<\/span> <span style=\"color: #434f54\">&amp;&amp;<\/span> <span style=\"color: #000000\">sleep_done<\/span><span style=\"color: #434f54\">==<\/span><span style=\"color: #00979c\">true<\/span> <span style=\"color: #434f54\">&amp;&amp;<\/span> <span style=\"color: #000000\">tx_done<\/span><span style=\"color: #434f54\">==<\/span><span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">sleep_flag<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">sleep_done<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">lowpower<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #434f54\">\/\/timetillsleep ms later into lowpower mode;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">TimerSetValue<\/span><span style=\"color: #000000\">(<\/span> <span style=\"color: #434f54\">&amp;<\/span><span style=\"color: #000000\">sleep<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">1<\/span> <span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">TimerStart<\/span><span style=\"color: #000000\">(<\/span> <span style=\"color: #434f54\">&amp;<\/span><span style=\"color: #000000\">sleep<\/span> <span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">}<\/span>\r\n \u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">i_minute<\/span> <span style=\"color: #434f54\">&gt;<\/span> <span style=\"color: #000000\">0<\/span> <span style=\"color: #434f54\">&amp;&amp;<\/span> <span style=\"color: #000000\">tipfree<\/span><span style=\"color: #434f54\">&gt;=<\/span><span style=\"color: #000000\">n_minute<\/span> <span style=\"color: #434f54\">&amp;&amp;<\/span> <span style=\"color: #000000\">sleep_flag<\/span><span style=\"color: #434f54\">==<\/span><span style=\"color: #00979c\">false<\/span> <span style=\"color: #434f54\">&amp;&amp;<\/span> <span style=\"color: #000000\">sleep_done<\/span><span style=\"color: #434f54\">==<\/span><span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">sleep_flag<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">sleep_done<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">lowpower<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">1<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #434f54\">\/\/timetillsleep ms later into lowpower mode;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">TimerSetValue<\/span><span style=\"color: #000000\">(<\/span> <span style=\"color: #434f54\">&amp;<\/span><span style=\"color: #000000\">sleep<\/span><span style=\"color: #434f54\">,<\/span> <span style=\"color: #000000\">1<\/span> <span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">TimerStart<\/span><span style=\"color: #000000\">(<\/span> <span style=\"color: #434f54\">&amp;<\/span><span style=\"color: #000000\">sleep<\/span> <span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0<span style=\"color: #000000\">}<\/span>\r\n \u00a0\r\n\t<span style=\"color: #5e6d03\">switch<\/span><span style=\"color: #000000\">(<\/span> <span style=\"color: #000000\">deviceState<\/span> <span style=\"color: #000000\">)<\/span> <span style=\"color: #000000\">{<\/span>\r\n\t\t<span style=\"color: #5e6d03\">case<\/span> <span style=\"color: #000000\">DEVICE_STATE_INIT<\/span><span style=\"color: #434f54\">:<\/span> <span style=\"color: #000000\">{<\/span>\r\n<span style=\"color: #5e6d03\">#if<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">LORAWAN_DEVEUI_AUTO<\/span><span style=\"color: #000000\">)<\/span>\r\n\t\t\t<span style=\"color: #000000\">LoRaWAN<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #000000\">generateDeveuiByChipID<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #5e6d03\">#endif<\/span>\r\n<span style=\"color: #5e6d03\">#if<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">AT_SUPPORT<\/span><span style=\"color: #000000\">)<\/span>\r\n\t\t\t<span style=\"color: #000000\">getDevParam<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n<span style=\"color: #5e6d03\">#endif<\/span>\r\n\t\t\t<span style=\"color: #000000\">printDevParam<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n\t\t\t<span style=\"color: #000000\">LoRaWAN<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #000000\">init<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">loraWanClass<\/span><span style=\"color: #434f54\">,<\/span><span style=\"color: #000000\">loraWanRegion<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n\t\t\t<span style=\"color: #000000\">deviceState<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">DEVICE_STATE_JOIN<\/span><span style=\"color: #000000\">;<\/span>\r\n\t\t\t<span style=\"color: #5e6d03\">break<\/span><span style=\"color: #000000\">;<\/span>\r\n\t\t<span style=\"color: #000000\">}<\/span>\r\n\t\t<span style=\"color: #5e6d03\">case<\/span> <span style=\"color: #000000\">DEVICE_STATE_JOIN<\/span><span style=\"color: #434f54\">:<\/span> <span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #434f54\">\/\/LoRaWAN.displayJoining();<\/span>\r\n\t\t\t<span style=\"color: #000000\">LoRaWAN<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #000000\">join<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n\t\t\t<span style=\"color: #5e6d03\">break<\/span><span style=\"color: #000000\">;<\/span>\r\n\t\t<span style=\"color: #000000\">}<\/span>\r\n\t\t<span style=\"color: #5e6d03\">case<\/span> <span style=\"color: #000000\">DEVICE_STATE_SEND<\/span><span style=\"color: #434f54\">:<\/span>\t<span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #434f54\">\/\/LoRaWAN.displaySending();<\/span>\r\n\t\t\t<span style=\"color: #000000\">prepareTxFrame<\/span><span style=\"color: #000000\">(<\/span> <span style=\"color: #000000\">appPort<\/span> <span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n\t\t\t<span style=\"color: #000000\">LoRaWAN<\/span><span style=\"color: #434f54\">.<\/span><span style=\"color: #d35400\">send<\/span><span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">;<\/span>\r\n\t\t\t<span style=\"color: #000000\">deviceState<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">DEVICE_STATE_CYCLE<\/span><span style=\"color: #000000\">;<\/span>\r\n\t\t\t<span style=\"color: #5e6d03\">break<\/span><span style=\"color: #000000\">;<\/span>\r\n\t\t<span style=\"color: #000000\">}<\/span>\r\n\t\t<span style=\"color: #5e6d03\">case<\/span> <span style=\"color: #000000\">DEVICE_STATE_CYCLE<\/span><span style=\"color: #434f54\">:<\/span> <span style=\"color: #000000\">{<\/span>\r\n\t\t\t<span style=\"color: #434f54\">\/\/ Schedule next packet transmission<\/span>\r\n\t\t\t<span style=\"color: #434f54\">\/\/txDutyCycleTime = appTxDutyCycle + randr( 0, APP_TX_DUTYCYCLE_RND );<\/span>\r\n\t\t\t<span style=\"color: #434f54\">\/\/LoRaWAN.cycle(txDutyCycleTime);<\/span>\r\n\t\t\t<span style=\"color: #000000\">deviceState<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">DEVICE_STATE_SLEEP<\/span><span style=\"color: #000000\">;<\/span>\r\n\t\t\t<span style=\"color: #5e6d03\">break<\/span><span style=\"color: #000000\">;<\/span>\r\n\t\t<span style=\"color: #000000\">}<\/span>\r\n\t\t<span style=\"color: #5e6d03\">case<\/span> <span style=\"color: #000000\">DEVICE_STATE_SLEEP<\/span><span style=\"color: #434f54\">:<\/span> <span style=\"color: #000000\">{<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #434f54\">\/\/LoRaWAN.displayAck();<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #5e6d03\">if<\/span> <span style=\"color: #000000\">(<\/span><span style=\"color: #000000\">sleep_flag<\/span><span style=\"color: #434f54\">==<\/span><span style=\"color: #00979c\">true<\/span> <span style=\"color: #434f54\">&amp;&amp;<\/span> <span style=\"color: #000000\">sleep_done<\/span><span style=\"color: #434f54\">==<\/span><span style=\"color: #00979c\">false<\/span><span style=\"color: #000000\">)<\/span><span style=\"color: #000000\">{<\/span> \r\n \u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0if (serial_msg){<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0\u00a0\u00a0Serial.print(\" --- Sleep mode ; deviceState : \");<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0\u00a0\u00a0Serial.print(deviceState);<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0\u00a0\u00a0Serial.print(\" ; i_minute : \"); Serial.println(i_minute);<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #434f54\">\/\/ \u00a0\u00a0\u00a0\u00a0}<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #434f54\">\/\/LoRaWAN.sleep();<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #000000\">sleep_done<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #00979c\">true<\/span><span style=\"color: #000000\">;<\/span>\r\n \u00a0\u00a0\u00a0\u00a0\u00a0<span style=\"color: #000000\">}<\/span>\r\n\t\t\t<span style=\"color: #5e6d03\">break<\/span><span style=\"color: #000000\">;<\/span>\r\n\t\t<span style=\"color: #000000\">}<\/span>\r\n\t\t<span style=\"color: #5e6d03\">default<\/span><span style=\"color: #434f54\">:<\/span> <span style=\"color: #000000\">{<\/span>\r\n\t\t\t<span style=\"color: #000000\">deviceState<\/span> <span style=\"color: #434f54\">=<\/span> <span style=\"color: #000000\">DEVICE_STATE_INIT<\/span><span style=\"color: #000000\">;<\/span>\r\n\t\t\t<span style=\"color: #5e6d03\">break<\/span><span style=\"color: #000000\">;<\/span>\r\n\t\t<span style=\"color: #000000\">}<\/span>\r\n\t<span style=\"color: #000000\">}<\/span>\r\n<span style=\"color: #000000\">}<\/span>\r\n\r\n<\/pre>\n<p>[ <a href=\"#sensores\">sensores<\/a> ] [ <a href=\"#envia\">env\u00eda<\/a> ] [ <a href=\"#recibe\">recibe<\/a> ] [ <a href=\"#principal\">principal<\/a> ]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Las instrucciones para control del pluvi\u00f3metro y sensores complementarios se encuentran segmentadas por bloques: Bloque principal Sensores Env\u00edo de tramas Recepci\u00f3n de tramas [ sensores ] [ env\u00eda ] [ recibe ] [ principal ] ... Sensores El bloque de sensores se simplifica por partes de control y comunicaci\u00f3n acorde al\u00a0 tipo de sensor: pulsos: &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/blog.espol.edu.ec\/girni\/lorawan-pluviometro-archivo-ino\/\" class=\"more-link\">Continuar leyendo<span class=\"screen-reader-text\"> \"LoRaWan - Pluviometro Archivo.ino\"<\/span><\/a><\/p>\n","protected":false},"author":8043,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1481157],"tags":[],"class_list":["post-4086","post","type-post","status-publish","format-standard","hentry","category-lorawan-pluviometro-con-humedadpresion-y-temperatura"],"_links":{"self":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/4086","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/users\/8043"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/comments?post=4086"}],"version-history":[{"count":7,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/4086\/revisions"}],"predecessor-version":[{"id":4114,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/posts\/4086\/revisions\/4114"}],"wp:attachment":[{"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/media?parent=4086"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/categories?post=4086"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.espol.edu.ec\/girni\/wp-json\/wp\/v2\/tags?post=4086"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}