Qt Serial Port Communication Example On Resume

Summary: Constants | Methods | Inherited Methods

Sending a data to Arduino through serial port using Qt Sending a data to Arduino through serial port using Qt. This topic has been deleted. Only users with topic management privileges can see it. (just an example). It works when I use Arduino IDE serial monitor. However I need to send and receive data in a Qt project. I wrote this code but. Using the Serial Ports in Visual C++. The serial communications ports are COM1–COM8, but most computers only have COM1 and COM2 installed. Some have a single communication port (COM1). Here, the Windows API is discussed and used to operate the COM ports.

public final class BluetoothSocket
extends Object implements Closeable

java.lang.Object
android.bluetooth.BluetoothSocket

A connected or connecting Bluetooth socket.

The interface for Bluetooth Sockets is similar to that of TCP sockets: Socket and ServerSocket. On the server side, use a BluetoothServerSocket to create a listening server socket. When a connection is accepted by the BluetoothServerSocket, it will return a new BluetoothSocket to manage the connection. On the client side, use a single BluetoothSocket to both initiate an outgoing connection and to manage the connection.

The most common type of Bluetooth socket is RFCOMM, which is the type supported by the Android APIs. RFCOMM is a connection-oriented, streaming transport over Bluetooth. It is also known as the Serial Port Profile (SPP).

To create a BluetoothSocket for connecting to a known device, use BluetoothDevice#createRfcommSocketToServiceRecord. Then call connect() to attempt a connection to the remote device. This call will block until a connection is established or the connection fails.

Qt Serial Port Example

To create a BluetoothSocket as a server (or 'host'), see the BluetoothServerSocket documentation.

Once the socket is connected, whether initiated as a client or accepted as a server, open the IO streams by calling getInputStream() and getOutputStream() in order to retrieve InputStream and OutputStream objects, respectively, which are automatically connected to the socket.

BluetoothSocket is thread safe. In particular, close() will always immediately abort ongoing operations and close the socket.

Note: Requires the Manifest.permission.BLUETOOTH permission.

Developer Guides

For more information about using Bluetooth, read the Bluetooth developer guide.

See also:

Summary

Constants

intTYPE_L2CAP

L2CAP socket

intTYPE_RFCOMM

RFCOMM socket

intTYPE_SCO

SCO socket

Public methods

voidclose()

Closes this stream and releases any system resources associated with it.

voidconnect()

Attempt to connect to a remote device.

intgetConnectionType()

Get the type of the underlying connection.

InputStreamgetInputStream()

Get the input stream associated with this socket.

intgetMaxReceivePacketSize()

Get the maximum supported Receive packet size for the underlying transport.

intgetMaxTransmitPacketSize()

Get the maximum supported Transmit packet size for the underlying transport.

OutputStreamgetOutputStream()

Get the output stream associated with this socket.

BluetoothDevicegetRemoteDevice()

Get the remote device this socket is connecting, or connected, to.

booleanisConnected()

Get the connection status of this socket, ie, whether there is an active connection with remote device.

Inherited methods

From class java.lang.Object
Objectclone()

Creates and returns a copy of this object.

booleanequals(Object obj)

Indicates whether some other object is 'equal to' this one.

voidfinalize()

Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.

final Class<?>getClass()

Returns the runtime class of this Object.

inthashCode()

Returns a hash code value for the object.

final voidnotify()

Wakes up a single thread that is waiting on this object's monitor.

final voidnotifyAll()

Wakes up all threads that are waiting on this object's monitor.

StringtoString()

Returns a string representation of the object.

final voidwait(long timeout, int nanos)

Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object, or some other thread interrupts the current thread, or a certain amount of real time has elapsed.

final voidwait(long timeout)

Causes the current thread to wait until either another thread invokes the notify() method or the notifyAll() method for this object, or a specified amount of time has elapsed.

final voidwait()

Causes the current thread to wait until another thread invokes the notify() method or the notifyAll() method for this object.

From interface java.io.Closeable
abstract voidclose()

Closes this stream and releases any system resources associated with it.

From interface java.lang.AutoCloseable
abstract voidclose()

Closes this resource, relinquishing any underlying resources.

Constants

TYPE_L2CAP

L2CAP socket

Constant Value: 3 (0x00000003)

TYPE_RFCOMM

RFCOMM socket

Constant Value: 1 (0x00000001)

TYPE_SCO

SCO socket

Constant Value: 2 (0x00000002)

Public methods

close

Qt Serial Port Communication

Closes this stream and releases any system resources associated with it. If the stream is already closed then invoking this method has no effect.

As noted in AutoCloseable#close(), cases where the close may fail require careful attention. It is strongly advised to relinquish the underlying resources and to internally mark the Closeable as closed, prior to throwing the IOException.

Throws
IOException

connect

Attempt to connect to a remote device.

Qt Serial Port Communication Example On Resume

This method will block until a connection is made or the connection fails. If this method returns without an exception then this socket is now connected.

Creating new connections to remote Bluetooth devices should not be attempted while device discovery is in progress. Device discovery is a heavyweight procedure on the Bluetooth adapter and will significantly slow a device connection. Use BluetoothAdapter#cancelDiscovery() to cancel an ongoing discovery. Discovery is not managed by the Activity, but is run as a system service, so an application should always call BluetoothAdapter#cancelDiscovery() even if it did not directly request a discovery, just to be sure.

close() can be used to abort this call from another thread.

Throws
IOExceptionon error, for example connection failure

getConnectionType

Get the type of the underlying connection.

Returns
intone of TYPE_RFCOMM, TYPE_SCO or TYPE_L2CAP

getInputStream

Get the input stream associated with this socket.

The input stream will be returned even if the socket is not yet connected, but operations on that stream will throw IOException until the associated socket is connected.

Returns
InputStreamInputStream
Throws
IOException

getMaxReceivePacketSize

Get the maximum supported Receive packet size for the underlying transport. Use this to optimize the reads done on the input stream, as any call to read will return a maximum of this amount of bytes - or for some transports a multiple of this value.

Returns
intthe maximum supported Receive packet size for the underlying transport.

getMaxTransmitPacketSize

Get the maximum supported Transmit packet size for the underlying transport. Use this to optimize the writes done to the output socket, to avoid sending half full packets.

Returns
intthe maximum supported Transmit packet size for the underlying transport.

getOutputStream

Get the output stream associated with this socket.

The output stream will be returned even if the socket is not yet connected, but operations on that stream will throw IOException until the associated socket is connected.

Returns
OutputStreamOutputStream
Throws
IOException

Serial Port Communication Program

getRemoteDevice

Get the remote device this socket is connecting, or connected, to.

Returns
BluetoothDeviceremote device

isConnected

Get the connection status of this socket, ie, whether there is an active connection with remote device.

Returns
booleantrue if connected false if not connected

Serial communications provide an easy and flexible way for your Arduino board to interact with your computer and other devices. This chapter explains how to send and receive information using this capability.

Chapter 1 described how to connect the Arduino serial port to your computer to upload sketches. The upload process sends data from your computer to Arduino and Arduino sends status messages back to the computer to confirm the transfer is working. The recipes here show how you can use this communication link to send and receive any information between Arduino and your computer or another serial device.

Note

Serial communications are also a handy tool for debugging. You can send debug messages from Arduino to the computer and display them on your computer screen or an external LCD display.

The Arduino IDE (described in Recipe 1.3) provides a Serial Monitor (shown in Figure 4-1) to display serial data sent from Arduino.

Figure 4-1. Arduino Serial Monitor screen

You can also send data from the Serial Monitor to Arduino by entering text in the text box to the left of the Send button. Baud rate (the speed at which data is transmitted, measured in bits per second) is selected using the drop-down box on the bottom right. You can use the drop down labeled “No line ending” to automatically send a carriage return or a combination of a carriage return and a line at the end of each message sent when clicking the Send button, by changing “No line ending” to your desired option.

