Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Setting precision to mm #36

Open
berbaba opened this issue Jun 9, 2021 · 2 comments
Open

Setting precision to mm #36

berbaba opened this issue Jun 9, 2021 · 2 comments

Comments

@berbaba
Copy link

berbaba commented Jun 9, 2021

Hello!

I have been trying to change the precision of the device's reads but have been unsuccessful.

The TFMPlus.h file includes a line (137) with the definition for STANDARD_FORMAT_MM assigned to a certain hexadecimal value. This is next to other commands like SET_FRAME_RATE (with its corresponding hexadecimal value) that are used with the sendCommand() function in the TFMPlus.cpp, but said function works for the following commands:
SET_FRAME_RATE
SET_BAUD_RATE
OBTAIN_FIRMWARE_VERSION
SYSTEM_RESET
RESTORE_FACTORY_SETTINGS
SAVE_SETTINGS
and the change of format is not implemented here.

I would like to be able to fix this but I don't have enough knowledge and the warning of causing the device to be unresponsive prevents me from changing some things.

As far as I understand it should follow the commented steps in the function:

bool TFMPlus::sendCommand( uint32_t cmnd, uint32_t param)
{
   // Step 1 - Build the command data to send to the device

 if( cmnd == STANDARD_FORMAT_MM)     // If the command is Standard Format MM...
    {    
              memcpy( &cmndData[ 3], &param, X);     // add the X byte Standard Format parameter. 
// 3 is the array position for the example I copied (SET_FRAME_RATE)
// but maybe in this case is different. I don't know X either.
    }
 
     // Step 2 - Send the command data array to the device

     // Step 3 - Get command reply data back from the device.

    // Step 4 - Perform a checksum test.

    // Step 5 - Interpret different command responses.

    // Step 6 - Set READY status and go home

}

I assume steps 2, 4 and 6 should stay the same, but don't know if this command generates a reply or not (steps 3 and 5).
At the moment there is not much more I can do.

Anyway, thank you for the library!

@budryerson
Copy link
Owner

Berbaba,

The two formatting commands do not require a parameter, so the param byte is set to 0.
In the included example sketch, the command would look like this:

tfmP.sendCommand( STANDARD_FORMAT_MM, 0))

Both formatting commands return only an echo of the command. They do not return a pass/fail bit or other useful information. Therefor, the library only examines the reply for a correct checksum byte.

// The library 'sendCommand( cmnd, param)' function
// defines a command (cmnd) in the the following format:
// 0x     00       00       00       00
//     one byte  command  command   reply
//     payload   number   length    length
                                                 
#define    SET_FRAME_RATE             0x00030606   // These commands each return
#define    SET_BAUD_RATE              0x00060808   // an echo of the command
#define    STANDARD_FORMAT_CM         0x01050505   //           "
#define    PIXHAWK_FORMAT             0x02050505   //           "
#define    STANDARD_FORMAT_MM         0x06050505   //           "

Please bear in mind that what you call "precision" is only how the data is formatted. The accuracy (±5cm) and resolution (±5mm) of the device do not change.

I hope this is helpful. I'm not sure of your question, so please let me know if there is anything more I can add.

Bud Ryerson
San Francisco

@berbaba
Copy link
Author

berbaba commented Jun 14, 2021

Thank you very much for replying so quick! I changed it and worked as expected, the measures had an extra digit for milimetres, just needed to change the printf as having an extra cipher wouldn't show measures with 5 digits (measures over 10 m = 1000 cm = 10000 mm) and the text printing "mm" instead of "cm". I will put this as a pull request in case you want to add it to the library (more as a concept than an a good code).
Again thank you.

Bernat
Valencia

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants