top of page


Public·65 members

Receive Data From Serial Port

If you have a microcontroller circuit that needs to talk to a PC, a serial port can do the job. Serial ports can transfer data for just about any purpose. For example, a microcontroller can send sensor data for a PC to analyze and display. Or a PC can send commands to control robots or other devices.

receive data from serial port


A serial port is a computer interface that transmits bits one at a time. The interface can have as few as three lines: one to carry data in each direction plus a ground line. Many interfaces have up to six additional lines to carry status and control information.

A serial link using ASCII Hex format sends the decimal value 225 by transmitting the two bytes above. A computer that receives ASCII Hex values can convert the characters to numeric values or use the data as is.

Listing 4 used WriteLine and ReadLine to exchange data. The SerialPort class provides several other options for reading and writing text. To send a string without appending a LF, use the Write method. The Write method can also write a Char array to a port. The ReadExisting method in Listing 5 returns immediately with everything in the receive buffer or an empty string if the buffer is empty. The ReadTo method is like ReadLine but enables defining any character as the delimiter. The Read method copies received characters into a Char array.

The SerialPort class provides two methods for reading bytes. The Read method can copy a specified number of received bytes from the receive buffer into a byte array beginning at a specified offset.

I am trying to send some information to an Arduino board by using a script... only, I have to admit I'm a bit of newbie in VB and I am a little stuck. I have set up a boolean toggle so that if the toggle is set to true, then it should send an 'H' to the board and set Pin 13 to High. If the toggle is set to false, then the script will send an 'L' to the board and turn pin off. I can load the Physical Pixel example to the board so that when it receives either of these letters, it will either turn the Pin on or off... so basically, what I need to do is to somehow send a letter to the board... through VB. But, I'm a little lost on where to even begin.This link was suggested as a starting place ( )... but I'm not actually using Visual Studio or Express. I'm using a plug-in (called Grasshopper) for a 3d software package (called Rhino). You have the ability to write your own custom components through VB, which is where I got the idea to send data directly from this plugin to the Arudino. If someone could help me with some basic instructions on where to begin, or how to do this simple example... I would greatly appreciate it. Cheers, Andy

This is great! Your sample code worked perfectly. I know this was a very basic example, but my main hurdle had been how to get any data transmitted from Grasshopper to the Arduino. I can now change the toggle and turn on the LED... very dumb... but now, the sky is the limit.BTW, here is a link to the main Grasshopper page. and here is a link to the scripting page in Grasshopper: Scripting and Code Tutorials - Grasshopper.As I mentioned, what's nice about Grasshopper is that it allows you to set parameters that control 3d objects. Now, that I can successfully talk between Grasshopper and the Arduino, I can easily design something in 3d in the computer and have it also output the data in realtime to a board which will also control the physical environment. I'm much more proficient in Grasshopper (vs. so if you have any questions regarding the interface, don't hesitate to ask.Thanks again.

I have a follow up question. I have successfully sent data from Grasshopper to the Arduino through VB. But, what if I wanted to reverse the flow of information. What if I wanted to send data from the Arduino to Grasshopper (through VB).Here's a simple example. Let's say I have a photocell hooked up so that when I turn on the serial monitor, I get a stream of voltage information that is coming into the computer. How would I read that information in Grasshopper (again using VB). The problem in the past with Grasshopper has always been with reading information into the program... It has no problem streaming data out. But, it only refreshes the algorithm if something has changed in Rhino or in Grasshopper... and since nothing has really changed in the Grasshopper definition or in the Rhino viewport, it doesn't know to refresh the solution, and thus get new information in from an external file. In the recent release of Grasshopper (just 2 weeks ago) there is a new timer component that will refresh the solution based on any time interval that you give it. I think MaxMSP has something very similar (I think it's called the Metronome). So, I think I can use this component to automatically refresh the solution every (1 sec for example) to retrieve the new information being sent from the Arduino. My main question is how to script it in VB to read this information. I may not have been clear, but if you have any suggestions, I would really appreciate. Thanks again for your help so far!

