Mostrando entradas con la etiqueta Spreadsheet. Mostrar todas las entradas
Mostrando entradas con la etiqueta Spreadsheet. Mostrar todas las entradas

viernes, 27 de diciembre de 2013

Generador de tabla html por Puerto Serie V1.0

Este programa esta hecho, pensando en la comunicación Arduino con la Hoja de Cálculo del Open/Libre Office.
Como últimamente  estoy graficando en Calc muchos datos (temperatura, potenciometros...) procedentes de Arduinos, he decidido hacer un programa que simplifique el código en el Arduino para crear una tabla Html.

Descargar proyecto: http://www.4shared.com/zip/yIezN8Dk/Proyecto_generador_tabla_html.html

Las instrucciones en el Arduino son fáciles:
- Con "(" Abro una fila y con ")" la cierro.
- Con "<" abro una celda y con ">" la cierro
- No hay que preocuparse que un número tenga decimales, el Generador tabla html convierte los puntos en comas, para que este en el correcto formato de la hoja de cálculos.
- Se pueden introducir letras y "_".
- Cualquier otro carácter es ignorado.
- Para crear una nueva tabla se crea desde el Generador tabla html.

Ejemplo si el Arduino envia por el puerto serie: (<1><2><3><4>)(<5><6><7><8>)(<9><10><11><12>)

El Generador tabla html crea:
1  2  3  4
 5  6  7  8
9 10 11 12

Ejemplo cógido Arduino:

El Generador tabla html es fácil de usar:
- Al ejecutar crea una tabla "tabla1" vacia.
- Primeo se pulsa habilitar puertos, en port saldrán los puertos disponibles.
- Configurar: velocidad, datos...
- Al pulsar "Conectar", en la pantalla se verán los datos recibidos y los guardara automáticamente en la tabla.
- Al pulsar "Abrir" tabla Html se verán los datos recibidos traducidos a html.
-  "Desconectar" se desconecta el puerto
- " Guardar como: " permite crear una tabla nueva con el nombre del texto que hay a la derecha.





Para importar la tabla  a la hoja de cálculo: insertar / vincular con datos externos , buscar la tabla y después pulsar en actualizar.

                                                        Ejemplo comunicación Arduino Nano-  OpenOffice




Código Visual Basic:


