I'm trying to send data to an Arduino via a serial communication. I'm using a buffer to store bytes I'd like to send and then use the fwrite
command to write them to serial.
Sender (Matlab)
disp(bufferSend);
fwrite(xbee,bufferSend,'uint8');
disp('sent:');
xbee.ValuesSent
the display command shows that 255 bytes hav2 been sent:
2 1 0 0 0 1 1 13 17 0 30 0 12 14 0 0 0 1 0
[...] 0 0 0 [...] 0
sent:
255
Receiver (Arduino)
the received values are correct till the 7-th byte. Only 70 bytes are received;
The Arduino serial monitor prints one byte at the time with the following code:
byte getData;
[...]
while(xbee.available()>0)
{
getData = xbee.read();
Serial.print("Received: ");
Serial.print(getData);
Serial.print(" Bin: ");
Serial.print(getData,BIN);
Serial.print(" Hex: ");
Serial.print(getData,HEX);
Serial.print(" cont: ");
Serial.print(cont);
Serial.println();
[...]
}
Here is the output:
Matlab communication established.
Received: 2 Bin: 10 Hex: 2 cont: 2
Received: 1 Bin: 1 Hex: 1 cont: 3
Received: 0 Bin: 0 Hex: 0 cont: 4
Received: 0 Bin: 0 Hex: 0 cont: 5
Received: 0 Bin: 0 Hex: 0 cont: 6
Received: 1 Bin: 1 Hex: 1 cont: 7
Received: 1 Bin: 1 Hex: 1 cont: 8
Received: 141 Bin: 10001101 Hex: 8D cont: 9
Received: 145 Bin: 10010001 Hex: 91 cont: 10
Received: 128 Bin: 10000000 Hex: 80 cont: 11
Received: 143 Bin: 10001111 Hex: 8F cont: 12
Received: 128 Bin: 10000000 Hex: 80 cont: 13
Received: 134 Bin: 10000110 Hex: 86 cont: 14
Received: 135 Bin: 10000111 Hex: 87 cont: 15
Received: 128 Bin: 10000000 Hex: 80 cont: 16
Received: 128 Bin: 10000000 Hex: 80 cont: 17
Received: 128 Bin: 10000000 Hex: 80 cont: 18
Received: 128 Bin: 10000000 Hex: 80 cont: 19
Received: 128 Bin: 10000000 Hex: 80 cont: 20
Received: 128 Bin: 10000000 Hex: 80 cont: 21
Received: 128 Bin: 10000000 Hex: 80 cont: 22
Received: 128 Bin: 10000000 Hex: 80 cont: 23
Received: 128 Bin: 10000000 Hex: 80 cont: 24
Received: 128 Bin: 10000000 Hex: 80 cont: 25
Received: 128 Bin: 10000000 Hex: 80 cont: 26
Received: 128 Bin: 10000000 Hex: 80 cont: 27
Received: 128 Bin: 10000000 Hex: 80 cont: 28
Received: 128 Bin: 10000000 Hex: 80 cont: 29
Received: 128 Bin: 10000000 Hex: 80 cont: 30
Received: 128 Bin: 10000000 Hex: 80 cont: 31
Received: 128 Bin: 10000000 Hex: 80 cont: 32
Received: 128 Bin: 10000000 Hex: 80 cont: 33
Received: 128 Bin: 10000000 Hex: 80 cont: 34
Received: 64 Bin: 1000000 Hex: 40 cont: 35
Received: 64 Bin: 1000000 Hex: 40 cont: 36
Received: 64 Bin: 1000000 Hex: 40 cont: 37
Received: 64 Bin: 1000000 Hex: 40 cont: 38
Received: 64 Bin: 1000000 Hex: 40 cont: 39
Received: 64 Bin: 1000000 Hex: 40 cont: 40
Received: 64 Bin: 1000000 Hex: 40 cont: 41
Received: 64 Bin: 1000000 Hex: 40 cont: 42
Received: 64 Bin: 1000000 Hex: 40 cont: 43
Received: 64 Bin: 1000000 Hex: 40 cont: 44
Received: 64 Bin: 1000000 Hex: 40 cont: 45
Received: 64 Bin: 1000000 Hex: 40 cont: 46
Received: 64 Bin: 1000000 Hex: 40 cont: 47
Received: 64 Bin: 1000000 Hex: 40 cont: 48
Received: 64 Bin: 1000000 Hex: 40 cont: 49
Received: 64 Bin: 1000000 Hex: 40 cont: 50
Received: 64 Bin: 1000000 Hex: 40 cont: 51
Received: 64 Bin: 1000000 Hex: 40 cont: 52
Received: 64 Bin: 1000000 Hex: 40 cont: 53
Received: 64 Bin: 1000000 Hex: 40 cont: 54
Received: 64 Bin: 1000000 Hex: 40 cont: 55
Received: 64 Bin: 1000000 Hex: 40 cont: 56
Received: 64 Bin: 1000000 Hex: 40 cont: 57
Received: 64 Bin: 1000000 Hex: 40 cont: 58
Received: 64 Bin: 1000000 Hex: 40 cont: 59
Received: 32 Bin: 100000 Hex: 20 cont: 60
Received: 32 Bin: 100000 Hex: 20 cont: 61
Received: 32 Bin: 100000 Hex: 20 cont: 62
Received: 32 Bin: 100000 Hex: 20 cont: 63
Received: 32 Bin: 100000 Hex: 20 cont: 64
Received: 0 Bin: 0 Hex: 0 cont: 65
Received: 0 Bin: 0 Hex: 0 cont: 66
Received: 0 Bin: 0 Hex: 0 cont: 67
Received: 0 Bin: 0 Hex: 0 cont: 68
Received: 0 Bin: 0 Hex: 0 cont: 69
Received: 0 Bin: 0 Hex: 0 cont: 70
Received: 0 Bin: 0 Hex: 0 cont: 71
[...]
If the eigth value (i.e 13) is placed in the first positions on the buffer, Arduino receives it correctly.
Is it related to the fwrite
function and buffer dimensions? Is it a case of buffer overflow?
Solution
Slow down the Baudrate! In my case 19200 worked