Input format $RC2 and $RC3 used by RaceDAC and DIY-loggers

edited February 2017 in RaceChrono for Android
This discussion was created from comments split from: RaceLogger bluetooth input format.


  • aolaol
    edited July 2016
    Here's the format description for RaceDAC and DIY devices:


    - $ is message start character
    - RC2 and RC3 are message identifiers
    - time stamp is not used (empty). (for blended GPS support this should be a GPS synchronized realtime timestamp in NMEA 0183 format).
    - count is an overflowing line counter 0-65535. Can be left empty if GPS timestamp is provided.
    - acc fields: -1.000 = -1G, 1.000 = +1G
    - gyro fields: degrees per second, -1.000 = -1 deg/s, 1.000 = +1 deg/s
    - dx are digital channel fields, range -2000000.000 - 2000000.000
    - ax are analog channel fields, range -2000000.000 - 2000000.000
    - * is message separator character
    - NMEA 0183 type checksum, with two uppercase hexadecimal digits (one byte)
    - each line is terminated with CR plus LF

    So pretty much same as $RC1, but with 3 more analog channels, one added digital channel (other being RPM field), and lost gyro channels (which were never used by RaceChrono on the $RC1 format either...).

    Notice: steady update rate is needed for this format due to the algorithm that RaceChrono uses to synchronize with GPS time. So pick update rate that is close as possible to 1/5/10/20/30/40/50/100 Hz. If you have to skip an update, make sure you add the 'count' field even for the skipped updates.

    Updated 4.3.2014 with some new information about v2.60 and update rate
    Updated 24.7.2016 with $RC3 format with gyro channels and more analog channels
  • Updated 24.7.2016 with $RC3 format with gyro channels and more analog channels
  • What version of RaceChrono will support the $RC3 message format?
  • RaceChrono v4.7 will have the $RC3, currently under development but soon in beta testing.
  • Great! With $RC2 I was slowly short in space.
  • @aol I am doing some updates to my data logger for my track bike and thought I would start to populate the count attribute in my RC3 lines just for future proofing in case I move to different data paths (BT & Wifi) or decide to use a different external GPS receiver etc.

    I see above that the value is an unsigned int (65535). Currently I am sending RC3 records at 50/s. I know I can slow my rate down but currently I get to the max value after about 20min

    So should I restart at 0 if I wrap?
    Is there an option to use a long (or unsigned long)? Lots of record bandwidth with that counter size.

    Thanks, Jeff
  • BTW, sending 50/s mostly 'because I can' though at top speed 260kph I am doing about 72m/s and since I am working to add suspension sensors thought 50 records per second was about right to see my suspension every 1-1.5 metres at high speed.

  • aolaol
    edited January 2018
    After 65535 comes 0 and the code is tested to do that. 50 Hz should be no problem for RC. On some phones 50 Hz graphs may be sluggish, but I plan to optimise this further in future.
  • @aol thanks for the quick reply. Will wrap back to 0
  • Does the checksum have to be uppercase? Will the program work with lowercase checksum?
    I have a program that calculates the checksum but it seems to produce a lowercase checksum even if this is the code: checksum = String (checkSum(buffer), HEX), buffer being the string of data.
    Am I doing something wrong with the code?

  • RaceChrono should accept lowercase, but NMEA 0183 standard says it needs to be uppercase.

    Maybe you're just calculating it incorrectly.



    Verify: => 34 (paste without *34)
  • I checked the string you gave me and the site and my program calculates the correct checksum. (34 for you string)

    Here are some of my strings:

  • Looks good. Are you having problems with it?
  • No problems so far, the app receives and displays data. But I tested it only indoors. Not on the kart yet.
  • OK, thought there was some problem with it, and that's why you're asking about the checksum.
  • No problem (as far as I can see). I just wanted to be sure that the data is not corrupted in some way for the app.
  • @guzu,RPM Sensor How did you design?
  • @lzzl551 It is a hall effect sensor mounted on the lead to the spark plug. Because it is very high current, the hall will latch and you can count the number of sparks/unit of time and get a RPM value.
  • @guzu Can you provide some information for reference?
  • @lzzl551 Sent you an e-mail.
  • @aol I was wondering if it is possible to place somewhere in the $RC sentence a number that tells the time it took to do a lap (taken from a interrupt pin from an Arduino when a hall sensor passes over the magnetic strip in the track, instead of the GPS)?

    Basically, can I display laptime using a DIY sensor (without or alongside the GPS laptime)?

    RaceChrono is very precise, but I am just curious if I can get this to work when the sky is cloudy or maybe on an indoor track.

  • I don't get very good cellular service at the track where I ride mostly (Calabogie Onatrio Canada) but even on a rainy miserable day I get GPS just fine.

    I believe (Aol can confirm) RaceChrono uses the GPS lock to signal that things are working and you won't get much out of using RaceChrono without GPS.

    If you are going to do the work to get a sensor in the track etc then why use RaceChrono at all? Just put a LCD on the microcontroller and show the time. Like this project:

    What I get out of RaceChrono is the timing but also that I can see when I am on/off throttle for a particular corner. If you want to know the data per corner etc you need the GPS to determine where you are on the track.

    Just my $0.02
  • You are correct Jeff.
    I just had an extra pin on My Arduino and I thought that I could use it like this.
    I am not planing to use RachChrono without GPS. This is just a curiosity of mine. :smile:
    Do you know if a hall sensor mounted on the floor of the kart will pick up the magnetic strip of the track?

  • guzu, just count the time between interrupts, and send the value continously in one channel to racechrono, and display the gauge in digital format. That should do the trick?
  • @deadslow But wouldn't that display just a number (ex. 123004)? I would want to se something like 1:22.43
  • aolaol
    edited March 2018
    Currently there's no magnetic strip support, but it is an interesting idea and I've given it some thought earlier, but haven't been able to come up with anything useful yet.

    I would not put a lap time to $RC sentences, I'd just output 1 when it's trigged and 0 when not trigged, or something similar. You'd be able to see the physical start/finish location vs. GPS location and time, for every lap in the analysis.

    If you really want the time (for live display purposes for example), then just output decimal seconds. 1:22.43 would be displayed as 82.43, not too hard to interpret with quick glance.
  • @aol Thanks aol.
    Simple ideea with the decimal seconds :smile: :blush:
Sign In or Register to comment.