none
.: Ayuda URGENTE puerto serie VISUAL BASIC 2010 (preferentemente) o VISUAL BASIC 06 :. RRS feed

  • Debate general

  • .: Buen dia/tarde/noche

    Trabajo en visual basic 2010 express (debido a que en el 06 no manejaba funciones trigonometricas inversas) y he estado trabajando en un programa que me pide una coordenada en X; Y, y Z como coordenadas, y estos parametros seran usados para calcular en la posicion y los movimientos de unos servomotores en un brazo robot, ya esa parte esta totalmente terminada, el problema es la comunicacion serial.... :.

     

    .: Si la respuesta me la pueden dar en visual 06 por mi no hay problema, trabajo en ambos, pero en visual 06 no habia funciones inversas :.

     

    .: Segun he leido, creas un 'buffer' en tipo byte y ya solo 'editas' el interior del buffer para saber que envias....aunque en lo personal no tengo ni la minima idea.... :.

     

    .: Para sacar el pulso y demas, usare una servocontroladora, al inicio pide que se le envie un 255, posteriormente la posicion de mi servo (de 0 a 255 pues es el pulso que la tarjeta interpreta) y finalmente el servo a controlar (del 1 al 12) :.

     

    .: He aqui mi codigo....y se los comento brevemente....

     

    ' el codigo se ejecuta apartir de que se hace click en un boton con el nombre de 'inicio'

     

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

            ' Parte 1 ................

     

            '----------------------------------------------------------------

            Dim l1 As Double

            Dim l2 As Double

            Dim l3 As Double

            Dim d1 As Double

     

            l1 = 16 ' eslabon 1

            l2 = 12 ' eslabon 2

            l3 = 3  ' eslabon 3 (alcance de la pinza)

            d1 = 1  ' dist. de eslabon 

     

            '----------------------------------------------------------------

     

            Dim y As Double

            Dim x As Double

            Dim z As Double

     

            Dim q1 As Double

            Dim q2 As Double

            Dim q3 As Double

     

            Dim q1a As Double

            Dim q2a As Double

            Dim q3a As Double

     

            Dim a As Double

            Dim b As Double

            Dim q1f As Double ' q1f = q1 en radianes ;q1 sera en grados

            Dim q3f As Double 'q3f falsp ^^

            Dim q2f As Double

     

            x = Val(TextBox1.Text) '* Math.PI / 180)

            y = Val(TextBox2.Text) '* Math.PI / 180)

            z = Val(TextBox3.Text) '* Math.PI / 180)

     

            q1f = Math.Atan(y / x)

            q1 = (Val(q1f * 180)) / Math.PI

     

            q3f = Math.Acos((((x ^ 2) + (y ^ 2)) + ((z - d1) ^ 2)) / (2 * l3 * l2))

            q3 = (Val(q3f * 180)) / Math.PI

     

            a = Math.Atan((z - d1) / (Math.Sqrt((x ^ 2) + (y ^ 2))))

            b = Math.Atan(l3 * Math.Sin(q3f)) / (l2 + l3 * Math.Cos(q3f))

            q2f = a - b

            q2 = (Val(q2f * 180)) / Math.PI

     

            ' regla de 3   si 0 - 0g (ó 180g=255) entonces cuantos grados es q1 q2 y q3?

            'Valor del pulso

            q1a = ((255 * q1) / 180)

            q2a = ((255 * q2) / 180)

            q3a = ((255 * q3) / 180)

     'desplegando los valores

            TextBox7.Text = q1

            TextBox8.Text = q2

            TextBox9.Text = q3

     

            TextBox13.Text = q1a

            TextBox14.Text = q2a

            TextBox15.Text = q3a

     

            '-------------------------------------------Parte 2; el mismo codigo pero con condiciones finales

     

            Dim xn As Double

            Dim yn As Double

            Dim zn As Double

     

            xn = Val(TextBox4.Text) '* Math.PI / 180)

            yn = Val(TextBox5.Text) '* Math.PI / 180)

            zn = Val(TextBox6.Text) '* Math.PI / 180)

     

            Dim q1nf As Double

            Dim q1n As Double

            Dim q3nf As Double

            Dim q3n As Double

            Dim q2nf As Double

            Dim q2n As Double

            Dim an As Double

            Dim bn As Double

     

            q1nf = Math.Atan(yn / xn)

            q1n = (Val(q1nf * 180)) / Math.PI

     

            q3nf = Math.Acos((((xn ^ 2) + (yn ^ 2)) + ((zn - d1) ^ 2)) / (2 * l3 * l2))

            q3n = (Val(q3nf * 180)) / Math.PI

     

            an = Math.Atan((zn - d1) / (Math.Sqrt((xn ^ 2) + (yn ^ 2))))

            bn = Math.Atan(l3 * Math.Sin(q3nf)) / (l2 + l3 * Math.Cos(q3nf))

     

            q2nf = an - bn

            q2n = (Val(q2nf * 180)) / Math.PI

     

     

            'regla de 3   si 0 - 0g (ó 180g=255) entonces cuantos grados es q1 q2 y q3?

            'Valor del pulso

     

            Dim q1an As Double

            Dim q2an As Double

            Dim q3an As Double

     

            q1an = ((255 * q1n) / 180)

            q2an = ((255 * q2n) / 180)

            q3an = ((255 * q3n) / 180)

     

            TextBox10.Text = q1n

            TextBox11.Text = q2n

            TextBox12.Text = q3n

     

            TextBox16.Text = q1an

            TextBox17.Text = q2an

            TextBox18.Text = q3an

     

            ' ------------------------------------------ enviando datos al puerto 

     

            '  Dim p1 As Byte  'tiene q cambiar la variable tipo double a byte

            ' Dim p2 As Byte

            'Dim p3 As Byte

            'Dim p4 As Byte

     

            'p1 = CByte(q1an)

            'p2 = p1 'seran los dos servos base

            '  p3 = CByte(q2an)

            ' p4 = CByte(q3an)

     

            Dim servobase(3) As Byte

            servobase(0) = 255

            servobase(1) = 1

            servobase(2) = q1an

            SerialPort1.Write(servobase, 0)

            SerialPort1.Write(servobase, 1)

            SerialPort1.Write(servobase, 2)

        End Sub

     

    End Class

     

     

     

    .: He aqui mi pregunta, intento convertir mis valores en bytes, pero existen valores negativos, por ende, este no me enviara los valores, pero tengo esa duda, porq solamente falta enviar los valores que se nececitan, pero en verdad no se como iniciar el puerto, o el 'COM' etc

    espero que puedan ayudarme hoy mismo 4/dic/11 :.

     

    .: Saludos y gracias d antemano :.

     

    .: Cualquier cosa pueden enviarmela a mi mail

    avfaev_01@hotmail.com

    o por este mismo post que seguire al cabo de estas horas :.



    • Editado Erick_Lawiet domingo, 4 de diciembre de 2011 20:24
    domingo, 4 de diciembre de 2011 19:44