Arduino + Visual .NET [SOLUCIONADO]

alguien ha conseguido manejar los pines desde VB . NET?

Hay algunos codigos por internet pero lo mas que consiguo es un parpadeo del pin13 (sin mantenerlo activo).

Hola:

Hace años hice el control de los PIC por puerto serie con Visual Studio .net 2008 y también puerto paralelo.

Tengo intención de hacer lo mismo, hacer otro tutorial a PDF más actualizado y con Arduino UNO. Para que te hagas una idea.

Para que hagas pruebas y te funciona igual para tu arduino ya que son del RS232.

Saludo.

pues te lo agradezco, seria de mucha ayuda.

Buenas:

Con C# te paso los códigos, luego lo adapataré a VB .net. En los manuales de arriba te explica todo, así que te toca leer.

Para enviar un carácter en ASCCI como la letra t.

private void button_t_Click(object sender, EventArgs e)
{
    byte[] mBuffer = new byte[1];
    mBuffer[0] = 0x74; //ASCII letter "t".
    serialPort1.Write(mBuffer, 0, mBuffer.Length);
}

Para enviar tramas de bytes.

private void button_t_Click(object sender, EventArgs e)
{
    byte[] mBuffer = new byte[5];
    mBuffer[0] = 0x74;
    mBuffer[1] = 0x75;
    mBuffer[2] = 0x89;
    mBuffer[3] = 0x20;
    mBuffer[4] = 0x6C;
    serialPort1.Write(mBuffer, 0, mBuffer.Length);
}

Para enviar una cadena de caracteres o texto.

private void button_b_Click(object sender, EventArgs e)
{
    byte[] mBuffer = Encoding.ASCII.GetBytes("Hello World");
    serialPort1.Write(mBuffer, 0, mBuffer.Length);
}

Aquí más información rápida, lo subí hace años.

Cuando acabe, te paso el proyecto completo. Voy ahcer pruebas con el Arduino UNO r3 que tengo.

Luego encuentro un ejemplo en Arduino y hago los ejemplos para que lo descargues y lo veas, tanto en C# como en VB .net.

Un saludo.

OK gracias he leido los manuales que pusiste pero no he conseguido hacer que funcione con arduino

tlcnano:
OK gracias he leido los manuales que pusiste pero no he conseguido hacer que funcione con arduino

Buenas:

¿Lo has leido o lo has visto por el aire?

Ya tuvieras la solución.

El código de Arduino te pongo este ejemplo.

char caracter;
String comando;

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

void loop(){
  while (Serial.available()>0){
    caracter= Serial.read();
    comando.concat(caracter);
    delay(10);
  }
  if (comando.equals("hola") == true){
        Serial.println("El comando es hola");
  }      
  if (comando.equals("hello")== true){
        Serial.println("El comando es hello");
  }  
  comando="";
}

Así que desde VB .net o C# puedes enviar el dato hola o el dato hello que lo reconoce.

Quiero ver que código que has hecho el el visual Studio sea VB o C#.

Mira en las propiedades del tu Windows para ver que puerto virtual tienes conectado Arduino, para programarlo en Visual C#, luego lo paso a VB .net.

Mientras, voy haciendo un pequeño programa para que puedes comprobar que te funciona.

Vete preparando un Led o dos. Para que veas que lo puedes apagar y encender desde el PC.

Saludo.

Hola de nuevo:

Aquí un sencillo programa principal que solo envía comandos desde el PC a Arduino para encender y apagar el Led 13 de Arduino UNO r3 y funciona. Te puse a velocidad 9600 que es el predeterminado.

Código Visual C#. (Este no recibe mensajes desde Arduino).

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.IO.Ports; // No olvidar.

namespace Encender_Led_Arduino
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            // Abrir puerto mientras se ejecute la aplicación.
            if (!serialPort1.IsOpen)
            {
                try
                {
                    serialPort1.Open();
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }
        }

        private void button_Encender_Led_1_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = Encoding.ASCII.GetBytes("Led13_ON");
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        private void button_Apagar_Led_1_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = Encoding.ASCII.GetBytes("Led13_OFF");
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }
    }
}

Código de Arduino UNO r3.

char caracter;
String comando;
int pinLed =  13;   // Declaramos la variable pin del Led.

