Skip to content

Commit 299f5e9

Browse files
committed
better timer and docs
1 parent c1a3e53 commit 299f5e9

File tree

9 files changed

+1059
-92
lines changed

9 files changed

+1059
-92
lines changed

README.md

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,19 @@ We changed to github pages. Please use https://frc2713.github.io/QRScout/ until
66

77
A QR Code-based scouting system for FRC
88

9+
## Table of Contents
10+
11+
- [Getting Started](#getting-started)
12+
- [Using QRScout](#using-qrscout)
13+
- [Hosting a Custom JSON Config](#hosting-a-custom-json-config-for-your-team)
14+
- [config.json](#configjson)
15+
- [Root](#root)
16+
- [Individual Sections](#individual-sections)
17+
- [Individual Fields](#individual-fields)
18+
- [Using Multi-Select Input](#using-multi-select-input)
19+
- [Using Image Input](#using-image-input)
20+
- [Using Timer Input](#using-timer-input)
21+
922
## Getting started
1023

1124
QRScout is a web app. To open it, all 3you have to do is visit https://frc2713.github.io/QRScout/
@@ -261,3 +274,96 @@ For example, to include a field diagram in your scouting form:
261274
```
262275

263276
This allows scouts to reference the field layout while recording robot positions or movements during a match.
277+
278+
### Using Timer Input
279+
280+
The timer input type allows users to measure and record time durations during a match. This is particularly useful for tracking how long robots take to perform specific actions or measuring cycle times for repeated tasks.
281+
282+
#### Configuration in config.json
283+
284+
To configure a timer field in your `config.json`:
285+
286+
```json
287+
{
288+
"title": "Climb Time",
289+
"type": "timer",
290+
"required": false,
291+
"code": "climbTime",
292+
"description": "Time taken to complete climb",
293+
"formResetBehavior": "reset",
294+
"defaultValue": 0,
295+
"outputType": "average"
296+
}
297+
```
298+
299+
#### Timer Input Properties
300+
301+
- **defaultValue**: The initial value of the timer in seconds (typically 0).
302+
- **description** (optional): A brief explanation of what the timer is measuring.
303+
- **outputType**: Determines how multiple timer values are processed. Can be either:
304+
- `"average"` (default): Records the average of all timer values.
305+
- `"list"`: Records all timer values as a list.
306+
307+
#### Using Timer in the Form
308+
309+
The timer input provides a simple interface with the following controls:
310+
311+
1. **Start/Stop Button**: Toggles the timer on and off
312+
2. **Reset Button**: Sets the timer back to 0 and records the current time as a lap
313+
3. **Undo Button**: Resets the timer without recording a lap
314+
4. **Time Display**: Shows the current elapsed time in seconds
315+
5. **Average Display**: Shows the average time and number of recorded laps when `outputType` is `"average"`
316+
6. **List Display**: Shows a list of lap times when `outputType` is `"list"`
317+
318+
To use the timer during scouting:
319+
320+
1. Click "Start" when the robot begins the action you want to time
321+
2. Click "Stop" when the action is completed
322+
3. Click "Reset" to record the time and prepare for another measurement
323+
4. The final time(s) will be recorded in the QR code data according to the outputType setting
324+
5. Use "Undo" if you need to restart without recording the current time
325+
326+
#### Data Format
327+
328+
In the generated QR code, timer values are stored differently based on the outputType:
329+
330+
- With `outputType: "average"`: A single numeric value representing the average of all recorded times in seconds.
331+
- With `outputType: "list"`: A comma-separated list of all recorded times in seconds.
332+
333+
For example, if a robot completed three climbs in 12.5, 10.2, and 11.8 seconds:
334+
335+
- With `outputType: "average"`, the QR code will contain `11.5` (the average)
336+
- With `outputType: "list"`, the QR code will contain `12.5,10.2,11.8` (all values)
337+
338+
#### FRC Scouting Examples
339+
340+
Timer inputs are particularly useful for FRC scouting in scenarios like:
341+
342+
- **Climb Time**: Measure how long it takes for a robot to complete a climbing action
343+
- **Cycle Time**: Track the time between scoring actions to calculate scoring rate
344+
- **Defense Recovery**: Measure how quickly a robot recovers after being defended
345+
- **Auto Completion**: Time how long it takes to complete autonomous routines
346+
- **Intake Speed**: Measure how quickly a robot can intake game pieces
347+
348+
For example, to track cycle times for scoring game pieces:
349+
350+
```json
351+
{
352+
"title": "Scoring Cycle Time",
353+
"type": "timer",
354+
"required": false,
355+
"code": "scoringCycleTime",
356+
"description": "Time between consecutive scoring actions",
357+
"formResetBehavior": "reset"
358+
}
359+
```
360+
361+
This allows scouts to accurately measure and compare the efficiency of different robots' scoring mechanisms and strategies.
362+
363+
#### Best Practices for Timer Input
364+
365+
1. **Clear Instructions**: Ensure scouts know exactly when to start and stop the timer
366+
2. **Consistent Measurement**: Define clear start and end points for timed actions
367+
3. **Multiple Timers**: Consider using separate timers for different phases or actions
368+
4. **Backup Method**: Have a secondary way to record time in case of user error
369+
5. **Practice Before Competition**: Make sure scouts are comfortable using the timer function before actual matches

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"dev": "vite",
1010
"build": "tsc && npm run schema && vite build ",
1111
"preview": "vite preview",
12-
"schema": "npx tsx src/scripts/generateJsonSchema.ts > src/assets/schema.json && npx tsx src/scripts/generateJsonSchema.ts > public/schema.json"
12+
"schema": "ts-node src/scripts/generateJsonSchema.ts src/assets/schema.json && cp src/assets/schema.json public/schema.json"
1313
},
1414
"dependencies": {
1515
"@headlessui/react": "^1.7.19",

0 commit comments

Comments
 (0)