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:
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); } } }
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:
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