# How split data received from serial port

**URL:** https://discourse.nodered.org/t/how-split-data-received-from-serial-port/5686
**Category:** General
**Created:** [11 December 2018 17:45 UTC](https://discourse.nodered.org/t/how-split-data-received-from-serial-port/5686 "2018-12-11T17:45:14Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![antedoro](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/antedoro/32/4440_2.png) [@antedoro](https://discourse.nodered.org/u/antedoro)
#### Post date: [11 December 2018 17:45 UTC](https://discourse.nodered.org/t/how-split-data-received-from-serial-port/5686/1 "2018-12-11T17:45:14Z")

</div>

Hi All,  
My Node-red is receiving data from Arduino serial port.

The data Arduino is sending cam from this code:

```
 Serial.print(rpm_SetPoint);
  Serial.print("\t");
  Serial.print(angleValue);
  Serial.print("\t");
  Serial.println(rpmValue);

```

I need to separete every line Arduino is sending in e single value to elaborate separatly.  
From Node-Red I write this function:  
var output = msg.payload.split("\t");

```
var velimp = parseInt(output[1]);
var angle = parseInt(output[2]);
var vel = parseInt(output[3]);

var msg1 = {payload : velimp};
var msg1 = {payload : angle};
var msg1 = {payload : vel};

return [msg1, msg2, msg3];

```

But don't work  
Arduino is correcly connected.

Can you help me to find the mistake.

Vincenzo

---

<div class="post-metadata">

### Author: ![ukmoose](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ukmoose/32/13_2.png) [@ukmoose](https://discourse.nodered.org/u/ukmoose)
#### Post date: [11 December 2018 19:41 UTC](https://discourse.nodered.org/t/how-split-data-received-from-serial-port/5686/2 "2018-12-11T19:41:40Z")

</div>

attach a debug node to your arduino node to see what Node-RED is receiving

---

<div class="post-metadata">

### Author: ![antedoro](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/antedoro/32/4440_2.png) [@antedoro](https://discourse.nodered.org/u/antedoro)
#### Post date: [12 December 2018 06:43 UTC](https://discourse.nodered.org/t/how-split-data-received-from-serial-port/5686/3 "2018-12-12T06:43:58Z")

</div>

I get this:  
155 90 255

![code](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/2X/4/4d1e1f30ef245bb23aafdb48021ebbb2c9c7140c.png)

---

<div class="post-metadata">

### Author: ![ukmoose](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/ukmoose/32/13_2.png) [@ukmoose](https://discourse.nodered.org/u/ukmoose)
#### Post date: [12 December 2018 09:00 UTC](https://discourse.nodered.org/t/how-split-data-received-from-serial-port/5686/4 "2018-12-12T09:00:35Z")

</div>

So your string would also appear to contain something else ( i"m guessing a carriage return on the end as `155<tab>90<tab>255` would be 10 characters.

You use

```auto
var msg1 = {payload : velimp};
var msg1 = {payload : angle};
var msg1 = {payload : vel};

```

but then return

```auto
return [msg1, msg2, msg3];

```

So I'm guessing two of those msg1 should be msg2 and msg3

Also if you are returning like that you need 3 outputs from your function node . If you wish them to be sent as separate messages to the same output see  
[https://nodered.org/docs/writing-functions#multiple-messages](https://nodered.org/docs/writing-functions#multiple-messages)

---

<div class="post-metadata">

### Author: ![dceejay](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/dceejay/32/38_2.png) [@dceejay](https://discourse.nodered.org/u/dceejay)
#### Post date: [12 December 2018 09:40 UTC](https://discourse.nodered.org/t/how-split-data-received-from-serial-port/5686/5 "2018-12-12T09:40:56Z")

</div>

Also arrays in Javascript start from index 0 not 1...  
 ![image](https://us1.discourse-cdn.com/flex026/uploads/nodered/original/2X/f/f9bb3655ca9dd78b1d4e315d43951c7957434db5.png)

---

<div class="post-metadata">

### Author: ![antedoro](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/antedoro/32/4440_2.png) [@antedoro](https://discourse.nodered.org/u/antedoro)
#### Post date: [12 December 2018 11:04 UTC](https://discourse.nodered.org/t/how-split-data-received-from-serial-port/5686/6 "2018-12-12T11:04:50Z")

</div>

Sorry my mistake is very stupid.  
I rewritten the code and it's all ok.

Thi is new code:

```
var output = msg.payload.split("\t");

var velimp = parseInt(output[0]);
var angle = parseInt(output[1]);
var vel = parseInt(output[2]);

var msg1 = {payload : velimp};
var msg2 = {payload : angle};
var msg3 = {payload : vel};

return [msg1, msg2, msg3];

```

Last question:  
It' possible to do get same results with split function?

Thanks

---

<div class="post-metadata">

### Author: ![Colin](https://sea2.discourse-cdn.com/flex026/user_avatar/discourse.nodered.org/colin/32/17040_2.png) [@Colin](https://discourse.nodered.org/u/Colin)
#### Post date: [12 December 2018 21:44 UTC](https://discourse.nodered.org/t/how-split-data-received-from-serial-port/5686/7 "2018-12-12T21:44:22Z")

</div>

> [@antedoro](#):
>
> possible to get same results with split function?

When programming there are almost always multiple ways of achieving a result. You could use regular expressions here for example. However the clue is in your question. You ask how to split the data up so it is likely that a function called split that splits the data up is likely to be a good match.
