22
feb
11

Puerto Serie con Arduino y VB 6.0


He estado cacharreando algo estos días con el arduino y me he puesto a aprender a controlar y comunicar el arduino con el portátil, os subo un ejemplo de como encender y apagar el led 13 mediante una aplicación realizada en visual basic 6.

Esta es una imagen de la aplicación:

Esta aplicación consiste en controlar el arduino mediante el puerto serie (en mi caso es el COM6, ya lo puse directo en el control del VB 6.0, también se podría hacer para seleccionar el puerto), lo primero que debemos hacer es darle al botón CONECTAR para que se abra el puerto serie y se habiliten los botones de LED ON y LED OFF. Al presionar el botón LED ON el led 13 se encenderá y al presionar el botón LED OFF el led se apagará, para cerrar el puerto serie basta con presionar el botón DESCONECTAR (deshabilitando los botones de encendido y apagado de los leds). Está pequeña aplicación sirve de aprendizaje para futuros proyectos en los que queramos controlar determinados actuadores o sensores. Espero que os sirva de ayuda, a continuación os dejo los códigos y un video del funcionamiento.

Aquí os dejo el código del Arduino:

void setup() {
 //Definimos la velocidad de transferencia a 9600 baudios
 //y el pin 13 como salida
 pinMode(13,OUTPUT);
 Serial.begin(9600);
}

void loop() {
 //Mientras el puerto serie este accesible
 while (Serial.available())
 {
 //Guardamos en dato el valor leido del puerto serie
 byte dato = Serial.read();
 switch (dato){
 //Si es '1' encendemos el led
 case '1':
 digitalWrite(13,HIGH);
 break;
 //Si es '2' apagamos el led
 case '2':
 digitalWrite(13,LOW);
 break;
 }
 }
}

Aquí el código de la aplicación en VB 6.0:

Option Explicit

'Boton de conectar
Private Sub cmdConectar_Click()
 Serie.PortOpen = True   'Abrimos el puerto serie
 cmdON.Enabled = True    'Habilitamos los botones para trabajar con el led
 cmdOFF.Enabled = True
End Sub

Private Sub cmdDesconectar_Click()
 Serie.PortOpen = False  'Cerramos el puerto serie
 cmdON.Enabled = False   'Deshabilitamos los botones
 cmdOFF.Enabled = False
End Sub

Private Sub cmdOFF_Click()
 Serie.Output = "2"      'Mandamos un "2" para apagar el led
End Sub

Private Sub cmdON_Click()
 Serie.Output = "1"      'Mandamos un "1" para encender el led
End Sub

Y aquí os dejo el video del funcionamiento:

Si te ha servido de ayuda esta entrada, puedes realizar un donativo para agradecer el tiempo que dedico al blog y ayudar a hacer más entradas.

donativo_paypal