Qt Serial Port Communication Example On Resume

Your Arduino sketch can use the serial port to indirectly access (usually via a proxy program written in a language like Processing) all the resources (memory, screen, keyboard, mouse, network connectivity, etc.) that your computer has. Your computer can also use the serial link to interact with sensors or other devices connected to Arduino.

Implementing serial communications involves hardware and software. The hardware provides the electrical signaling between Arduino and the device it is talking to. The software uses the hardware to send bytes or bits that the connected hardware understands. The Arduino serial libraries insulate you from most of the hardware complexity, but it is helpful for you to understand the basics, especially if you need to troubleshoot any difficulties with serial communications in your projects.

Serial hardware sends and receives data as electrical pulses that represent sequential bits. The zeros and ones that carry the information that makes up a byte can be represented in various ways. The scheme used by Arduino is 0 volts to represent a bit value of 0, and 5 volts (or 3.3 volts) to represent a bit value of 1.

Note

Using 0 volts (for 0) and 5 volts (for 1) is very common. This is referred to as the TTL level because that was how signals were represented in one of the first implementations of digital logic, called Transistor-Transistor Logic (TTL).

Boards including the Uno, Duemilanove, Diecimila, Nano, and Mega have a chip to convert the hardware serial port on the Arduino chip to Universal Serial Bus (USB) for connection to the hardware serial port. Other boards, such as the Mini, Pro, Pro Mini, Boarduino, Sanguino, and Modern Device Bare Bones Board, do not have USB support and require an adapter for connecting to your computer that converts TTL to USB. See http://www.arduino.cc/en/Main/Hardware for more details on these boards.

