About using JSON (help)

This is how I receive data via Bluetooth. I will only use MACAddr, Xrms, Yrms and Zrms values ​​from this data. I need to save them all as text and create 3 dynamic graphics with X, Y and Z values. The chart will be updated as data becomes available.


(Canned Reply: ABG- Export & Upload .aia)
Export your .aia file and upload it here.

export_and_upload_aia

.

DinamikGrafik.aia (17.2 KB)

You are asking to receive exactly 20 bytes of text, then expecting to be able to parse those 20 bytes as JSON?

How are you enforcing fitting the JSON into exactly 20 bytes?

Be sure to use println() at the end of each message to send from the sending device, to signal end of message.

Only use print() in the middle of a message.

Be sure not to println() in the middle of a message, or you will break it into two short messages and mess up the item count after you split the message in AI2.

Do not rely on timing for this, which is unreliable.

In the AI2 Designer, set the Delimiter attribute of the BlueTooth Client component to 10 to recognize the End of Line character.
BlueToothClient1_Properties
Also, return data is not immediately available after sending a request,
you have to start a Clock Timer repeating and watch for its arrival in the Clock Timer event. The repeat rate of the Clock Timer should be faster than the transmission rate in the sending device, to not flood the AI2 buffers.

In your Clock Timer, you should check

  Is the BlueTooth Client still Connected?
  Is Bytes Available > 0?
     IF Bytes Available > 0 THEN
       set message var  to BT.ReceiveText(-1) 

This takes advantage of a special case in the ReceiveText block:

ReceiveText(numberOfBytes)
Receive text from the connected Bluetooth device. If numberOfBytes is less than 0, read until a delimiter byte value is received.

If you are sending multiple data values per message separated by | or comma, have your message split into a local or global variable for inspection before trying to select list items from it. Test if (length of list(split list result) >= expected list length) before doing any select list item operations, to avoid taking a long walk on a short pier. This bulletproofing is necessary in case your sending device sneaks in some commentary messages with the data values.

Some people send temperature and humidity in separate messages with distinctive prefixes like "t:" (for temperature) and "h:" (for humidity).
(That's YAML format.)

The AI2 Charts component can recognize these and graph them. See Bluetooth Client Polling Rate - #12 by ABG

To receive YAML format messages, test if the incoming message contains ':' . If true, split it at ':' into a list variable, and find the prefix in item 1 and the value in item 2.

.

The 20 byte value there can be changed, it doesn't matter.

Do you have access to the sketch code that is sending the JSON?
If so, please upload that too.

This is how I would handle the worst case, where multiple messages need to arrive before there is enough JSON to parse.

I have no idea how the graph extension works. Ask its author, or use the AI2 graph component.


DinamikGrafik (1).aia (19.1 KB)

Thank you it worked. but the values ​​are not float.

Are you talking about those values ending in E6?

That's scientific notation, E6 = * 10^6.

There is a math block to reformat as a given number of decimal digits, if you like.

Can you help me revise?

For example, I need to see 532554.35

Try the format as decimal block

http://ai2.appinventor.mit.edu.ezproxy.canberra.edu.au/reference/blocks/math.html#format

format as decimal

Formats a number as a decimal with a given number of places after the decimal point. The number of places must be a non-negative integer. The result is produced by rounding the number (if there were too many places) or by adding zeros on the right (if there were too few).

Taifun

DinamikGrafikedited1.aia (18.7 KB)

What do I need to change?

Please try something and if you got stuck, then provide a screenshot of your relevant blocks

If you are asking for help, I recommend you to make it as easy for others to be able to help you ...
You probably will get more feedback then...

which means in your case post a screenshot of your relevant blocks...

To download the aia file, upload it to App Inventor, open it, do some bug hunting for you, etc... this takes time, and most people will not do that...
Thank you.

Taifun


Trying to push the limits! Snippets, Tutorials and Extensions from Pura Vida Apps by icon24 Taifun.

draggable block: