The operation <= cannot accept the arguments: , [*empty-string*], [35]


From my understanding, if the number of labels which is a fixed global variable (value = 3) is equal to the number of split parts (this should have a value of 3 if there are no anomalies in the data received). Then, the program proceeds to assign label 6 to the first split part of the data, label 7 to the second split part and label 8 should contain the third split part of the data received. At least, that's what i tried to do. But for some reason, it didn't work.

Below is the original block that you posted:


But the "min" block (from my understanding) is simply comparing the number of labels which is fixed to a value of 3, and the number of the items or split parts from the received data, and whichever is the smallest is returned as the max value or limit to that range. But i think that would not work for this application? Since, the program should be doing a test to check if the number of labels match the split parts or items. I'm confused about why this "min" part is needed.

These are the labels which should display the 3 values split from the incoming message. The labels 6, 7 and 8 are listed in that order and displayed from top to bottom in the app interface.

Yes, i used semicolon to split the data. The sample data from the Arduino Serial Monitor also shows the same, as in the quote at the end of the first post in this thread. As shown below, i put the semicolon in the Clock1. Timer block, under the call split_and_display block. The semicolon block is fed as an actual parameter in the call block.

Edit: OK, i gave it more thought and i think maybe i understand the reason for using the "min" block. So, here is a sample of the incoming data or message expected:

32.43;-35.56;4.03;
37.92;-130.60;5.89;
34.74;-207.77;4.78;
28.08;-250.13;0.15;

So, let's say there is a data corruption (i suppose this would be additional text displayed on the Arduino Serial Monitor based on given commands typed in the Serial Monitor or sent from the app) after the third split part, then only the first 3 parts will be considered and displayed. Am i correct in understanding the reason behind the "min" block? What are other types of data corruption that would require the "min" block?
Like this example:

32.43;-35.56;4.03; This is extra text typed in Arduino Serial Monitor or sent from MIT app
37.92;-130.60;5.89;
This is extra text typed in Arduino Serial Monitor or sent from MIT app
34.74;-207.77;4.78;
28.08;-250.13;0.15;

I made the following changes as suggested and the app labels work now but the incoming data is extremely slow to change (it can take up to 30 seconds or more!) compared to how fast it changes in the Arduino Serial Monitor. It seems like it is buffering all the incoming data but it is taking too long to update it in the app labels. How to fix this?
Edit: I solved this by decreasing the TimerInterval to 100 ms and increasing the Loop interval time for data sent from the Arduino to 300 ms. This combination seems to work fine with almost instant data displayed in the app labels. There is a slight lag but i guess this is unavoidable.

The only problem now is that the commands sent from the app is not working. The up and down buttons in the app should turn ON or OFF the onboard LED on the Arduino. When the BT module is unplugged and the Arduino UNO connected to the PC via USB cable, i can control the onboard LED by typing the value 1 or 2 in the Arduino Serial Monitor. But after i connect the BT module to the Arduino UNO, i tried the ON and OFF buttons in the app but neither work. Any suggestions?