Lost Connection and Data Issues

Lost Connection with Arduino Hardware

Unplugged Hardware

The most common cause of a lost connection is an unplugged cable. Check the cable and make sure that it is firmly plugged in.

Board with Low Data Memory

If your Arduino® board has low data memory, you may lose connection while working with large data sets. If this occurs, remove all libraries that you are not using from the board to free up some space. For example, create an arduino object with no libraries.

a = arduino('COM3','Uno','Libraries','');

Too Many Device Objects

If you have created too many add-on objects for your Arduino hardware, those objects may use up memory on the board and cause a lost connection. Clear all objects and reconnect. Make sure that you use fewer peripheral devices.

Communication Loss When Writing to I2C Device

Make sure that the power line is always connected. With I2C devices, the server code can stop working if the power line is disconnected.

Connection Lost When Using Timer

You can lose connection to your Arduino board when you use it with a timer. The callback timer on your system runs between lines of MATLAB® code. This can cause the timer to issue a call to the device at the same time you issue a read, write, or configuration change on the Arduino board, or click a button in the interface. The operation throws an error with a re-entrancy exception. For example, consider a timer function that polls Arduino pins.

t = timer('Name','PinSniffer','BusyMode','Drop','ExecutionMode','fixedSpacing','Period',1,'TimerFcn',{@pollArduinoPins,a}); 
function tester(src,event,a) 
try 
    value = 1:10; 
    for iloop = 2:13 
        if strcmpi(configurePin(a,iloop),'D3') 
            value(iloop-1) = readDigitalPin(a,iloop); 
        end 
    end 
catch e 
    stop(src); 
    rethrow(e); 
end 

In this situation, you issue a command to configure pins on your Arduino board and read the value.

configurePin(a,'A0','DigitalOuput'); 
value = readDigitalPin(a,'A0'); 

If your read command and the poll run simultaneously, the timer can interrupt your calls before it has completed. This results in a re-entrancy exception.

To work around this situation, stop the timer before you manually issue a command.

stop(t);
configurePin(a,'A0','DigitalOuput'); 
value = readDigitalPin(a,'A0'); 
start(t);

Connection Lost when Using Encoders

You can lose connection between the Arduino board and MATLAB, when the encoder shaft is rotating fast or the A/B signal rate of the encoder crosses the threshold of 17–18 kHz. When one of these situations happens, the interrupts used by A/B channels completely block the serial communication on the Arduino board which also relies on interrupts. Therefore, it can stop the Arduino board from sending a response back to MATLAB, and you see the following error message:

Host and client connection is lost. Make sure the board is plugged in, and recreate arduino and related objects.

However, once the shaft stops rotating or rotates slower, the serial communication works as usual.

Data Issues

Pin Not Receiving Data

Make sure devices that have floating or high impedance pins have proper pull-up or pull-down resistors. Use configurePin to set the mode to pull-up internally.

Pin Not Receiving Proper Signal

Make sure that your pins are properly configured. For example, a pull-up or a pull-down resistor is being used for reading data. Use configurePin to set the mode to pull-up internally.

Strange Data

If your Arduino hardware has low data memory, you may see strange data. If this occurs, delete all libraries that you are not using from the board to free some space. To delete libraries, create an arduino object with no libraries.

a = arduino('COM3','Uno','Libraries','');

Incorrect Input or Output

You can get incorrect readings if you are using the wrong pin. For example, if you are writing to a pin configured as input or reading from a pin configured as a pull-up.