3
votes

I am confused a bit. I have written the VB code to make ON and OFF the LED connected to Arduino. I am sending data from VB app over COM port (instead of serial monitor) and the data is '1' for LED ON and '0' for OFF. Here I want to send this signal through RF-433 module. I have connected the TX pin of Arduino to Data pin of the RF module. On other hand, the second Arduino is connected to RF receiver with LED on Pin 12. Now I am not getting how to write code for Arduino of TX side to send data through RF? I mean if I use serial monitor to send data, then Serial.available() and Serial.read() can be used to send data over serial monitor with help of keyboard, but here I am sending that data from VB app. So what is the code for Arduino to activate RF TX connected on TX pin of Arduino?

Here is my VB code:

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
3
I have wrote the command for open and close serial port in another button Connect and Disconnect. And it is working well on COM port... as i tested it on arduino connected to PC.Dexter
sure sure.... i was posting code here..but due to some problem,it failed... wait.. i am posting code here....Dexter
SerialPort1.PortName = cmbPort.Text SerialPort1.BaudRate = cmbBaud.Text SerialPort1.Parity = IO.Ports.Parity.None SerialPort1.StopBits = IO.Ports.StopBits.One SerialPort1.DataBits = 8 SerialPort1.Handshake = IO.Ports.Handshake.None SerialPort1.ReadTimeout = 500 SerialPort1.WriteTimeout = 500 SerialPort1.Open()Dexter
and this code is sub of : Private Sub btnCnct_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCnct.ClickDexter
see..i have edited my question with code here... i have removed now connect and disconnect button. this code is working well now on arduino which is connected to PC over COM 12.Dexter

3 Answers

2
votes

Huh.... Finally did it... Following code is working successfully. I used SoftwareSerial library. The Tx code is simple and can be implemented without any library. I just took data from VB app on RX pin of arduino and sent it to the TX of arduino to which the RF module is connected. The receiver requires software serial library.

Tx Code :

  1. WITHOUT LIBRARY.

    (no library)

        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. WITH LIBRARY.

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

RX CODE:

 #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;
        }
      }
    }

Btw thanx a lot @Yve for the guidance and the time you gave me to complete this code... :) implementation.

1
votes

First you have declared _serialPort As SerialPort and then proceeded to use SerialPort1
You need to test if serial port is open, as shown below. Opening (or closing) a port that is already open will throw an error.
You have no start or stop bits for your read and write.

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

Edit

See this, from the following link and incorporate your if statements into your button on and off events.

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

I would also suggest looking at this site:

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

I know you are on this site and I would recommend utilizing it thoroughly:

http://arduino.cc/

0
votes
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

but I would suggest if you can send a byte not a bit once on a button_click, and check your baud rate , for 433mhz module it is good to use the as least baud rate as possible. If your data is not that much bigger use 1200bps, and set both micro controller with same baudrate