77 Responses to “Puerto Serie con Arduino y VB 6.0”


  1. 05/10/2011 en 20:44

    Hola. Muchas gracias por publicar este tipo de información sobre los cimientos de Arduino, yo aún no tengo Arduino, me gustaría saber cuáles placas Arduino son las compatibles con Visual basic 6.0, o si todas las placas son compatibles y lo que varía es el software que usan para que funcionen con Arduino. Muchas gracias por todo.

  2. 05/10/2011 en 21:12

    Todas las placas Arduino son compatibles, es decir, Arduino UNO, MEGA, NANO, MINI, lo que pasa es que algunas ya llevan la comunicación USB en la placa y otras la tienes que realizar tu, bien comprando una placa de comunicación o un programador para cargar los programas. Yo en concreto tengo una Arduino UNO, si quieres tener más puertos de entrada salida puedes comprarte la Arduino Mega, pero para comenzar está muy bien la que tengo yo y a un precio bastante económico (dependiendo de donde la compres ebay…etc).

    La comunicación con visual basic es una comunicación serie que bien se puede realizar por los pines tx rx de Arduino o bien por el cable USB mediante CDC,que es como la he realizado yo en este ejemplo. Si tienes alguna duda no dudes en preguntar.

    Me encanta que esta información sirva para ayudar a los demás.

  3. 14/10/2011 en 17:57

    Hola nuevamente. Ahh claro, entiendo. Ya me llegó mi arduino UNO y pude desarrollar el ejemplo que hizo más arriba, aunque no lo hice de esa manera exacta: usé estos códigos de ejemplo que encontré en un tutorial similar, que dan el mismo resultado:

    *Código de VB 6.0:
    Dim ledStatus As String

    Private Sub Command2_Click() ”on the LED
    ledStatus = 1
    MSComm1.Output = ledStatus
    End Sub

    Private Sub Command3_Click() ”of the LED
    ledStatus = 0
    MSComm1.Output = ledStatus
    End Sub

    Private Sub Form_Load()
    MSComm1.RThreshold = 1
    MSComm1.InputLen = 1
    MSComm1.Settings = “9600,n,8,1″ ”baud rate, parity, bit number and stop bit
    MSComm1.CommPort = 10 ” change according to your port number
    MSComm1.DTREnable = False
    MSComm1.PortOpen = True
    End Sub

    Private Sub Form_Unload(Cancel As Integer)
    MSComm1.PortOpen = False
    End Sub

    —————————–

    *Código Arduino:
    int userInput=0;
    int ledPin=13;
    void setup()
    {
    Serial.begin(9600);
    pinMode(ledPin,OUTPUT);
    }
    void loop()
    {
    if(Serial.available()){
    int userInput=Serial.read();
    if(userInput==’1′) // 1 to set the LED ON
    {digitalWrite(ledPin,HIGH);}
    else
    {digitalWrite(ledPin,LOW);}
    }
    }
    —————————–

    La verdad, es la primera vez que trabajo con la arduino, y realicé el manejo con VB de esa forma, con esos códigos.

    Coloqué ese ejemplo, porque me gustaría perdirle una ayuda, cómo sería la programación de VB con Arduino, pero para leer una entrada y esta se refleje con un estado 1 ó 0 en un Label en VB, y que físicamente haya un pulsador, por ejemplo. Por lo que leí, me parece que se utiliza algo como “Serial.printIn”, pero no sé como iría todo el código en Arduino, creo que sería algo así:

    int userInput=0;
    int ledPin=13;
    void setup()
    {
    Serial.begin(9600);
    pinMode(ledPin,INPUT);
    }

    Creo que con ese código digo que sea entrada el Pin 13, pero no sé cómo seguir ni qué iría en VB. Si usted puede ayudarme con algún ejemplo, así como lo hizo con la salida de ejemplo, me sería de gran ayuda :).

    Muchas gracias por su página, hay muchas cosas interesantes.
    Saludos.

  4. 14/10/2011 en 20:32

    Hola de nuevo. El código que has usado es como el mio solo que yo ya habia configurado el puerto serie en el propio control y no en form_load del formulario en visual, despues en vez de poner mscomm le puse serie de nombre, el resto es lo mismo que yo (quizás lo puse demasiado simplificado).

    Con respecto a lo que quieres hacer si supongo que sería con serial.println, prueba este codigo, si tengo algo de tiempo me pongo a probarlo, pero este finde ando muy liado y no tengo casi tiempo. Prueba a ver si te funciona este código:

    *Código Arduino:

    int userInput=13; //Aqui conectamos el pulsador (según esquema correspondiente)

    void setup()
    {
    Serial.begin(9600);
    }

    void loop()
    {
    Serial.print(digitalRead(userInput));
    }

    Yo creo que así tendría que funcionar, en cuanto puede hago un ejemplo y lo subo al blog, tu mientras vete probando, lo que tienes que modificar es ahora el programa en visual basic, para que se te sobreescriba el valor del label ya que va a estar seguido mandando valores el programa de arduino, hay muchas maneras de hacerlo. Espero que te valga y si no ya sabes a preguntar otra vez.

    Edito he estado probando y me ha funcionado, lo que pasa es que cuando lo iba a subir se me reinicio el ordenador, en cuanto tenga un ratito te subo los códigos, mientras te dejo este video que he realizado:

  5. 15/10/2011 en 23:50

    GRACIAS! :). Mire, yo probé lo siguiente, lo escribo para que después me muestre el código suyo actual a ver si son los mismos o parecidos:

    *Código Arduino:
    int boton=3; //Pin donde se encuentra el pulsador, entrada

    void setup()
    {

    pinMode(boton,INPUT); //Entrada es el pin2
    Serial.begin(9600); //Comienza comunicación serial
    }

    void loop()
    {

    //Variable
    int estado = digitalRead(boton);

    //Condicional para saber estado del pulsador o interruptor
    if (estado==1)
    {
    // Estado alto
    Serial.println(“B”); //Imprime en Visual basic, en un label
    } // “B
    else
    {
    // Estado bajo
    Serial.println(“A”); //Imprime en VB, en un label
    } // “A”

    delay(100); //Frecuencia de actualización
    }
    //Más abajo coloqué después condicionales If para encender unos LEDs en otros pines en OUTPUT.
    —————————————————————————————–

    *Visual Basic:

    ‘Este código usé, con interval de 1 milisegundo

    private sub Timer1_timer()
    Label1.caption = Mscomm1.input

    end sub
    ——————————————————————————————

    Bueno, ese código me funcionó, aunque lo simplifiqué en este ejemplo, porque en mi placa arduino, puse los pines: 8, 9, 10, 11, 12 y 13 en OUTPUT y los restantes en INPUT, pero tuve un inconveniente :(, la placa quedó lenta, se demora como 20 segundos en actualizar la entrada, a no ser que sólo deje 2 entradas y todas las salidas nombradas en OUTPUT, es decir, no uso las entradas que me colocan lenta la Arduino. Todo el código se basa en condiciones If, tiene las salidas digitales (pin8, 9, 10, 11,12 y 13) y entradas digitales (pin 2 y 3).

    ¿Será el problema de lentitud donde tengo tantas condiciones?, incluso probé aumentando los baudios, pero me di cuenta que no tiene nada que ver, sigue muy lento. Quizás usted tiene el código más optimizado. Espero con ANSIAS su respuesta :)

    Nuevamente muchas gracias por ayudarme.
    El vídeo está muy bueno, me fijé que usa su protoboard especial para la arduino, y el pulsador le detecta bien rápido, a mi también me detectaba rápido con una entrada, pero al querer colocar todo se comporta muy lenta.

    Gracias por el vídeo :).
    Saludos, gracias por ayudarme.

  6. 16/10/2011 en 0:04

    No tienes porque darme las gracias, yo te ayudo encantado para eso estamos, se trata de aprender a usar estos temas, he realizado un post nuevo donde tengo el nuevo código del video que has visto, tanto de arduino como de visual basic. Lo que me ayudaría sería que me mandaras tu código de arduino para saber lo que realmente quieres hacer y así probar yo y a ver si entre los dos damos con la solución.

    Mi código de visual tiene que ser prácticamente igual que el tuyo, uso también un timer. Hechale un vistazo al post que te dije y ya me cuentas.

    Según puedo entender lo que quieres hacer es tener varias entradas (pulsadores o lo que sea) que mandan información al visual basic, y según esa información quieres activar unas salidas, ¿es así o no?. Si tienes cuenta de megaupload o cualquier servicio de estos y sube un archivo rar con tu código y ponme el enlace aquí, así podré entender mejor lo que quieres hacer y ayudarte.

    Yo probando con una sola entrada efectivamente va muy rápido, no he probado con más pero lo intentaré a ver que pasa, lo que dices de los ifs no creo que sea por eso lo de la lentitud de tu tarjeta arduino, pero sin ver el código ya te digo que estamos dando palos de ciego.

    En cuanto a la protoboard para arduino (prototype shield) es una pequeña maravilla ya que para montajes pequeños es perfecta, va encima del arduino y es muy cómoda, sin duda una de las mejores compras que he hecho.

    Un saludo y gracias por visitar este humilde blog.

  7. 18/10/2011 en 2:10

    Hola!, pues de verdad le estoy muy agradecido por su disposición a ayudarme. He visto el documento que publicó, es muy similar a lo que hice yo, pero después, cuando coloco más entradas, se me confunde usar el modo 0 ó 1, por lo que coloco intrucciones IF para que a partir de letras mayúsculas, en orden alfabético, se sepa cuál es la entrada activa o desactivada, por ejemplo, el pin 2 es entrada, A es bajo, B es alto; pin3, C es bajo, D es alto… y así sucesivamente. Son 6 entradas, y las otras las quiero usar como salidas. Aquí está el link con el código de Arduino, le saqué la parte de las salidas, para probar si la lentitud se iba si sólo quedaban las entradas, pero no :(, aún así sigue lento, así que en el código de Arduino están sólo las entradas, para que esté más simplificado. En todo caso no están en el código todas las entradas (6), porque está tan lento que mejor le dejé sólo 4, para que por favor pruebe si a usted le ocurre esa lentitud, si dejo sólo dos entradas, anda bien, pero ya con una tercera entrada todo empieza mal. En el archivo va el proyecto VB, están también las salidas, pero ellas no las tengo programadas en Arduino, como usted verá.

    Aquí el link:

    http://www.megaupload.com/?d=OJWYPV6D

    Quizás haya otra manera de programar Arduino para que no se ralentice, porque me parece muy extraño, porque si ocurre con la versión UNO, como sería el problema en la MEGA, etc.

    Excelente la prototype shield!, es muy cómodo, incluso para transportar los componentes electrónicos también hacia otro lugar, sin tener que desmontar.

    Muchas gracias por su ayuda y por el blog tan interesante y contribuyente a la comunidad.
    Saludos y muchas gracias de verdad.

  8. 18/10/2011 en 23:03

    Hola yo he probado con 6 pulsadores como entrada y me va igual de rápido que con uno, eso si no he probado con tu código, me he hecho uno nuevo, el problema que tengo es despúes tratar la cadena recibida en visual, estoy en ello, te pongo aquí mi código arduino para que veas como hice. Yo en lugar de enviar un caracter (A,B,C,D,etc) por pulsador, lo que hago es crear una variable tipo byte e ir añadiendole los valores actuales de las entradas así solo tengo que enviar un único dato a visual basic. De todos modos probaré con tu código a ver si me ocurre lo que a ti.

    Código Arduino:

    int boton1=2; //Pin donde se encuentra el pulsador, entrada
    int boton2=3;
    int boton3=4;
    int boton4=5;
    int boton5=6;
    int boton6=7;
    int led1=8; //Pin donde se encuentra el led, salida PARA CUANDO PRUEBA CON SALIDAS TAMBIÉN
    // UNA VEZ QUE TENGA BIEN REALIZADO LO DE LAS ENTRADAS
    int led2=9;
    int led3=10;
    int led4=11;
    int led5=12;
    int led6=13;

    void setup()
    {
    Serial.begin(9600);
    pinMode(boton1,INPUT);
    pinMode(boton2,INPUT);
    pinMode(boton3,INPUT);
    pinMode(boton4,INPUT);
    pinMode(boton5,INPUT);
    pinMode(boton6,INPUT);
    }

    void loop() //ciclo que se repite sin fin, termina en el final del código
    {
    //De esta manera guardamos la lectura de las entradas en un único byte para poder
    //enviar por el puerto serie, y posteriormente tratarlo en el programa en visual
    byte dato;
    //Guarda en la variable dato el bit correspondiente a la entrada 7 del arduino
    dato=digitalRead(boton6);
    //Desplazamos un bit a la izquierda de la variable dato
    dato=dato<<1;
    //Guarda en la variable dato el bit correspondiente a la entrada 6 del arduino
    //junto con el dato que ya habia almacenado de la lectura de la entrada 7
    dato=dato+digitalRead(boton5);
    //Desplazamos un bit a la izquierda de la variable dato y asi sucesivamente
    dato=dato<<1;
    dato=dato+digitalRead(boton4);
    dato=dato<<1;
    dato=dato+digitalRead(boton3);
    dato=dato<<1;
    dato=dato+digitalRead(boton2);
    dato=dato<<1;
    dato=dato+digitalRead(boton1);
    //Enviamos el dato por puerto serie
    Serial.println(dato,BIN);
    delay(100);
    }

  9. 19/10/2011 en 4:27

    Hola!, muchas gracias por su pronta respuesta y ayuda. He probado el código que ha puesto, y me he dado cuenta que funciona instantáneamente al presionar un botón o pulsador, pero al soltarlo, me sigue marcando por unos segundos el valor anteriormente presionado, por ejemplo, en el pin 6, activé, y en el monitor serial del software de Arduino marco 10000, y luego al apagarlo seguía ese valor varios segundos, no sé si es así o no, la verdad no entendí bien la lógica que me daba Arduino en el serial monitor, a veces en el pin 2 marcaba 11, a veces salía un 1 y de ahí un 0, seguramente es parte del proceso del código. Bueno, veo sí que lee rápido al presionar, pero seguiré intentando, y le agradezco muchísimo su ayuda.

  10. 19/10/2011 en 10:14

    A mi me va perfectamente, te subo mi programa en visual para que le heches un vistazo, a ver si te sirve de algo, sino entiendes algo pregunta, pero creo que es bastante sencillo, lo único cambiale el puerto serie por tu com correspondiente, tienes que hacerlo en el icono del telefono, porque yo ya lo hago ahi sin hacerlo en el form load. También te adjunto el código arduino en .pde. A ver si tengo tiempo y sigo con lo de las entradas para poder encender los leds.

    http://www.megaupload.com/?d=G2CTC9JJ

    Edito: He estado simplificando el código en Arduino tanto para actuar con entradas (6 pulsadores) como con salidas (6 leds), desde un programa de comunicación serie que tengo que se llama Octoplus Terminal que es libre, recibo perfectamente el dato en decimal de los pulsadores, y puedo enviar datos hacia el arduino para encender los leds. En visual basic se ven perfectamente y rápido el estado de los pulsadores, pero no se que pasa al enviar el dato hacia el arduino que este no lo entiende perfectamente. El código en arduino funciona perfecto, el fallo está en el envio desde visual basic hacia arduino, a ver si le puedes hechar un vistazo y dar con el fallo. Adjunto los ficheros actualizados:

    http://www.megaupload.com/?d=8MCBL46F

  11. 22/10/2011 en 22:50

    Hola. Antes que todo muchísimas gracias por todo su esfuerzo, de verdad estoy muy agradecido. He probado ambos códigos, lo malo es que parece que definitivamente mi placa Arduino tiene algo :(, igual me responde lento, incluso, cuando presiono el pulsador que da con el pin 2, se me activan dos pines en VB, cuando sólo apreté uno :S, no sé qué será, incluso probé cambiando el código para poner las entradas de arriba a abajo, y pasa lo mismo, se activan el 13 y 12 al mismo tiempo y físicamente sólo hay un pulsador :S, con el resto anda más o menos bien, pero igual se demora muchísimo, la única forma en que logro una velocidad espectacular (como el puerto paralelo) es usando una sola entrada, así que lo que tendré que hacer es usar una entrada y todos los demás pines como salidas, y coloco unos relés (6 relés) para activarlos uno detrás de otro, sin que se activen al mismo tiempo, y diseñar un software que recepcione esos datos que serán distintas entradas pero entrando por sólo un pin, eso lo he hecho en el DB25, pero sólo con 3 entradas, con 6 quedará más lento, pero creo que andará mejor que como me responde mi Arduino :(, a veces me pregunto si será algo con el oscilador…

    Sin embargo el código me funciona bien para los otros pulsadores al apretarlos, pero cuando los suelto tardan como 10 segundos en actualizarse :S.

    Estoy muy contento sí porque puedo manejar el USB, algo que veía no tan cercano, y Arduino me brindó rapidez y sencillez.

    No me queda más que agradecerle muchísimo por su ayuda, y de verdad gracias por todos estos tutoriales que le sirven a muchas personas. Cualquier cosa le comento.

    Saludos.

  12. 22/10/2011 en 23:32

    De nada, esto me sirve a mí también para ir probando cosas, y si puedo me gusta ayudar a otra gente a resolver cualquier duda que tenga. Lo del oscilador y la lentitud de tu Arduino se que a puede ser debida pero si por ejemplo los ejemplos que trae el ide de arduino si que te funcionan bien no creo que sea tema del oscilador. ¿Has probado sin conectar al puerto serie si te funcionan bien entradas y salidas solo hecho el programa con el IDE de Arduino? Así puedes ir descartando cosas hasta poder dar con el problema. A mi lo único que me falta es activar las salidas a través de la comunicación VB6.0 y Arduino, porque con un programa Serie que tengo que se llama Octoplus Terminal recibo los datos a traves del puerto serie perfectamente y puedo enviar también datos a la placa Arduino y funciona perfecatamente. En todo caso a ver si tengo tiempo de mirarlo y lo soluciono y te subo los archivos. Si tuvieras otra placa podrías probar con ella. Saludos y gracias por visitar mi blog.

  13. 27/10/2011 en 20:28

    Hola. De nada, yo me entretengo viendo los tutoriales, porque son importantes para avanzar en mis objetivos. Lo único que probé con Arduino sin el puerto serie fue el ejemplo del LED que se enciende y apaga a unos tiempos programados, es lo único que he realizado sin serie, porque mi interés principal es trabajar en tiempo real con esta placa maravillosa. Bueno, no tengo otra placa por ahora, de hecho me la compré poco después del primer comentario que dejé en su blog, para experimentar con ella.

    Yo podía encender los LED con el software que subi a megaupload, el código era diferente al suyo eso sí, ese método me servía para la totalidad de LEDS que se podían disponer en Arduino.

    La forma en que usted dispone la información del software que desarrolló (en cuanto a la GUI) es muy intuitiva.

    Estoy muy agradecido de su gran voluntad para ayudarme, cualquier cosa o descubrimiento respecto al tema de la placa le comento.

    Gracias por todo,
    Saludos.

  14. 07/01/2012 en 2:59

    Hola. ¡Feliz Año Nuevo!. Escribo para mencionarle que tuve la oportunidad de probar otra Arduino y esta vez sí me funcionó a la perfección la lectura de entradas, por lo que la otra Arduino es lenta. Estoy muy contento porque ahora funciona. Saludos.

  15. 07/01/2012 en 3:52

    Hola! Feliz año nuevo a ti también Eric. Me alegro de que te acabase funcionando perfectamente, aunque me parece raro lo de la lentitud del otro Arduino. Un saludo!

  16. 26/02/2012 en 7:02

    Links rotos, de favor te pido cargarlos en otra web

  17. 26/02/2012 en 13:52

    Me parece que es este el programa que había hecho para este tema, espero te sirva de ayuda:

    http://www.mediafire.com/?h9x0fxhj536gzm4

  18. 03/03/2012 en 14:50

    Hola, he visto sus aportes y me han ayudado mucho, gracias pero tengo un problema q no puedo solucionar espero me puedan ayudar, explico: tengo una aplicación muy similar a la de ustedes todo funciona de maravilla, pero por alguna razón el puerto COM deja de funcionar, aparentemente esta conectado y se ve en administración de dispositivos pero deja de transmitir señal, y el sistema en visual me tira el error 8015 “no se puede establecer el estado de comunicacion puede q haya uno o varios parámetros de comunicaciones no validos” por lo q tengo q deshabilitar y volver a habilitar el com para q vuelva a funcionar esto me pasa de 2 a 3 veces al día, no se a q se deba espero me puedan ayudar . De antemano gracias

  19. 03/03/2012 en 15:36

    Puede ser debido a reseteos del Arduino y que se cierre el puerto serie en la aplicación de visual basic, o puede ser defecto de los drivers asociados al puerto de tu arduino, ¿has probado a desinstalar y volver a instalar el driver de tu arduino? Así podemos ir descartanto cosas a ver si encontramos la solución a tú problema.

  20. 03/03/2012 en 22:14

    Hola, gracias por responder, ya he probado desinstalar los drivers y volverlos a instalar incluso con varias versiones, 022,023 y 1.0 y sigue haciendo lo mismo.

    No sabia que se reseteaba Arduino, esto cuando sucede, hay alguna forma de detectarlo y ponerlo en marcha de nuevo?.

    Te comento mas sobre mi proyecto, no uso pulsadores, tomo este directamente de la luz por medio de un monedero electronico que se abre cuando se introducen las monedas y da acceso a una puerta, despues esa corriente la bajo a 5 volts por medio de un eliminador con entrada de 120v y salida de 5v, en los pines 7 y 8 conecto en cada uno resistencia de 70 MegaOhms, solo de esta manera evite que se duplicaran los conteos. Todo funciona bien, cuenta cada persona que entra, solo es el detalle que aleatoriamente el puerto COM deja de funcionar.

    Envio programa de arduino , el de vb6 y un diagrama de lo que explicon en el archivo proyecto.rar

    http://www.mediafire.com/?3o7c1vi145rvalj

    Gracias

  21. 04/03/2012 en 0:47

    He estado mirando tu código y bueno necesitaría lo comentaras algo para poder ir mirando lo que ocurre.

    He visto que en unas líneas de código compruebas si el puerto serie esta abierto o no. Supongo que querrás que esté siempre abierto, entonce ¿para que comprobar eso?.Intentaré ir revisando algo pero este mes tengo 2 examenes en la Universidad y no tengo mucho tiempo libre. Seguiré mirando y a ver si me puedes enviar el código un poco comentado sobre lo que va haciendo el programa o lo que quieres que haga (me refiero al de VB).

    Yo creo que el problema puede estar ahí, a no ser que por componentes mecánicos se produzcan reseteos en el arduino (pero no creo que este sea el caso).

  22. 04/03/2012 en 6:39

    El puerto lo compruebo cada 5 minutos en que no haya actividad, de acuerdo a la ultima entrada debido al error 8015 del puerto COM, ya que si no lo hago asi el sistema solo se detiene, por lo que al hacer esta comprobacion si nos tira el error reiniciamos la maquina y perdemos el minimo de entradas. La idea es que el puerto este siempre abierto, si no nos arrojara el error esta comprobacion no tendria razon de ser.

    Lo raro es que si conecto en mi maquina y en mi casa el error no sale, pero al conectarlo a la puerta y monedero electronico si, por lo que pienso que si podria ser lo que me comentas de que arduino se resetea, por eso mi pregunta de cuando se resetea y como detectar o evitar esto? Tambien pregunto si mi conexion es correcta o podria mejorar de otra forma?

    He depurado el sistema y comentado, como me pediste.

    http://www.mediafire.com/?efolpghdoar9j3w

    Gracias

  23. 04/03/2012 en 12:11

    He estado revisando el código y no veo nada raro. Así que no creo que sea problema del código.

    Más bien me decanto por la opción de ruido electrico que se meta al sistema debido a la activación del monedero electrónico. Buscando soluciones a tú problema he visto que hay gente que añade un filtro para evitar dichos problemas (normalmete cuando emplean relés en sus proyectos), es decir, añaden un condensador electrolítico de unos 10 microfaradios conectado con la patilla (+) a 5V y la patilla (-) a tierra. Prueba esta opción a ver si se solucionan los reseteos inesperados.

    También he encontrado esto, que dice de conectar un condensador electrolítico ,igual al anterior, después de tener iniciado el arduino entre reset y masa. Te pongo una imagen:

    Busca por internet algo más acerca de esto, que quizás te pueda ayudar en tu problema.

  24. 14/03/2012 en 23:05

    Hola a todos. Todo el blog ha avanzado muchísimo, felicidades al administrador y los colaboradores. Quería realizar una consulta, que no he podido dar con la solución. Estoy usando la condición If Then en el software de Arduino, me funciona a la perfección, colocaré un ejemplo de lo que hago resumidamente:

    int userinput;

    if(userInput==’9′) // Alto
    {digitalWrite(ledPin7,HIGH);}
    else
    if(userInput==’8′) // Bajo
    {digitalWrite(ledPin7,LOW);}
    else

    Bueno así uso toda la Arduino, con muchas If Then, pero he tenido un problema, que se me acabaron las letras del abecedario y los números del 0 al 9, y cuando quiero poner una condición con un 99, ó un 88, o cualquier condición que empiece con cualquier letra o símbolo de una condición anterior, la Arduino me detecta sólo el primer dígito de lo que quiero que revise, es decir, si tengo una condición para que detecte ‘H’, si pongo otra condición que sea ‘H2′, no me funciona, porque me toma la H sola y no puedo dar la ejecución desde VB en donde le mando ‘H2′, ya que me reconoce la condición de H, no de ‘H2′. Si alguien me puede explicar por favor qué es lo que no estoy haciendo bien le estaría muy agradecido.

    Gracias
    Saludos a todos

  25. 15/03/2012 en 0:12

    Hola Eric!! Gracias a ti por visitar el blog. Espero que sea interesante y de ayuda.

    En cuanto a tu duda, de verdad no he probado con más de un carácter pero me imagino que el puerto serie los detectará como dos bytes (uno para cada letra o número). Intenta a leer dos veces una detrás de otra el puerto serie y ver lo que se guarda cada vez en cada byte, después los tendras que unir para realizar las opciones que desees en los ifs.

    Hasta el fin de semana no puedo ponerme a probar a ver si te puedo dar un código porque tengo examen este viernes en la universidad de Automátas y hay que estudiar. A partir del viernes me pongo a pensar en una solución, pero creo que los caracteres son enviados en forma de byte (código ASCII) y al ser dos caracteres enviará 2 bytes. De todas maneras vete probando y si lo consigues ya me contarás.

  26. 26 0xDA bit
    21/03/2012 en 10:55

    Hola Eric, así a bote pronto y sin poder realizar ninguna prueba te diría lo mismo que mi compañero. Una alternativa que puedes hacer, aunque ya te digo no he podido probarlo, es hacer dos if(); es decir si por ejemplo pones que uno de los condicionantes sea “9A” y otro “9B” (así al usar dos cifras doblas el número de combinaciones) pues comparas el primer byte y posteriormente el segundo.


    char UserInput[1]="";
    if(userInput[0]=='9'){
    if(userInput[1]=='A'){
    //Código a ejecutar en el caso de "9A"
    }
    else{
    //Código a ejecutar en el caso de "9B"
    }
    }

    Ya me explicarás si ha funcionado y sino haré pruebas el finde!

    Un saludo!

  27. 23/03/2012 en 18:03

    ¡Hola Chicos!. Les agradezco mucho sus rápidas respuestas :). Yo las revisaré en unas horas las pruebas para ver si me funcionan los IFs. Después les comento. Muchas gracias a ambos que me brindaron ayuda :).

  28. 23/03/2012 en 22:43

    Hola :). Ya lo probé, pero me sale un error al compilar, me dice: que no puede ir un entero con la variable char (eso creo entender) : invalid types ‘char[int]‘ for array subscript. Intenté poniendo la variable int, y probé otro modo parecido a este que se me ocurrió a ver si me leía, pero nada :/. Si se me ocurre algo nuevo y me funciona lo publicaré. Gracias por la ayuda :)

  29. 29 0xDA bit
    26/03/2012 en 8:28

    Hola Eric, podrías pegar un trozo del código para poder ayudarte mejor en la búsqueda del problema?¿ por lo que me comentas, el error puede venir provocado a la hora de cargar el valor a comparar en el char, es decir, cuando almacenas en “char userInput[0]=’1′;” es muy importante que lo hagas con comillas simples en el principio y final del caracter, ya que “userInput” tan sólo puede almacenar caracteres y no valores enteros. Lo dicho si puedes haz un coment con el código para que podamos analizarlo mejor!

    Un saludo!

  30. 20/05/2012 en 23:12

    Hola a todos
    Para empezar soy un estudiante de secundaria y soy nuevo con la placa arduino
    ya he tratado de encender un led con ayuda de VB sin embargo no puedo encender mas de 1, he querido encender varios con distintos botones del Visual ya he modificado el codigo pero al final no enciende ningun led quisiera saber el problema y como resolverlo porque ya llevo 1 semana intentandolo jeje, gracias por su tiempo

  31. 20/05/2012 en 23:45

    Hola Jova, lo importante es ir aprendiendo poco a poco. Me vendría bien que me pusieras tus códigos para echarles un vistazo, y si pueden tener algún error, así que si puedes ponme tanto el código del arduino como el de visual basic y una captura del form, y los subes a algún servidor tipo mediafire (el que te guste más a ti). Y en cuanto tenga tiempo lo miro y te comento algo, en los comentarios de esta entrada puedes ir mirando código que fuimos realizando para hacer algo parecido a lo que tu quieres, lo único es que al cerrar megaupload nos hemos quedado sin los archivos, si los encuentro por el pc los resubo a mediafire ok. Un saludo y gracias a ti por visitar el blog!!!

  32. 21/05/2012 en 0:56

    ola de nuevo mira este es el codigo de visual:

    Dim ledStatus As String

    Private Sub Command1_Click()
    ledStatus = 0
    MSComm1.Output = ledStatus
    End Sub

    Private Sub Command2_Click()
    ledStatus = 1
    MSComm1.Output = ledStatus
    End Sub

    Private Sub Command3_Click()
    ledStatus = 2
    MSComm1.Output = ledStatus
    End Sub

    Private Sub Form_Load()
    MSComm1.RThreshold = 1
    MSComm1.InputLen = 1
    MSComm1.DTREnable = False
    MSComm1.PortOpen = True
    End Sub

    Private Sub Form_Unload(Cancel As Integer)
    MSComm1.PortOpen = False
    End Sub

    ——————————————————————————
    Si te das cuenta es uno muy parecido al que alguien que ya lo habia publicado

    *y el de arduino es este

    int userInput=0;
    int LED1=13;
    int LED2=12;
    int LED3=11;
    void setup()
    {
    Serial.begin(9600);
    pinMode(LED1,OUTPUT);
    pinMode(LED2,OUTPUT);
    pinMode(LED3,OUTPUT);

    }
    void loop()
    {
    if(Serial.available())
    {
    int userInput=Serial.read();
    if(userInput==’0′)
    {digitalWrite(LED1,HIGH);}
    {digitalWrite(LED2,LOW);}
    {digitalWrite(LED3,LOW);}
    }

    if(userInput==’1′){
    {digitalWrite(LED1,LOW);}
    {digitalWrite(LED2,HIGH);}
    {digitalWrite(LED3,LOW);}
    }

    if(userInput==’2′){
    {digitalWrite(LED1,LOW);}
    {digitalWrite(LED2,LOW);}
    {digitalWrite(LED3,HIGH);}
    }

    }

    en realidad no cambie mucho de acuerdo a los publicados anteriormente
    espero que me puedas ayudar

  33. 21/05/2012 en 1:22

    Yo en principio lo único raro que veo son todas esas llaves {} que aparecen en los digitalWrite y además las comillas que van indicando el número que vas a leer no son esas(no se si se modifican al pegar el código aquí), prueba así:

    int userInput=0;
    int LED1=13;
    int LED2=12;
    int LED3=11;

    void setup()
    {
    Serial.begin(9600);
    pinMode(LED1,OUTPUT);
    pinMode(LED2,OUTPUT);
    pinMode(LED3,OUTPUT);
    }

    void loop()
    {
    if(Serial.available())
    {
    int userInput=Serial.read();
    if(userInput==’0′)
    {
    digitalWrite(LED1,HIGH);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,LOW);
    }

    if(userInput==’1′)
    {
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,HIGH);
    digitalWrite(LED3,LOW);
    }

    if(userInput==’2′)
    {
    digitalWrite(LED1,LOW);
    digitalWrite(LED2,LOW);
    digitalWrite(LED3,HIGH);
    }
    }
    }

    Como ves las comillas son distintas dentro de los if, y los if solo llevan {} al principio y al final de cada uno de ellos, puede ser que no te funcione debido a eso. Ya me contarás si te ha funcionado, copia este código que he puesto y cargaselo a tu arduino.

  34. 22/05/2012 en 5:19

    Hola, tengo un problema que no he podido solucionar, espero me puedan ayudar.
    Anteriormente me ayudaron a solucionar el porque dejaba de funcionar el puerto serie, en mi proyecto donde uso 2 monederos electronicos, estos envian corriente de 127V, esta la disminuyo antes de la tarjeta a 5V, cada monedero va al pin 2 y 3
    Ahora lo que quiero contar son el numero de vueltas que dan 2 puertas giratorias, cada una conectada a estos monederos, estas puertas oprimen un microswitch y me envia los 5V directos que van a los pines 4 y 5 de la placa arduino.

    Todos los cables tanto de los monederos como de las puertas van por el mismo conducto, no tengo forma de pasarlos por un conducto diferente.

    El problema que tengo es que el conteo de las veces que se activa el monedero va perfecto, pero el conteo de las veces que gira la puerta no, hay veces que se duplica o cuenta sin que giren las puertas, pienso que se debe a ruido electrico, pero no encuentro la forma de quitarlo para que todos los conteos sean exactos, incluso lo he probado usando 2 placas arduino, una para los 2 monederos y otra para las 2 puertas y siguen entrando el ruido. En los pines de las puertas he usado resistencias de diferentes capacidades.

    El codigo siguiente es el que uso para las puertas. Gracias

    void setup(){
    Serial.begin(9600);
    }

    void loop(){

    T1.isPressed();
    if (T1.stateChanged())
    {
    if (T1.wasPressed() == 0)
    {
    conta++;
    Serial.print(“T1″);
    Serial.println(conta);
    }
    delay(500);
    }

    T2.isPressed();
    if (T2.stateChanged())
    {
    if (T2.wasPressed() == 0)
    {
    conta2++;
    Serial.print(“T2″);
    Serial.println(conta2);
    }
    delay(500);
    }
    }

  35. 22/05/2012 en 23:26

    Gracias amigo si ha funcionado ya me di cuenta de mi error fue el orden de los corchetes del inicio y final de cada if y los corchetes que no iban en la sentencia, con respecto a las comillas se modifican al pegar el codigo en el blog pero no tuve problemas con eso, amigo te lo agradezco que tengas un buen dia

  36. 27/05/2012 en 15:52

    Hola joegsite, en primer lugar perdona por tardar tanto en contestar, pero es que estoy liado con los exámenes de la universidad y me quitan mucho mucho tiempo. En segundo lugar, si me pusieras el código comentado lo entendería mucho mejor, aunque por lo que veo el código es bastante simple. ¿Puede ser que existan rebotes al accionar los switch? de ese modo puede ser el conteo doble que dices, aunque no se porque se acciona sin pulsar el switch. ¿Que tipo de cableado usas para llevar esas líneas al arduino? Por lo que he leído si existe ruido eléctrico es mejor usar cables apantallados que previenen del ruido eléctrico. Busca algo por google o libros sobre ruido eléctrico, pero antes probaría a que funcionara por separado ambas cosas para ir descartando problemas y así poder a lo mejor encontrar el problema más rápido.

  37. 30/05/2012 en 17:02

    buenas compañeros buscando en internet encontre este blog de como comunicar el arduino con VB, soy nuevo en el arduino y en el visual…. pero en la escuela nos dicen que los usemos, este tutorial no me salio bien bien por que cuando le doy en el boton OFF y presino los botones off y on sale error y el profesor dice que eso no debe pasar, espero me puedan ayudar, a por cierto…. GRACIAS!! ala persona que hizo este post y a las personas que comentaron tambien puesto que asi voy aprendiendo

  38. 30/05/2012 en 17:08

    Hola Rey Rey no he entendido bien tu problema, ¿cuando ocurre el error? si pulsas dos veces off, o al presionar el botón desconectar arduino y posteriormente volver a darle a desconectar? si puedes subir un video de lo que te hace el programa o explicarmelo un poquito mejor, te podré ayudar mejor. Un saludo!!

  39. 05/06/2012 en 16:10

    buenas compañero es que he tenido poco tiempo por la escuela, si cuando presiono el boton desconectar se cierra la comunicacion com, pero en ese estado presiono los botones on y off y me sale error que podra ser?

  40. 05/06/2012 en 16:20

    El error sale porque el puerto serie no esta avierto, puedes hacer en el código que al pulsar el botón desconectar deshabilites on y off, así no se pueden pulsar y ya no sale el error. Al pulsar conectar los habilitas. ¿supongo que sabes hacerlo?, sino preguntame y te pongo el código.

  41. 05/06/2012 en 16:35

    pues no recuerdo bien compañero, pero mejor dame unas ideas y lo intento o lo busco para hacerlo quiero aprender xD ya en caso que no pueda pues tendre que pedirte el codigo, gracias

  42. 05/06/2012 en 17:43

    Este sería el código, es ele mismo que se encuentra arriba en el post:

    Option Explicit

    ‘Boton de conectar
    Private Sub cmdConectar_Click()
    Serie.PortOpen = True ‘Abrimos el puerto serie
    cmdON.Enabled = True ‘Habilitamos los botones para trabajar con el led
    cmdOFF.Enabled = True
    cmdDesconectar.Enabled= True
    cmdConectar.Enabled=False ‘Deshabilitamos botón de Conectar
    End Sub

    Private Sub cmdDesconectar_Click()
    Serie.PortOpen = False ‘Cerramos el puerto serie
    cmdON.Enabled = False ‘Deshabilitamos los botones
    cmdOFF.Enabled = False
    cmdDesconectar.Enabled= False
    cmdConectar.Enabled=True ‘Habilitamos boton de conectar
    End Sub

    Private Sub cmdOFF_Click()
    Serie.Output = “2” ‘Mandamos un “2” para apagar el led
    End Sub

    Private Sub cmdON_Click()
    Serie.Output = “1” ‘Mandamos un “1” para encender el led
    End Sub

    Con este código ya no te deben salir los errores en el programa de visual basic. Espero que te sirva.

  43. 43 Yael Beltran
    14/09/2012 en 20:15

    Hola que tal , quisiera que me ayudaran con una duda que tengo…. como le haría para declarar 2 puertos seriales?? , suponiendo que quiero usar 2 arduinos .. uno para recibir datos seriales y otro para mandarlos.

    Saludos

  44. 14/09/2012 en 20:22

    Hola!! No he probado con 2 arduinos, ni con 2 puertos serie, pero supongo que en el programa en vb 6.0 deberás añadir dos controles COM uno para cada función e ir poniendo el código de transmisión correspondiente. Para la semana a ver si puedo mirar algo y te comento!! Un saludo

  45. 45 Yael Beltran
    14/09/2012 en 20:28

    Gracias por tu rápida respuesta , agregue los 2 controles COM … pero tengo duda en como abrir el puerto que yo quiero .. como lo hiciste en tu ejemplo:

    Serie.PortOpen = True ‘Abrimos el puerto serie

    En este caso , no se si se puede especificar que puerto quiero abrir , saludos

  46. 14/09/2012 en 20:32

    De nada hombre, te comento: en mi programa le cambié el nombre al control COM de vb6.0 por Serie, es decir mi control pasó a llamarse serie, tu puedes cambiarle el nombre a tus controles COM, por ejemplo, “Recepcion” y “Transmision”, lo que no sé decirte sin probarlo es si puedes tener 2 puertos serie abiertos al mismo tiempo, tendrás que probar, el código para abrirlo sería:

    Recepcion.PortOpen=True
    Transmision.PortOpen=True

    Si tienes más dudas pregunta que intentaré ayudarte en lo que sea!!

  47. 47 Yael Beltran
    14/09/2012 en 20:38

    Gracias , en cuanto lo pruebe te comento … esta muy bueno tu blog

    Saludos

  48. 14/09/2012 en 20:39

    Gracias!! Es un proyecto que llevamos entre manos tanto David (@0xDA_bit) como yo!! Saludos y ya me contarás!!

  49. 49 Yael Beltran
    18/09/2012 en 16:49

    Hola , yo aquí de nuevo ..pero con una pregunta sobre programación de VB, perdón si es muy básica pero la verdad ya tiene muchísimos años que no tocaba VB

    En este ejemplo que hiciste , me di cuenta que al darle clic a conectar , este botón se queda aun activado, provocando que si por accidente se le da clic manda una advertencia…

    Se me ocurrió una solución sencilla para esto , pero no me funciona:

    Primero declaro una variable , la cual me va a indicar si se presiono el botón de conectar

    Dim i As Integer

    Private Sub Conectar_Click()
    Serie.PortOpen = True ‘Abrimos el puerto serie
    cmdON.Enabled = True ‘Habilitamos los botones para trabajar con el led
    cmdOFF.Enabled = True
    i = 1 ‘Indica que se le dio clic al botón

    Luego en el formulario pongo la comparación , aquí tal vez sea mi error … no se si es correcto ponerla ahí

    Private Sub Form_Load()
    If i = 1 Then
    Conectar.Enabled = False

    Else
    Conectar.Enabled = True

    End If
    End Sub

    Espero que me puedas ayudar , saludos

  50. 19/09/2012 en 0:39

    Hola Yael! lo que quieres hacer es bastante sencillo, no sé porque yo no lo incluí en el programa, pero con poner un cmdConectar.Enabled=False una vez que pulsas el botón conectar y un cmdConectar.Enabled=True cuando pulsas el de desconectar ya estaría solucionado el problema.

    Option Explicit

    ‘Boton de conectar
    Private Sub cmdConectar_Click()
    Serie.PortOpen = True ‘Abrimos el puerto serie
    cmdON.Enabled = True ‘Habilitamos los botones para trabajar con el led
    cmdOFF.Enabled = True
    cmdConectar.Enabled = False
    End Sub

    Private Sub cmdDesconectar_Click()
    Serie.PortOpen = False ‘Cerramos el puerto serie
    cmdON.Enabled = False ‘Deshabilitamos los botones
    cmdOFF.Enabled = False
    cmdConectar.Enabled = True
    End Sub

    Private Sub cmdOFF_Click()
    Serie.Output = “2” ‘Mandamos un “2” para apagar el led
    End Sub

    Private Sub cmdON_Click()
    Serie.Output = “1” ‘Mandamos un “1” para encender el led
    End Sub

  51. 51 Hp
    27/09/2012 en 2:17

    Hola hermano, sabes quisiera saber si tienes algun ejemplo como el que publicaste, solo que con visual 2008
    , sabes acabo de comprar mi placa arduino y me gustaria aprender manipulacion de objetos usando este medio. o si sabes de alguna liga o contacto que me pueda ayudar. te lo agradecere infinitamente. saludos

  52. 04/10/2012 en 22:03

    Hola Hp, pues no he trabajado nada con visual 2008, pero supongo que para añadir un control serie será muy parecido a visual basic 6.0 o incluso más sencillo, con una búsqueda en tu buscado preferido poniendo “crear control puerto serie en visual 2008″ ya está, tiene que ser el mismo que tenga la placa arduino y ya podrás trabajar desde visual con tu nueva placa!! Un saludo, si encuentro algo lo comentaré ok!!

  53. 53 MiniTere
    25/02/2013 en 19:10

    Hola Regata, tengo una tarea muy parecida con este proyecto. Mi pregunta es cómo son las conexiones entre el Arduino , el puerto serial y en general todos los componentes que se ocupan para prender el led. ¿Me podrías pasar el diagrama? Otra cosa, si este proyecto se trabaja desde visual basic cómo es que cargas el programa de Arduino al Visual Basic? Soy nueva en esto de comunicaciones seriales. Muchas gracias que tengas un excelente día.

  54. 54 omar
    09/03/2013 en 2:19

    hola amigo soy un estudiate y he querido relizar tu practica pero no puedo establecer la comuniacion entre arduino y visual basic he capturado los codigos como los pusiste y al tratar de correr en visual me marca una depuracion tambien quisiera saber como se elige el puerto con el q vas a trabajar espero tui respuesta y un saludo grax

  55. 55 Luis
    15/03/2013 en 4:38

    Tengo un problema soy un novato en el tema de programación y me gustan ver si alguien me podría facilitar un código de 1 sólo pulsador en el que el valor que se me muestre no sea de 1 / 0 sino que vaya acumulando la cantidad de veces que ha sido accionado el pulsador. Es para una guillotina que necesito saber cuantas veces se acción al día. Mí tarjeta es una Arduino Leonardo.

  56. 16/03/2013 en 12:20

    Hola Omar!! Necesitaría saber cual es la depuración que te salta y si usas la versión de visual basic 6.0, también si conoces bien el entorno de programación de visual. Para poder trabajar con el puerto serie desde visual debes de añadir un control COM que te permita trabajar con él y que yo en este ejemplo he puesto de nombre “Serie”. En las propiedades de ese control que se añade como un commandbutton o cualquier otro componente puedes seleccionar baudios, paridad, nombre, puerto, etc… Añadiendo este componente debería funcionar a la perfección. Un saludo!!

  57. 57 Alejandro Diaz
    26/04/2013 en 18:21

    hola amigo intente hacer el ejercicio del Led, sin embargo me salio error 424 diciendo que se requiere un objeto y eso que tengo el mismo código que tu

  58. 27/04/2013 en 23:39

    Hola Alejrando!!

    ¿Usas la versión 6 de visual basic? Si es así igual te falta por añadir el control del puerto serie o algún otro control, o bien no le has llamado como tengo yo en el código. Me sería de ayuda poder ver tu programa. Un saludo!!

  59. 13/05/2013 en 18:50

    en el primer ejemplo quisiera saber en donde estan declaradas las variables en vb6 y como esta hecha la conexion del visual con el arduino

  60. 17/05/2013 en 3:43

    Hola Javier!!

    No entiendo a que variables te refieres, pero si es al control Serie de visual basic, lo tienes que añadir al form y ahí modificar el nombre del mismo si quieres cargar tal cual el ejemplo que he realizado, sino solo tendrías que modificar el código en vb6 para que en lugar de aparecer Serie.PortOpen = True aparezca “Nombredetucontrolserie”.PortOpen = True. Por lo demás no hay más variables para realizar dicho ejemplo, es sólo cargar el sketch en tu arduino, arrancar el programa en vb6 y listo. Las conexiones del arduino con el pc son a través del cable USB (en realidad es una comunicación serie) y el led está conectado al pin 13 y a gnd (es la misma conexión que emplea el led incorporado en la placa Arduino con el nombre “L”), lo puse para que se apreciará mejor en el video. Si no entiendes algo no dudes en preguntar de nuevo. Un saludo!!!

  61. 01/06/2013 en 17:25

    Hola, que tal. Me sale el error 424.

    He puesto su código

    Private Sub Command1_Click()
    Serie.PortOpen = True ‘Abrimos el puerto serie
    cmdON.Enabled = True ‘Habilitamos los botones para trabajar con el led
    cmdOFF.Enabled = True
    End Sub

    Private Sub Command2_Click()
    Serie.PortOpen = False ‘Cerramos el puerto serie
    cmdON.Enabled = False ‘Deshabilitamos los botones
    cmdOFF.Enabled = False
    End Sub

    Private Sub Command3_Click()
    Serie.Output = “2” ‘Mandamos un “2” para apagar el led
    End Sub

    Private Sub Command4_Click()
    Serie.Output = “1” ‘Mandamos un “1” para encender el led
    End Sub

  62. 01/06/2013 en 17:26

    Al igual utilizo la version VB 6

  63. 01/06/2013 en 17:35

    Hola digysistem!!

    El error 424 en VB6 es debido a que falta un objeto. ¿Has añadido el objeto para comunicar con el puerto serie tal y como hemos comentado con anteriores compañeros en los comentarios de la entrada? Si ves el código te darás cuenta que yo le he cambiado el nombre que trae por defecto por el nombre “Serie“, lo puedes ver en esta linea del programa: Serie.PortOpen = True ‘Abrimos el puerto serie. Modificando esto el programa debería de funcionar correctamente. Un saludo!!!

  64. 01/06/2013 en 18:51

    Soy nuevo, en visual basic. No se si te refieres al objeto a que si ya he conectado mi arduino?. Si es ello la respuesta es que sí, se encuentra conectado. Lo unico que hice fue crear los botones en visual y cheque tu código. Dentro del codigo de visual basic copie lo que tenias dentro de cada “Private Sub Command1_Click()”
    y puse lo que tu tenías. Acabo de ponerlo tal cual: Ya no me sale el error,ya compile y cargue el programa a arduino, ya le dí conectar a la interfaz, pero no prende el led, ni siquiera el led del arduino que esta integrado cerca de las salidas digitales.

    Private Sub cmdConectar_Click()
    Serie.PortOpen = True ‘Abrimos el puerto serie
    cmdON.Enabled = True ‘Habilitamos los botones para trabajar con el led
    cmdOFF.Enabled = True
    End Sub

    Private Sub cmdDesconectar_Click()
    Serie.PortOpen = False ‘Cerramos el puerto serie
    cmdON.Enabled = False ‘Deshabilitamos los botones
    cmdOFF.Enabled = False
    End Sub

    Private Sub CmdOFF_Click()
    Serie.Output = “2” ‘Mandamos un “2” para apagar el led
    End Sub

    Private Sub CmdON_Click()
    Serie.Output = “1” ‘Mandamos un “1” para encender el led
    End Sub

  65. 01/06/2013 en 21:13

    Hola, les comparto lo que aprendí, apenas hoy empeze a usar VB6.0 No tengo conocimiento alguno de como se usa, estube investigando para poder hacer este pequeño programita. En los comentarios anteriores no me salia debido a que estaba confundiendo algunos parametros como caption y poner el nombre. Y no sabía como poner MSCOMM, investigando encontre como ponerlo y declarar en la ventana de propiedades de cada boton creado el nombre empezando por cmdOFF, cmdON, cmdCONECTAR, cmdDESCONECTAR. Que ya me di cuenta que es muy diferente de caption que son las etiquetas de cada boton. Posteriormente solo hacia falta cambiarle el nombre a MSCOMM (icono del telefono) y ponerle el de “Serie” como esta en este programa y definir el puerto, la velocidad estaba bien. Y listo se seleccionaba cada boton y se le ponia la línea de código que le correspondía. jaja me sentí felíz despues de tardar unas cuantas horas entender esto. Gracias Saludos.

  66. 01/06/2013 en 23:55

    Me alegro de que lo acabases solucionando. Pensé que tenías algo más de conocimiento sobre VB6, en otro caso te lo explicaría más detallado. Así también te sirvió para ir aprendiendo a diferenciar conceptos que es lo cuento en esto!! Un saludo y a seguir trasteando!!

  67. 67 Juan Barajas
    07/06/2013 en 1:19

    Wow, excelentes posts los felicito a todos por el interes que ponen, recien empiezo con arduino y por casualidad los encontré. Gracias por compartir conocimientos.

  68. 13/06/2013 en 0:19

    Gracias Juan!! Espero que te sirvieran de ayuda!! Un saludo!

  69. 69 Flor
    02/07/2013 en 9:11

    Hola Regata. Hace poco q estoy incursionando en la electrónica y realmente voy mal :(
    Intento programar un arduino BT para q se comunique en forma serie con la PC… He logrado Configurar el puerto COM y cargar el programa a la placa via bluetooth. El problema q tengo es q cuando hago un serial.print el monitor serial muestra simbolos raros (no son los datos en assci). He verificado q la velocidad en baudios del programa coincida con la del puerto COM q utilizo. En todos los casos sigue mostrando simbolos, no realiza retornos de carro, no imprime caracteres ni ningun tipo de datos. Solo los simbolos >:(
    Te agradecería enormemente si pudieras darme una mano.

  70. 02/07/2013 en 11:03

    Hola Flor!! Supongo que a los dígitos que recibes debes tratarlos para que se conviertan a caracteres que puedas leer, creo que para eso es necesario restar el valor 48. Prueba esto a ver si te funciona. En cuanto pueda miro algo más del tema y te comento, pero vete probando eso: (valor ascii – 48 ) = simbolo . Puedes mirar los valores en esta tabla http://ascii.cl/es/. ¿En donde visualizas los caracteres recibidos? ¿En la consola del IDE de Arduino? ¿En el programa en VB? Si es en la consola en la parte de abajo fijate que esten seleccionados los baudios correctamente. Un saludo!!

  71. 19/11/2013 en 17:56

    Hola Regata, agradeciendo de antemano tu palpable generosidad en la enseñanza sobre este apasionante tema quisiera preguntarte ¿cómo supiste que tu puerto es el COM6 y cómo Eric supo que el suyo es el 10?
    Yo tengo creo mucha experiencia en VB 6 aunque poca en Arduino, mi problema es que cuando ejecuto mi programa en VB me aparece el error “el número de puerto no existe” justo cuando se ejecuta la línea : MiPuerto.Open donde “MiPuerto” es el nombre de mi Contro MS Comm Control de VB. Esto me tiene atorado y te agradecería me indiques la solución. En cuanto a la dificultad de Erick sobre que se mantienen los datos en el serial fue un difícil problema que logré superar hace unos meses pero como lo he dejado y ahora retomado necesito repasar mi lógica en Arduino para darle respuesta, hasta ahora que lo intento con VB porque antes lo hacía con Processing pero encontré muy limitado con relación a las amplias capacidades del VB. ¿Me leerás pronto? Saludos.

  72. 19/11/2013 en 18:50

    Hola Fernando!!

    Te comento, para saber que puerto COM tiene asignado tu Arduino solo tienes que fijarte en el IDE de Arduino cuando programas tu Arduino el número de puerto COM que tiene asignado, bien desde el menú de Herramientas y en la opción puerto serial y el puerto que tengas seleccionado para realizar la programación en tu Arduino (ese es el que tiene asociado tu arduino), también puedes ver los puertos COM asignados en tu ordenador en el Administrador de dispositivos (al acceder a la opción Puertos COM & LPT) verás los distintos puertos COM asignados y uno de ellos que pondrá Arduino y con un puerto COMx (donde x es el número que tiene asignado).

    También comentarte que cada ordenador puede darle un puerto COM distinto al mismo Arduino, e incluso si tienes varios Arduinos tener distintos puerto COM para cada uno de ellos.

    Espero que te sirva esta información, si no es así dímelo e intentaré explicarte los pasos de una manera más sencilla.

    Un saludo y gracias por visitarnos!!

  73. 73 Carlos Antonio
    21/11/2013 en 8:43

    Hola, eh probado el programa, si lo compila, solo que al momento de ejecutarlo y presionar alguno de los botones, me marca error en la variable del puerto serie, dice que no esta definida, no se que hacer, si tengo que declarar algo mas o tengo que ingresar el numero de puerto que tiene el arduino?

  74. 21/11/2013 en 13:01

    Hola Carlos Antonio!

    ¿Has incluido en el programa de VB el control para puerto serie? Si es así igual tienes que cambiar el nombre que trae por defecto por el nombre que le he puesto yo. En mi caso el nombre es Serie (lo puedes ver en el código de VB Serie.PortOpen), además tendrás que configurar el puerto que corresponde a tu arduino en las propiedades de dicho componente. Una vez hechos esos cambios el programa debería funcionar perfectamente.

    Un saludo y gracias por visitarnos!!

  75. 75 GENTEC
    20/02/2014 en 21:07

    Hola a todos Agradezco si me pueden colaborar con mi proyecto lo que deseo hacer es conectar mi arduino uno por los pines rx y tx a un modem ENFORA enviar un comando at recibir la info de respuesta del modem adjuntar un dato y devolver la info al modem con otro comando.
    Lo que hago es enviar el comando
    AT$MDMID? El modem me responde
    $MDMID: “AAA001″
    OK
    Necesito tomar solo el dato AAA001. El primer problema que tengo es con la instrucción Seril.read() no puedo tomar todo el dato solo me toma el primer carácter y lo segundo como hago para tomar solo el dato AAA001?

    Agradezco su colaboración

  76. 76 Fernando Mejía
    21/03/2014 en 1:11

    Hola Regata,
    Ya pasaron varios meses sin agradecer tu explicación, es que hasta ahora pude retomar el tema.
    Sí pude en aquella ocación hacer funcionar con algunos leds, desde vb6. Pero hace un tiempo además encontré un firmata para VB2005 y un ejemplo de código, lo cual también funcionó con ventaja de velocidad o de que se quede activado sin poder apagar leds. La página es http://www.acraigie.com/programming/firmatavb/sample_applications.html. Yo domino VB6 pero ahora me encuentro con que tengo que incursionar en el .net.
    Mi pregunta esta ocación es ¿No existe un API que pueda reemplazar al componente COM? Lo que pretendo
    es enviar y/o recibir señales desde un programa distinto a VB6 pero que utiliza un DLL creado en VB6.
    Antes he utilizado la interfaz popularmente conocida “Processing”, la aprendí un poco pero me he decepcionado de que tiene una pequeña y limitada capacidad en memoria de programación. Saludos Regata.

  77. 04/05/2014 en 21:04

    Hola Fernando Mejía!!

    Siento no poder ayudarte, ya que no tengo ni idea de VB.net. Esperemos que algún usuario del blog pueda ayudarte con tú problema. Un saludo!!


Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s


Si quieres ayudar a mantener el blog o su contenido te ha servido de ayuda, puedes realizar una donación

Visitas al blog

  • 519,762 veces

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevos mensajes por correo.

Únete a otros 1.371 seguidores

Tweets por @MrRegata

Tweets por @0xDA_bit

Posts mejor valorados:


Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 1.371 seguidores

A %d blogueros les gusta esto: