VB 2010 & Arduino Uno - Serial Communication

Can not make VB 2010 to work with Arduino Uno. I am a beginner. Please check my attached files and tell me where i am wrong.
Thanks

StepperMotor28BYJ.txt (1.19 KB)

Form1.pdf (16.3 KB)

I'm using Linux and it's a long time since I did anything with VB.

In this Thread I recently wrote a Python program and corresponding Arduino sketch to illustrate communicating with a PC. The principles will be the same whatever language you use.

...R

You probably ought to call Serial.begin() in setup. Without that, nothing gets written to the serial port, or read from it.

I add Serial.begin(9600);
Nothing happen.

quangdo1700:
I add Serial.begin(9600);
Nothing happen.

This doesn't sound like a serious attempt at debugging.

Have you tried sending/receiving data to/from the same Arduino sketch using the Serial Monitor? Does that work?

...R

HI Robin2,
Your are right. I checked it again and realized that I put "Serial.begin(9600)" in "void loop()".
Once I moved it to "void setup()" section, everything work. ...... Beginner at the beginning.
Sorry guys. It works now. Thanks..

Hi Robin2,
After one run with VB 2010, Arduino stops responding. I have to unplugged/plugged USB in order to make it work.
I have to do the same procedure again. Do I miss anything ?.

Do you get the same problem when using the Arduino Serial Monitor, or only with VB?

It sounds like the Arduino is resetting, and a common cause of that is someone trying to power a motor from the Arduino board. Motors generally draw too much current and should have their own power supply.

Does the program seem to work properly if you disconnect the motor?

If the problem exists with both the Serial Monitor and VB then you should sort out the problem with the Serial monitor before you introduce the complication of VB.

...R

Motor works OK all day long without VB. There is no one else using the same com port but me.
After loading VB, the motor responses one time and no more. I have to close both VB and Arduino sketches, then unplug USB
After that, I plug USB back, load VB and Arduino sketch. It works for one time and stops.
I think my VB program is the culprit.
Thanks for looking into it.

Is it possible your VB code is inappropriately closing (or not closing) the serial port?

...R

Hi Robin2,
Found the problem. I did not reset my variable "count" in Sketch.
So after the first run, the variable is out of range. That is why the Sketch stops
Thanks for all your help.

Glad it's working and thanks for telling us what solved the problem.

...R

Today, I have another problem with Arduino Uno to receive string text.
from VB 2010:
SerialPort1.Open()
SerialPort1.Write("ABC")
SerialPort1.Close()

then upload the attached *.ino file. Then open Arduino serial monitor to track progress.
NOTHING

Please help.
Thanks

VB_ARDUINO_STRTest.ino (588 Bytes)

I haven't seen anyone testing for the serial buffer being less than empty before.

Nevertheless look very carefully at how your IF statements are organized and ask yourself when the second one will be triggered.

"Very carefully" means go through the code step by step with a pencil and paper.

...R

Some help...

//You need space for the null terminator, since you want 3 characters you need an extra to the null terminator 3+1
#define STR 4 
char buffer[STR];
//--------------------------------------------------
void setup(){
  Serial.begin(9600);         
}
//---------------------------------------------------
void loop(){
  if (Serial.available() <0) {   //Ok if you dont have nothing print like crazy ...
    Serial.print("Empty");
    delay(1000);
  }
  if (Serial.available() >=3) {//It will need 3 bytes to run, this way you insure it's safe to read the 3 bytes in a while loop
//Serial comunication are very slow, if you try to read the 3 bytes when you detect the first one you will not get the next because the second one hasn't arrived yet
    int i = 0;
    while (i <= 2) {
      Serial.print(i);
      buffer[i++] = Serial.read();//Use i and then increment it after 
    }
    buffer[3] = '\0';//In order to print it below like a string you need to terminate the char array with a 0
    Serial.print("OK I received");
    Serial.println(buffer);    //Here you should get the string correctly
  } 
}

Obvios this is presuming you are just sending 3 characters from the VB

SerialPort1.Open()
 SerialPort1.Write("ABC")
 SerialPort1.Close()

Open the serial port, resetting the Arduino. While it is booting up, send it some data. Then, close the port, resetting the Arduino.

So, what do you then expect to see in the Serial Monitor?

Hello HugoPT,
Thanks for detailed help. I tried as you suggested. Still nothing on serial monitor.
Well, I give up.
Thanks, again.

Hello HugoPT,

By accident, I open the serial monitor and type in ABC then hit SEND.
Your suggestion works.

The question is now how i send "ABC" in VB to Arduino.
Here are my steps:

  1. Open and run VB to send "ABC" to "COM4" (i.e. Open -> Write -.Close)
  2. Upload sketch. Wait till load is done. Open serial monitor. Monitor is blank.
  3. While the serial monitor is still on, I run VB again and receive a message saying that port "COM4" is busy.

Any idea ?

Did you look at the Python program I gave a link to earlier. Your VB program will have to work in a similar way.

First upload our sketch to the Arduino and leave the Arduino connected to the PC.

Then start your VB program ensuring that it uses the correct Com port.

When the VB program opens the Com port it will cause the Arduino to reset - which takes a little time.

The VB program must wait until the Arduino has completed resetting before it tries to communicate with the Arduino.

A good way to do that is to have the Arduino send a short message at the end of setup() and make the VB program wait until it receives that message before doing anything else.

...R

The reason is very simple.You can't open serial port at VB and simultaneously on arduino IDE!
Serial port becomes busy after gets opened.For you could see the result of sending the "ABC" from VB, just put a textbox in VB a make arduino code to send it back to you and fill the textbox with incoming data from the Serial.Like an eco you send ABC to arduino, arduino reads it and send it back to you showing on the VB textbox.
If this is more trouble for you to do then simply try to highlight onboard LED placed on pin 13 when the incoming string matches.
Some thing like this will work:

//You need space for the null terminator, since you want 3 characters you need an extra to the null terminator 3+1
#define STR 4 
char buffer[STR];

//--------------------------------------------------
void setup(){
  Serial.begin(9600);  
pinMode(13,OUTPUT);  
digitalWrite(13,LOW);
}
//---------------------------------------------------
void loop(){
  if (Serial.available() <0) {   //Ok if you dont have nothing print like crazy ...
    Serial.print("Empty");
    delay(1000);
  }
  if (Serial.available() >=3) {//It will need 3 bytes to run, this way you insure it's safe to read the 3 bytes in a while loop
//Serial comunication are very slow, if you try to read the 3 bytes when you detect the first one you will not get the next because the second one hasn't arrived yet
    int i = 0;
    while (i <= 2) {
      Serial.print(i);
      buffer[i++] = Serial.read();//Use i and then increment it after 
    }
    buffer[3] = '\0';//In order to print it below like a string you need to terminate the char array with a 0
    Serial.print("OK I received");
    if (strcmp(buffer, "ABC") == 0 ){//If the string match turn LED on about 2 seconds and turn it off again
      digitalWrite(13,HIGH);//
      delay(2000);
      digitalWrite(13,LOW);
    }
    Serial.println(buffer);    //Here you should get the string correctly
  } 
}