But when I tried converting string to float type using float() – I get a lot of NaN values which shouldn’t be coming since data is numerical.
Alternatively, I then tried getting data from serial port as byte array. I can’t find a way to convert this array to my original float value in P5.js.
Any ideas on how to convert byte array to float or avoid getting NaN when converting string to float?
Appreciate your time and help. Thanks.
I have used following methods:
From String to Float
let incomingData;
let dataValue;
incomingData = serial.readStringUntil('\n').trim();
dataValue = float(incomingData); //standard method in P5.js -- returns NaN values
dataValue = parseFloat(incomingData);
//again returns maximum values as NaN
From Byte array to float
let incomingBytes = [];
let dataValue;
incomingBytes = serial.readBytesUntil('\n');
dataValue = dataView.getFloat64(bytebuffer);
// This javascript method is not supported by P5.js it seems
Picture illustrates original float values that I am trying to get from serial port.
Its float() or parseFloat(). I have tried both.
Also, if I do this conversion in serialEvent – the NaN returns are much more than when I do it in draw(). I am not sure why.
La cosa es sencilla… leer bytes en un buffer hasta recibir un char concreto, tras recibirlo hay que mirar si han llegado mas de una secuencia de datos y hacer un split() usando ese mismo char… y luego enviar los datos a la función del evento.
Esto lo he preparado para Bluetoth en processing 3.4.5 y funciona muy bien con dispositivos como Arduino o raspberry pi
This is a processing (or java based) code. I have done this on processing before. But now I have to make a switch to P5.js for running my program in a web browser.
I have tried implementing try and catch as well. Doesn’t work.
When I print the incoming string type data – everything seems to look fine. But when I convert string to float; NaN values come up that shouldn’t be there.
As seen in the last image, there were empty strings or null values coming. I just had to put a check for it before doing the conversion.
Thanks to all the commenters.
let incomingData; //incoming serial value is stored in this variable
let temparray = [1000]; //temporary array used in updating final array
let plot_from_here = [1000]; //final array of values to plot
function setup(){}
function draw(){}
function serialEvent() {
if(serial.available()>0){
incomingData = serial.readStringUntil('\n'); //read string until next line
if(incomingData != ""){
incomingData = trim(incomingData); //trim white spaces
arrayCopy(temparray,0, temparray,1,999); //Copy value from index 0 to index 1
temparray[0]= float(incomingData); //Update index 0 of temparray for the incoming value -- the value is converted to float from string type
plot_from_here = temparray; //update values in final array
print(plot_from_here);
}
}
}