Skip to content
Scouting & Strategy·Lesson 18 of 32

Project 1: Configure a QRScout Form for REEFSCAPE

Build a real, scannable QRScout config.json with counters, booleans, and selects for the 2025 REEFSCAPE game, then test the full scan-to-spreadsheet pipeline.

Sign in to track progress, earn XP, and save lessons.

Goal

Produce a working config.json for QRScout (FRC Team 2713, Red Hawk Robotics) that a stand scout can fill in during a REEFSCAPE match, and that encodes everything into one scannable QR code. QRScout runs offline in a browser at https://frc2713.github.io/QRScout/.

The fields you need (from the official REEFSCAPE manual)

REEFSCAPE robots score Coral (PVC pipe) on four levels and Algae (balls) into the Processor or Net, then climb a Cage. Coral is worth more in AUTO than TELEOP: AUTO L1=3, L2=4, L3=6, L4=7; TELEOP L1=2, L2=3, L3=4, L4=5. Algae in the Net=4, in the Processor=6. Leave (auto)=3, Park=2, shallow Cage=6, deep Cage=12. Because the auto/teleop coral values differ, your form must split coral counters by phase so each can be weighted correctly later.

A minimal config.json

{
  "$schema": "../schema.json",
  "title": "2713 Reefscape Scout",
  "page_title": "REEFSCAPE Match Scouting",
  "delimiter": "\t",
  "sections": [
    {
      "name": "Pre-Match",
      "fields": [
        { "title": "Scout Name", "type": "text", "code": "scoutName",
          "required": true, "formResetBehavior": "preserve" },
        { "title": "Match #", "type": "number", "code": "matchNumber",
          "required": true, "formResetBehavior": "increment" },
        { "title": "Team #", "type": "TBA-team-and-robot", "code": "teamNumber",
          "required": true, "formResetBehavior": "reset" }
      ]
    },
    {
      "name": "Auto",
      "fields": [
        { "title": "Left Start Line", "type": "boolean", "code": "autoLeave",
          "defaultValue": false, "formResetBehavior": "reset" },
        { "title": "Auto Coral L4", "type": "counter", "code": "autoCoralL4",
          "defaultValue": 0, "formResetBehavior": "reset" },
        { "title": "Auto Coral L1", "type": "counter", "code": "autoCoralL1",
          "defaultValue": 0, "formResetBehavior": "reset" }
      ]
    },
    {
      "name": "Teleop",
      "fields": [
        { "title": "Teleop Coral L4", "type": "counter", "code": "telCoralL4",
          "defaultValue": 0, "formResetBehavior": "reset" },
        { "title": "Algae Processor", "type": "counter", "code": "algaeProc",
          "defaultValue": 0, "formResetBehavior": "reset" },
        { "title": "Endgame", "type": "select", "code": "endgame",
          "choices": { "none": "None", "park": "Park",
            "shallow": "Shallow Cage", "deep": "Deep Cage" },
          "defaultValue": "none", "formResetBehavior": "reset" }
      ]
    }
  ]
}

Key design choices that prevent real errors:

  • formResetBehavior: "preserve" on Scout Name keeps the scout's name between matches; "increment" on Match # auto-advances; "reset" clears scoring counters every match. These three values are the only ones QRScout accepts.
  • Use the TBA-team-and-robot field type so scouts pick the team from the pre-loaded match schedule (shown as "Team 2713 (Red 1)") instead of typing a 4-digit number, the single biggest source of mislabeled data.
  • The delimiter is a tab (\t), so when you scan the QR, the values drop into adjacent spreadsheet cells in one paste.

Test the pipeline before the event

  1. Load your config via Upload Config or Load from URL (host it on GitHub Pages: https://<user>.github.io/<repo>/config.json).
  2. Fill out a fake match, generate the QR, and scan it with a laptop webcam into the QRScout scanner page.
  3. Confirm the tab-separated row lands correctly in Google Sheets. Verify column order matches your field order exactly.

If anything is off, you fix it at home, not at 8 a.m. on match day.

Key takeaways

  • QRScout configs are plain JSON: sections contain fields, each with a type, camelCase code, and one of three formResetBehavior values (reset, preserve, increment).
  • Use TBA-team-and-robot so scouts select teams from the schedule instead of typing numbers, eliminating the top mislabeling error.
  • Always scan a test QR into your live spreadsheet before an event to validate column order and delimiter behavior.

Lesson quiz

Required

Answer all 3 questions correctly to complete this lesson.

1.In a QRScout config.json, how are the form's inputs organized at the top level?

2.Which set of values is valid for a QRScout field's "formResetBehavior" property?

3.How can a team deploy a custom REEFSCAPE config to scouts without rebuilding QRScout?

Answer every question to submit.