visual serial recibir proyectos net modulos leer enviar encender ejemplos datos con comunicacion vb.net serial-port arduino communication

vb.net - serial - Cómo enviar datos desde la aplicación VB y arduino a través del módulo RF-433



leer datos de arduino en visual basic (3)

Estoy confundido un poco. He escrito el código VB para activar y desactivar el LED conectado a Arduino. Estoy enviando datos desde la aplicación VB sobre el puerto COM (en lugar de un monitor serie) y los datos son ''1'' para el LED ENCENDIDO y ''0'' para APAGADO. Aquí quiero enviar esta señal a través del módulo RF-433. He conectado el pin TX de Arduino al pin de datos del módulo de RF. Por otro lado, el segundo Arduino está conectado al receptor de RF con LED en el Pin 12. ¿Ahora no estoy obteniendo cómo escribir código para Arduino del lado TX para enviar datos a través de RF? Quiero decir que si uso el monitor serie para enviar datos, entonces Serial.available() y Serial.read() se pueden usar para enviar datos a través del monitor serie con la ayuda del teclado, pero aquí estoy enviando esa información desde la aplicación VB. Entonces, ¿cuál es el código para Arduino para activar RF TX conectado en TX pin de Arduino?

Aquí está mi código VB:

Imports System.IO Imports System.IO.Ports Imports System.Threading Public Class Form1 Shared _continue As Boolean Shared _serialPort As SerialPort Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load SerialPort1.Close() SerialPort1.PortName = "com12" ''change com port to match your Arduino port SerialPort1.BaudRate = 9600 SerialPort1.DataBits = 8 SerialPort1.Parity = Parity.None SerialPort1.StopBits = StopBits.One SerialPort1.Handshake = Handshake.None SerialPort1.Encoding = System.Text.Encoding.Default ''very important! End Sub Private Sub btnOn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOn.Click picOn.Visible = True SerialPort1.Open() SerialPort1.Write("1") SerialPort1.Close() End Sub Private Sub btnOff_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOff.Click picOn.Visible = False SerialPort1.Open() SerialPort1.Write("0") SerialPort1.Close() End Sub End Class


Huh .... Finalmente lo hizo ... El siguiente código está funcionando con éxito. Utilicé la biblioteca de SoftwareSerial. El código Tx es simple y puede implementarse sin ninguna biblioteca. Acabo de tomar datos de la aplicación VB en el pin RX de arduino y los envié al TX de Arduino al que está conectado el módulo de RF. El receptor requiere una biblioteca serie de software.

Código de Tx:

  1. SIN BIBLIOTECA.

    (sin biblioteca)

    int inByte; void setup() { Serial.begin(2400); } void loop() { if(Serial.available()>0) { inByte=Serial.read(); switch(inByte) { case ''0'': Serial.write(inByte); break; case ''1'': Serial.write(inByte); break; default: break; delay(100); } } }

  2. CON BIBLIOTECA.

    #include <SoftwareSerial.h> #define rxPin 10 #define txPin 11 SoftwareSerial mySerial(10,11); //RX & TX int ch; void setup() { pinMode(rxPin,INPUT); pinMode(txPin,OUTPUT); Serial.begin(9600); //Serial.println("Hi"); mySerial.begin(2400); //mySerial.println("Hello"); } void loop() { if(Serial.available()>0) { ch=Serial.read(); mySerial.write(ch); } }

CÓDIGO RX:

#include <SoftwareSerial.h> #define rxPin 10 #define txPin 11 SoftwareSerial mySerial(10,11); //RX & TX int ch=0; void setup() { pinMode(rxPin,INPUT); pinMode(13,OUTPUT); //pinMode(txPin,OUTPUT); Serial.begin(9600); //Serial.println("Hi"); mySerial.begin(2400); //mySerial.println("Hello"); } void loop() { if(mySerial.available()>0) { ch=mySerial.read(); //Serial.write(ch); switch(ch) { case ''0'': digitalWrite(13,LOW); break; case ''1'': digitalWrite(13,HIGH); break; default: break; } } }

Por cierto, muchas gracias @Yve por la guía y el tiempo que me diste para completar este código ... :) implementación.


Primero ha declarado _serialPort As SerialPort y luego procedió a usar SerialPort1
Debe probar si el puerto serie está abierto, como se muestra a continuación. Abrir (o cerrar) un puerto que ya está abierto lanzará un error.
No tiene bits de inicio ni de finalización para su lectura y escritura.

Public Class Form1 '' unsure what this is being used for Shared _continue As Boolean '' you had not declared SerialPort1 Shared SerialPort1 As SerialPort Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ''I don''t understand why you are closing the port??? SerialPort1.Close() ''A statement like this would be better to check if it is open If SerialPort1.IsOpen = True Then SerialPort1.close() SerialPort1.PortName = "com12" ''change com port to match your Arduino port SerialPort1.BaudRate = 9600 SerialPort1.DataBits = 8 SerialPort1.Parity = Parity.None SerialPort1.StopBits = StopBits.One SerialPort1.Handshake = Handshake.None SerialPort1.Encoding = System.Text.Encoding.Default ''very important! End Sub Private Sub btnOn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOn.Click picOn.Visible = True If SerialPort1.IsOpen = False Then SerialPort1.Open() SerialPort1.Write("1") End if SerialPort1.Close() End Sub Private Sub btnOff_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOff.Click picOn.Visible = False If SerialPort1.IsOpen = True Then SerialPort1.Write("0") SerialPort1.Close() End if End Sub End Class

Editar

Vea esto, desde el siguiente enlace e incorpore sus declaraciones if en sus eventos de activación y desactivación de botones.

int SerialValue = 0; void setup(){ pinMode(13, OUTPUT); Serial.begin(9600); } void loop(){ SerialValue = Serial.read(); if(SerialValue == 50){ digitalWrite(13, HIGH); } if(SerialValue == 10){ digitalWrite(13, LOW); } }

http://forum.arduino.cc/index.php/topic,8566.0.html

También sugeriría mirar este sitio:

http://competefornothing.com/?p=738

Sé que estás en este sitio y recomendaría utilizarlo a fondo:

http://arduino.cc/


Imports System.IO Imports System.IO.Ports Imports System.Threading Public Class Form1 Shared _continue As Boolean Shared _serialPort As SerialPort Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load SerialPort1.Close() SerialPort1.PortName = "com12" ''change com port to match your Arduino port SerialPort1.BaudRate = 9600 SerialPort1.DataBits = 8 SerialPort1.Parity = Parity.None SerialPort1.StopBits = StopBits.One SerialPort1.Handshake = Handshake.None SerialPort1.Encoding = System.Text.Encoding.Default ''very important! End Sub Private Sub btnOn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOn.Click picOn.Visible = True SerialPort1.Open() SerialPort1.Write("1") SerialPort1.Close() End Sub Private Sub btnOff_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnOff.Click picOn.Visible = False SerialPort1.Open() SerialPort1.Write("0") SerialPort1.Close() End Sub End Class

pero le sugiero que si puede enviar un byte no una vez con un clic de botón, y verifica su velocidad en baudios, para el módulo de 433 mhz es bueno usar la menor velocidad de transmisión posible. Si sus datos no son mucho más grandes, use 1200bps, y configure ambos microcontroladores con la misma tasa de baudios