Some popular USB adapters include:

  • Mini USB Adapter (http://arduino.cc/en/Main/MiniUSB)

  • USB Serial Light Adapter (http://arduino.cc/en/Main/USBSerial)

  • FTDI USB TTL Adapter (http://www.ftdichip.com/Products/FT232R.htm)

  • Modern Device USB BUB board (http://shop.moderndevice.com/products/usb-bub)

  • Seeedstudio UartSBee (http://www.seeedstudio.com/depot/uartsbee-v31-p-688.html)

Some serial devices use the RS-232 standard for serial connection. These usually have a nine-pin connector, and an adapter is required to use them with the Arduino. RS-232 is an old and venerated communications protocol that uses voltage levels not compatible with Arduino digital pins.

You can buy Arduino boards that are built for RS-232 signal levels, such as the Freeduino Serial v2.0 (http://www.nkcelectronics.com/freeduino-serial-v20-board-kit-arduino-diecimila-compatib20.html).

RS-232 adapters that connect RS-232 signals to Arduino 5V (or 3.3V) pins include the following:

Qt Serial Port Programming

  • RS-232 to TTL 3V–5.5V adapter (http://www.nkcelectronics.com/rs232-to-ttl-converter-board-33v232335.html)

  • P4 RS232 to TTL Serial Adapter Kits (http://shop.moderndevice.com/products/p4)

  • RS232 Shifter SMD (http://www.sparkfun.com/commerce/product_info.php?products_id=449)

Qt Serial Port Communication Example On Resume Examples

A standard Arduino has a single hardware serial port, but serial communication is also possible using software libraries to emulate additional ports (communication channels) to provide connectivity to more than one device. Software serial requires a lot of help from the Arduino controller to send and receive data, so it’s not as fast or efficient as hardware serial.

Qt Serial Port Communication Example On Resume Sample

The Arduino Mega has four hardware serial ports that can communicate with up to four different serial devices. Only one of these has a USB adapter built in (you could wire a USB-TTL adapter to any of the other serial ports). Table 4-1 shows the port names and pins used for all of the Mega serial ports.

Port name

Transmit pin

Receive pin

Serial

1 (also USB)

0 (also USB)

Serial1

18

19

Serial2

16

17

Serial3

14

15

You will usually use the built-in Arduino Serial library to communicate with the hardware serial ports. Serial libraries simplify the use of the serial ports by insulating you from hardware complexities.

Sometimes you need more serial ports than the number of hardware serial ports available. If this is the case, you can use an additional library that uses software to emulate serial hardware. Recipes 4.13 and 4.14 show how to use a software serial library to communicate with multiple devices.

The hardware or software serial libraries handle sending and receiving information. This information often consists of groups of variables that need to be sent together. For the information to be interpreted correctly, the receiving side needs to recognize where each message begins and ends. Meaningful serial communication, or any kind of machine-to-machine communication, can only be achieved if the sending and receiving sides fully agree how information is organized in the message. The formal organization of information in a message and the range of appropriate responses to requests is called acommunications protocol.

Messages can contain one or more special characters that identify the start of the message—this is called the header. One or more characters can also be used to identify the end of a message—this is called the footer. The recipes in this chapter show examples of messages in which the values that make up the body of a message can be sent in either text or binary format.

Sending and receiving messages in text format involves sending commands and numeric values as human-readable letters and words. Numbers are sent as the string of digits that represent the value. For example, if the value is 1234, the characters 1, 2, 3, and 4 are sent as individual characters.

Binary messages comprise the bytes that the computer uses to represent values. Binary data is usually more efficient (requiring fewer bytes to be sent), but the data is not as human-readable as text, which makes it more difficult to debug. For example, Arduino represents 1234 as the bytes 4 and 210 (4 * 256 + 210 = 1234). If the device you are connecting to sends or receives only binary data, that is what you will have to use, but if you have the choice, text messages are easier to implement and debug.

There are many ways to approach software problems, and some of the recipes in this chapter show two or three different ways to achieve a similar result. The differences (e.g., sending text instead of raw binary data) may offer a different balance between simplicity and efficiency. Where choices are offered, pick the solution that you find easiest to understand and adapt—this will probably be the first solution covered. Alternatives may be a little more efficient, or they may be more appropriate for a specific protocol that you want to connect to, but the “right way” is the one you find easiest to get working in your project.

Arduino 1.0 introduced a number of Serial enhancements and changes :

  • Serial.flush now waits for all outgoing data to be sent rather than discarding received data. You can use the following statement to discard all data in the receive buffer: while(Serial.read() >= 0) ; // flush the receive buffer

  • Serial.write and Serial.print do not block. Earlier code would wait until all characters were sent before returning. From 1.0, characters sent using Serial.write are transmitted in the background (from an interrupt handler) allowing your sketch code to immediately resume processing. This is usually a good thing (it can make the sketch more responsive) but sometimes you want to wait until all characters are sent. You can achieve this by calling Serial.flush() immediately following Serial.write().

  • Serial print functions return the number of characters printed. This is useful when text output needs to be aligned or for applications that send data that includes the total number of characters sent.

  • There is a built-in parsing capability for streams such as Serial to easily extract numbers and find text. See the Discussion section of Recipe 4.5 for more on using this capability with Serial.

  • The SoftwareSerial library bundled with Arduino has had significant enhancements; see Recipes 4.13 and 4.14.

  • A Serial.peek function has been added to let you ‘peek’ at the next character in the receive buffer. Unlike Serial.read, the character is not removed from the buffer with Serial.peek.

An Arduino RS-232 tutorial is available at http://www.arduino.cc/en/Tutorial/ArduinoSoftwareRS232. Lots of information and links are available at the Serial Port Central website, http://www.lvr.com/serport.htm.

In addition, a number of books on Processing are also available:

  • Getting Started with Processing: A Quick, Hands-on Introduction by Casey Reas and Ben Fry (Make).

  • Processing: A Programming Handbook for Visual Designers and Artists by Casey Reas and Ben Fry (MIT Press).

  • Visualizing Data by Ben Fry (O’Reilly; search for it on oreilly.com).

  • Processing: Creative Coding and Computational Art by Ira Greenberg (Apress).

  • Making Things Talk by Tom Igoe (Make). This book covers Processing and Arduino and provides many examples of communication code.