I don't know if you can call functions from Grasshopper, but if you can then the following should read one line from the serial port. You could call it whenever you want to retrieve data from the port.

Ok... I may have posted prematurely... although I still haven't figured it out. I realized that I had defined the Function ReceiveSerialData(), but I never called that function to actually go and get the data. So, I put line in between the Subs that called the ReceiveSerialData() function, only now I'm getting an error message that says, "Script exception: Access to the port 'COM3' is denied." Which is really weird because I was definitely able to send data from Grasshopper to the COM3 port in our previous example. Have I set up the code correctly?

No, nothing else was talking to the COM3 port. In fact, that was the only COM port available. I should say that when I did try to run the code (twice), it actually froze the Rhino application. As if it were in a continuous loop. Is there a chance that I didn't call the receive function properly? How should the code between the subs look like?

It looks like you have the Arduino serial monitor attached to the com port. Only one device on the system can use the port, so if Arduino is attached, you won't be able to get Grasshopper attached. The access denied error is telling us the same thing: that something else is already talking to the serial port.

Well... I've tried this several different ways, and I'm still getting a continuous loop error. I made sure the Serial Monitor wasn't running and I tried a slightly different version of the code to try to get out of the continuous looping problem. But, it still locks up every time I call the function.Here's how the Grasshopper side of things is set up. I have created a boolean toggle that feeds either a true or false value into the VB script component. I have also connected a Timer Component which should refresh the solution at any given time interval... in this case every 1 sec. So, ideally... when you flip the toggle to True, the script will call the function and retrieve whatever data is coming into the COM3 port. This will be refreshed every 1 sec. However, it's getting stuck. Here is the modified code I tried, but it still isn't working. I've also posted a picture of the setup. If you have any more ideas, I would really appreciate them. Thanks for all the help along the way. I feel like we are really close. Let me know if the images don't show up again

As an embedded developer who writes desktop software mostly for configuration of, and data download from, peripheral devices, I use serial data streams a lot. Mostly USB virtual serial posts from FTDI, but also the USB Communication Device Class and real 16550-compatible UARTs on the PCI bus. Since looking at data through an in-circuit emulator debug interface is generally a miserable experience, getting serial data communication with a custom PC application is essential to analyzing data quality and providing feedback on hardware designs. C# and the .NET Framework provide a rapid application development that is ideal for early development that needs to track changing requirements as hardware designs evolve. Ideal in most respects, I should say.

Backing up important data and memories is an important task that should not be neglected. Just as important as performing Linux backups is verifying that the backups made are good and can be used toRead more

Ben, I am currently in the process of porting a VB6 serial port app to .NET and have found the performance to be inadequate. The app sends a series of messages with responses, before posting the next message. The intermessage gap is several milliseconds larger for the .NET version.

At a high level it is a similar concept to the DataReceived event because it allows the application to respond to incoming data in an event-driven fashion. Important differences are that the event actually carries the received data with it, so the application is all set for processing serial data, and the implementation does this with a single API call, which is far lower overhead.

As far as I know, readAsync or WriteAsync does not support Readtimeout or Writetimeout. Even creating a manual timeout and setting a condition would not work since await operator is sitting there to get more data, although reading task is complete.

Jason, yes those are still planned, but my dissertation committee asked for some edits before publication so those are a higher priority for my writing bandwidth this month. More serial port blog posts in March. Probably.

Context: I have 1Mb one directional stream of data from a device to PC. Chunks are copied for several times, so it is possible to recover if one is lost. Frame error happens from time to time. Frame error usually means that some data is physically lost. But for me it is essential to get as much possible around it. 350c69d7ab


Welcome to the group! You can connect with other members, ge...


Group Page: Groups_SingleGroup
bottom of page