Public Class Arduino_HojaCalculo

    Dim textin As String

    Dim textin2 As String

    Dim Direccion As String

    Dim Tipo As Object

    Dim Archivo As Object

    Dim Archivo2 As Object

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        Conectar.Enabled = False

        Conectar.Visible = True

        Desconectar.Enabled = False

        Desconectar.Visible = False

        guardar.Enabled = True

        Tipo = CreateObject("Scripting.FileSystemObject")

        Direccion = "Tabla1.html"

        Archivo = Tipo.CreateTextFile(Direccion, True)

      

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Conectar.Click

        Conectar.Enabled = False

        Conectar.Visible = False

        Desconectar.Enabled = True

        Desconectar.Visible = True

        guardar.Enabled = False

        SerialPort1.BaudRate = ComboBox2.SelectedItem 'Velocidad

        SerialPort1.DataBits = ComboBox5.SelectedItem

        If ComboBox3.Text = "None" Then                 'paridad

            SerialPort1.Parity = IO.Ports.Parity.None

        ElseIf ComboBox3.Text = "Odd" Then

            SerialPort1.Parity = IO.Ports.Parity.Odd

        ElseIf ComboBox3.Text = "Even" Then

            SerialPort1.Parity = IO.Ports.Parity.Even

        ElseIf ComboBox3.Text = "Mark" Then

            SerialPort1.Parity = IO.Ports.Parity.Mark

        ElseIf ComboBox3.Text = "Space" Then

            SerialPort1.Parity = IO.Ports.Parity.Space

        End If

        If ComboBox1.Text = "None" Then                 'stopbits

            SerialPort1.Parity = IO.Ports.StopBits.None

        ElseIf ComboBox1.Text = "OnePointFive" Then

            SerialPort1.Parity = IO.Ports.StopBits.OnePointFive

        ElseIf ComboBox1.Text = "One" Then

            SerialPort1.Parity = IO.Ports.StopBits.One

        ElseIf ComboBox1.Text = "Two" Then

            SerialPort1.Parity = IO.Ports.StopBits.Two

        End If

        SerialPort1.PortName = ComPuertos.SelectedItem 'puerto

        Archivo.writeLine("")

        Archivo.Write("")

        Archivo.Write(Direc.Text)

        Archivo.WriteLine("")

        Archivo.WriteLine("")

        Archivo.WriteLine("")

        Archivo.WriteLine("")

        SerialPort1.Open()

        Timer1.Start()

    End Sub

    Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Desconectar.Click

        Conectar.Enabled = True

        Conectar.Visible = True

        Desconectar.Enabled = False

        Desconectar.Visible = False

        guardar.Enabled = True

        textrecibir.Text = ""

        SerialPort1.Close()

        Timer1.Stop()

    End Sub

    Private Sub Button1_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        Process.Start(Direccion)

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Habilitar.Click

        ComPuertos.items.clear()

        For Each PuertoDisponible As String In My.Computer.Ports.SerialPortNames

            ComPuertos.Items.Add(PuertoDisponible)

        Next

        If ComPuertos.Items.Count > 0 Then

            ComPuertos.Text = ComPuertos.Items(0)

            Conectar.Enabled = True

            Conectar.Visible = True

        Else

            MessageBox.Show("Ningún puerto encontrado")

            Conectar.Enabled = False

            Conectar.Visible = True

        End If

    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        Dim cuenta As Integer

        textin = SerialPort1.ReadExisting() '(<0><2><3><4><5>)

        ' System.Threading.Thread.Sleep(300)

        textrecibir.Text = textrecibir.Text + textin

        cuenta = textin.Length

        For i As Integer = 0 To (cuenta - 1)

            If textin(i) = "(" Then

                Archivo.WriteLine("
")

            ElseIf textin(i) = ")" Then

                Archivo.WriteLine("
")

            ElseIf textin(i) = "<" Then

                Archivo.WriteLine("")

            ElseIf textin(i) = "." Then

                Archivo.Write(",")

            ElseIf textin(i) = "0" Then

                Archivo.Write("0")

            ElseIf textin(i) = "1" Then

                Archivo.Write("1")

            ElseIf textin(i) = "2" Then

                Archivo.Write("2")

            ElseIf textin(i) = "3" Then

                Archivo.Write("3")

            ElseIf textin(i) = "4" Then

                Archivo.Write("4")

            ElseIf textin(i) = "5" Then

                Archivo.Write("5")

            ElseIf textin(i) = "6" Then

                Archivo.Write("6")

            ElseIf textin(i) = "7" Then

                Archivo.Write("7")

            ElseIf textin(i) = "8" Then

                Archivo.Write("8")

            ElseIf textin(i) = "9" Then

                Archivo.Write("9")

            ElseIf textin(i) = "A" Or textin(i) = "a" Then

                Archivo.Write("A")

            ElseIf textin(i) = "B" Or textin(i) = "b" Then

                Archivo.Write("B")

            ElseIf textin(i) = "C" Or textin(i) = "c" Then

                Archivo.Write("C")

            ElseIf textin(i) = "D" Or textin(i) = "d" Then

                Archivo.Write("D")

            ElseIf textin(i) = "E" Or textin(i) = "e" Then

                Archivo.Write("E")

            ElseIf textin(i) = "F" Or textin(i) = "f" Then

                Archivo.Write("F")

            ElseIf textin(i) = "G" Or textin(i) = "g" Then

                Archivo.Write("G")

            ElseIf textin(i) = "H" Or textin(i) = "h" Then

                Archivo.Write("H")

            ElseIf textin(i) = "I" Or textin(i) = "i" Then

                Archivo.Write("I")

            ElseIf textin(i) = "J" Or textin(i) = "j" Then

                Archivo.Write("J")

            ElseIf textin(i) = "K" Or textin(i) = "k" Then

                Archivo.Write("K")

            ElseIf textin(i) = "L" Or textin(i) = "l" Then

                Archivo.Write("L")

            ElseIf textin(i) = "M" Or textin(i) = "m" Then

                Archivo.Write("M")

            ElseIf textin(i) = "N" Or textin(i) = "n" Then

                Archivo.Write("N")

            ElseIf textin(i) = "O" Or textin(i) = "o" Then

                Archivo.Write("O")

            ElseIf textin(i) = "P" Or textin(i) = "p" Then

                Archivo.Write("P")

            ElseIf textin(i) = "Q" Or textin(i) = "q" Then

                Archivo.Write("Q")

            ElseIf textin(i) = "R" Or textin(i) = "r" Then

                Archivo.Write("R")

            ElseIf textin(i) = "S" Or textin(i) = "s" Then

                Archivo.Write("S")

            ElseIf textin(i) = "T" Or textin(i) = "t" Then

                Archivo.Write("T")

            ElseIf textin(i) = "U" Or textin(i) = "u" Then

                Archivo.Write("U")

            ElseIf textin(i) = "V" Or textin(i) = "v" Then

                Archivo.Write("V")

            ElseIf textin(i) = "W" Or textin(i) = "w" Then

                Archivo.Write("W")

            ElseIf textin(i) = "Y" Or textin(i) = "y" Then

                Archivo.Write("Y")

            ElseIf textin(i) = "Z" Or textin(i) = "z" Then

                Archivo.Write("z")

            ElseIf textin(i) = "_" Then

                Archivo.Write("_")

            ElseIf textin(i) = "-" Then

                Archivo.Write("-")

            End If

        Next

    End Sub

   

    Private Sub guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles guardar.Click

        Direccion = Direc.Text + ".html" '"C:\Users\jsslxs\Desktop\"

        Archivo = Tipo.CreateTextFile(Direccion, True)

        Archivo = Tipo.CreateTextFile(Direccion, True)

    End Sub

    Private Sub jsslxs_LinkClicked(ByVal sender As System.Object, ByVal e As System.Windows.Forms.LinkLabelLinkClickedEventArgs) Handles jsslxs.LinkClicked

        'jsslxs.url = "jsslxs.blogspot.com"

        System.Diagnostics.Process.Start("http://jsslxs.blogspot.com")

    End Sub

End Class

 


") ElseIf textin(i) = ">" Then Archivo.WriteLine("


viernes, 20 de diciembre de 2013

Comunicacíón de Arduino con hoja de cálculo de Openoffice / Libreoffice

Vea también (Versión mejorada): http://autron.blogspot.com.es/2013/12/generador-de-tabla-html-por-puerto.html 

Me imagino que muchos usuarios de Openoffice y Libreoffice habrán tenido el mismo problema que tuve yo al intentar conectar el Arduino con la hoja de cálculo "Excel". Busque en muchos foros y casi todos los blogs iban encarados para Microsof. Así que os presento mi alternativa.

He conseguido, conectar el Arduino Mega 2560 con "tiempo real" (hay un pequeño retraso que no es importante) a la hoja de cálculo, esto es interesante porque permite ver las gráficas según se van enviando valores y lo más importante es muy sencillo de crear graficos, hacer estadísticas...

                           En este caso el Arduino está enviando dos datos  X y Y=sin(X).


Para conseguir esto, me he descargado el realterm este captura todo lo recibido en el puerto y crea un documento TXT o HTML.

La configuración es sencilla:
 1-Se cambia la velocidad por la que trabaja el Arduino, en mi caso 9600 Baud
 2-Los mismo para el puerto


3-Por último en la pestaña capture, en la ventana File cambiamos el txt por html, esto es importante, ya que nos interesa crear un fichero html

El ralterm ya esta configurado.

Como he dicho, nos interesa crear un documento html, este tendrá una tabla con los datos que queremos enviar. Buscando por Internet, he conseguido un ejemplo sencillo del código html de una tabla


Ahora es el turno del Arduino, este debe enviar por el puerto todo el código en html, imitando el código de la imagen anterior.

La primera parte, el Setup, envió parte del código hmtl que no se volverá a repetir. Esto incluye el nombre de la tabla y su creación como tal.


 La segunda parte, el loop, es donde envió las celdas con los datos de la tabla

La tercera parte es un poco más complicada, en mi caso al enviar valores del sin(X) hay decimales y negativos, el Arduino utiliza su formato de número (0.00 con punto) y el Open/Libreoffice otro (0,00 con coma). Esta función corrige esto, si no hay decimales esta función es innecesaria.



Ahora si ejecutamos, y le damos Star al Realterm crea el documento html.


Por último hay que preparar el Open/Libreoffice

Vamos a vincular datos con externos.


 Se abrirá un ventana, insertamos la tabla, le damos a actualizar con 1 segundo.
Cada segundo se actualizara los datos de las celdas.

Con estos pasos ya, esta todo! Ahora con los datos que se reciben, ya se puede graficar.


Aquí,  sólo he representado funciones, pero con anolog.write se puede mostrar temperatura, voltaje, posición...