jueves, 21 de septiembre de 2017

Calcular distancia entre 2 puntos MariaDB (MySQL también)

Calcular la distancia lineal (en kms) entra dos puntos geograficos directamente en MariaDB:

Formula de cálculo de distancia entre 2 puntos geográficos:

distancia = acos(sin(radians(lat1)) * sin(radians(lat2)) + 
  cos(radians(lat1)) * cos(radians(lat2)) * 
  cos(radians(lng1) - radians(lng2))) * 6378;


Crear funcion en MariaDB (o MySQL):

CREATE FUNCTION distancia (lat1 float,lng1 float, lat2 float, lng2 float) RETURNS float
BEGIN
set @dist = (acos(sin(radians(lat1)) * sin(radians(lat2)) + 
  cos(radians(lat1)) * cos(radians(lat2)) * 
  cos(radians(lng1) - radians(lng2))) * 6378);
RETURN @dist;
END

Llamar a esta función:

select distancia(-35.4307073,-71.6517769,-33.4517812,-70.6784224) as distancia

Resultado: 237.71774291992188

Saludos.

jueves, 7 de julio de 2016

Calcular Nivel de Voltaje de batería de automóvil con Arduino

Calcular Nivel de Voltaje de batería de automóvil con Arduino

Calcula el nivel de voltage con Arduino.


float leer_voltaje(int pin, float unidad, int decimales)
{
  lectura = analogRead( pin );
  voltaje = (( 5 * float ( lectura ) ) / 1024 );
  return float(voltaje) * 3 * unidad, decimales );
}

Tomado en parte desde https://geekytheory.com/voltimetro-con-arduino/

Calcular Nivel de Combustible de automovil con Arduino

Calcular el nivel de combustible con Arduino.


La función lee un valor desde la entrada análoga directo desde el sensor del automóvil, el cual trabaja entre 0 y 5v, donde 0v es estanque vacío y 5 es estanque lleno.

La primera función lee la entrada y calcula los litros con un estanque de 40 litros, la segunda devuelve el porcentaje de llenado del estanque.


1:
// Devuelve la cantidad de litros de un estanque de 40 litros
float leer_litros( int pin ){
  return map( analogRead( pin ), 0, 1023, 0, 40 );
}

2:
// Devuelve el prcentage de llenado de un estanque (independiente de la capacidad)
float leer_porcentaje( int puerto ){
  return map( analogRead( puerto ), 0, 1023, 0, 100 );
}

martes, 8 de septiembre de 2015

Comparar dos versiones de archivo como string C#

Función para comparar dos cadenas que representan una versión de un archivo separada por puntos.


/// <summary>
        /// Muestra la version mayor entre dos
        /// </summary>
        /// <param name="version1">Version 1 como string "1.0.0.1", "1.0.1" o "1.0"</param>
        /// <param name="version2">Version 2 como string "1.0.0.1", "1.0.1" o "1.0"</param>
        public static void compruebaVersion( string version1, string version2){
            string[] vers1 = version1.Split('.');
            string[] vers2 = version2.Split('.');

            string txt = "version 1 igual a version 2";

            for( int x = 0; x < vers1.Length ; x++ ){

                int __1__ = Int16.Parse( vers1[x] );
                int __2__ = Int16.Parse( vers2[x] );

                if( __1__ > __2__ ){
                    txt = "version 1 mayor que version 2";
                    break;
                }else if( __1__ <  __2__ ){
                    txt = "version 2 mayor que version 1";
                    break;
                }
            }
           
            MessageBox.Show(txt);
        }

martes, 28 de octubre de 2014

Modificar Plantilla Word desde VB.NET (Clase)


Modificar un archivo word es relativamente fácil, pero la documentación es poca, acá presento una clase que maneja un archivo y sus marcadores o "bookmarks".

la sintaxis para usar la clase es la siguiente:

'declarar la plantilla con su ruta de archivo
Dim ficha As New PlantillaWord("ficha_mantencion.docx")
'cambiar un valor de la plantilla
ficha.marcador("nombre", "juanito perez")

y aqui esta la clase:

Imports Microsoft.Office.Interop

Public Class PlantillaExcel
   Dim ruta$
   Dim excel As New Excel.Application()
   Dim doc As Excel.Document
   Dim documentoAbierto As Boolean = False

   Public Sub New(documento$) 
      ruta = Environment.CurrentDirectory & "\" & documento
      Try
         excel.Visible = True
         doc = excel.Documents.Add(documento)
         documentoAbierto = True
      Catch ex As Exception
         MsgBox("error: " & ex.Message)
      End Try
   End Sub

   Public Sub marcador(nombre$, valor$)
      Try
         If documentoAbierto Then
            doc.Bookmarks.Item(nombre).Range.Text = valor
         End If
      Catch ex As Exception
         MsgBox("error: " & ex.Message)
      End Try
   End Sub

End Class