void setup(){
  // Inicializa el pin del LED como salida:
  pinMode(pinLed, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  while (Serial.available()>0){
    caracter= Serial.read();
    comando.concat(caracter);
    delay(10);
  }
  if (comando.equals("Led13_ON") == true){
    digitalWrite(pinLed, HIGH);
        Serial.println("El comando es Led13_ON");
  }      
  if (comando.equals("Led13_OFF")== true){
    digitalWrite(pinLed, LOW);
        Serial.println("El comando es Led13_OFF");
  }  
  comando="";
}

No tener el compilador Arduino IDE y el hecho por C# al mismo tiempo o no funcionará porque los dos programas intentas comunicarse al mismo tiempo creando conflicto. Cierra Arduino IDE y abre la aplicación de Visual C#. Si, ya se, te interesa VB .net, ya lo haré. :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile: :slight_smile:

Este código de abajo permite recibir mensajes desde Arduino.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.IO.Ports; // No olvidar.

namespace Encender_Led_Arduino
{
    public partial class Form1 : Form
    {
        string Recibidos;
        public Form1()
        {
            InitializeComponent();

            // Abrir puerto mientras se ejecute la aplicación.
            if (!serialPort1.IsOpen)
            {
                try
                {
                    serialPort1.Open();
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
            }

            serialPort1.DataReceived += new SerialDataReceivedEventHandler(Recepcion);
        }

        private void Recepcion(object sender, SerialDataReceivedEventArgs e)
        {
            Recibidos += serialPort1.ReadExisting();
            Invoke(new EventHandler(Actualizar));
        }

        private void Actualizar(object sender, EventArgs e)
        {
            richTextBox1.Text = Recibidos;
        }

        private void button_Encender_Led_1_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = Encoding.ASCII.GetBytes("Led13_ON");
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }

        private void button_Apagar_Led_1_Click(object sender, EventArgs e)
        {
            byte[] mBuffer = Encoding.ASCII.GetBytes("Led13_OFF");
            serialPort1.Write(mBuffer, 0, mBuffer.Length);
        }
    }
}

Enciando el comando Led13_ON y Led13_OFF desde el Monitor serie del compilador Arduino IDE, funcionará igual.

Espero que te funcione, y si es posible, que subas un vídeo de que realmente te funciona con tus cantidad de Led deseados, o control de un servo motor o cosa que quieras hacer. :grin: :grin: :grin:

Me funciona todo y lo he comprobado a diestro y siniestro.

Les dejo el ejecutable ya compilado abajo para que lo descarguen y lo prueben, funciona a la primera.

Ya me avisarás si te funciona o cualquier visitante que lo haya hecho.

Un saludo.

Encender_Led_Arduino_v0.02.zip (5.24 KB)

Vale gracias, ya e entendido el concepto, tenia un error con el sketch de arudino, esto me a sido de gran ayuda !!

Gracias por el interes

Ya he conseguido realizar una prueba desde VB . Net correctamente gracias por los ejemplos.

Muy bueno.

¿Puedes poner el código de VB .net?

Saludos.

Comparto el codigo en VB para encender/apagar 4 LEDS , es necesario un buzzer de PC ya que tambien realiza un beep al conectar y desconectar del puerto COM.

4LEDS_Arduino.zip (671 KB)

en el mismo zip va el sketch de arduino

Gracias, por ahora , si le doy conectar, se atasca el VB .net

Eso me pasa cuando no seleccionó el puerto com correcto.por lo demás funciona ok. Esta realizado en vb net 2008

Lo he colgado en youtube para que podais ver como funciona y escuchar los beeps de conexion/desconexion Arduino y VB .NET 4 leds - YouTube

tlcnano:
Lo he colgado en youtube para que podais ver como funciona y escuchar los beeps de conexion/desconexion Arduino y VB .NET 4 leds - YouTube

Buenísimo:

Así queda claro el resultado final.

Un saludo.

Hola:

¿Cómo hiciste ver el programa y en pequeño una imagen de los Led en pantalla?
Que se muestra en este vídeo.

Un saludo.

Buen trabajo tlcnano!!

Buenas, este tema está solucionado, pero si alguien desea una librería para conectar desde .net(tanto VB como C#) montandolo de una manera rápida, aquí dejo una que en su día hice porque pensé que había más gente con mi problema: