The Data Dispenser has three buttons along the edge of the Feather board, labeled D0, D1, and D2 from top to bottom. Each button has a short press, long press and in some cases a double-tap or combo action. This page covers every feature and how to access it.
Quick Reference
D0 short Rescan animation / return to bars D0 double Demo mode (auto-cycle all screens) D0 long CO2 offset calibration D1 short F/C toggle (bars) / zoom (graphs) D1 long Toggle LCARS name badge D2 short Cycle views D2 long Toggle brightness (full / dim) D0+D2 long Sleep 5 min idle Auto sleep Any button Wake from sleep
Boot Up
When you power on the device or wake it from sleep, the display runs a scan animation. All four bars sweep up from zero to full, then settle to the current sensor readings. A three-pulse haptic buzz confirms the scan. The STCC4 sensor needs a couple of seconds to stabilize after power-on, so the first CO2 reading may be slightly off — it settles within a few update cycles.
Bar Graph View
This is the default home screen. Four shaped colored bars show live sensor data, each updating every two seconds. From left to right the bars are:
- Blue for CO2 in parts per million
- Green for humidity as a percentage
- Yellow for temperature in Fahrenheit or Celsius
- Red for battery level as a percentage.
The bar shape matches the original prop's on-screen graphic — a narrow peak at the top that tapers into a wide base. Each bar has a subtle anti-aliased edge and a colored gradient background behind it.
The label below each bar shows the current value. CO2 displays as a raw ppm number, humidity and battery show a percentage, and temperature shows the value either in Fahrenheit (F) or Celsius (C).
Battery Indicator
When the device is charging via USB, a blinking white lightning bolt appears inside the base of the battery bar along with the estimated time to full charge. The percentage label stays in its normal position below the bar.
When running on battery, the estimated time remaining appears inside the bar base in white text. The estimate becomes more accurate after a few minutes as the MAX17048 fuel gauge learns the current draw. Under one hour it switches from hours to minutes.
CO2 Warning Alert
When the CO2 reading exceeds the warning threshold of 700 ppm, the haptic motor fires a double-pulse vibration alert. The alert has a 30-second cooldown to avoid constant buzzing in a stuffy room. You can adjust the threshold by changing CO2_WARN in the tunables section of code.py.
Â
Sleep Mode
D0 plus D2 long press:Â Hold both D0 and D2 for two seconds to put the device to sleep immediately. The display blanks and the device enters a low-power light sleep loop.
Auto sleep: If no button is pressed for five minutes, the device sleeps automatically. You can change this timeout by editing IDLE_SLEEP_S in the tunables.
Wake:Â Press any button to wake the device. The display restores to the previous brightness setting and a boot scan animation plays. The CO2 calibration offset is preserved across sleep.
Â
Button D0 — Scan and Calibrate
Short press:Â On the bar view, D0 triggers a rescan animation. The bars surge from their current level to full, drain to empty, then refill to the latest sensor values with a staggered cascade. On any other screen, D0 returns you to the bar view.
Double tap: Quickly press D0 twice to enter demo mode. The device automatically cycles through every screen with a three-second hold on each — bar view with animation, diagnostics, all three graphs in both zoomed and full views, the name badge, then back to bars. This is hands-free and great for video recording or showing off the prop.
Long press (2 seconds):Â Runs CO2 offset calibration. Take the device outside to fresh air first. Hold D0 for two seconds and the screen shows CALIBRATING followed by the computed offset value. The offset adjusts all future CO2 readings so that outdoor air reads as 400 ppm. The offset is saved to sleep memory and survives sleep/wake cycles. To reset the calibration, repeat the process in known-good outdoor air.
Â
Button D1 — Toggle and Zoom
Short press on bar view: Toggles the temperature display between Fahrenheit and Celsius. The temperature bar plays a solo rescan animation — surging to full, draining, then refilling with the new unit label.
Short press on graph views:Â Toggles zoom. When zoomed in, the graph shows the last 15 minutes of data with wide chunky bars that fill the full graph width. Press again to zoom back out to the full history view. The zoom state resets when you leave the graph views.
Long press (2 seconds):Â Toggles the LCARS name badge screen. Long press again to return to whatever view you were on before.
Button D2 — Cycle Views and Brightness
Short press:Â Cycles through the display views in order: bar graph, LCARS diagnostics, CO2 graph, humidity graph, temperature graph, then back to bars. Each graph screen is built the first time you access it to save memory at boot.
Long press (2 seconds):Â Toggles display brightness between full (1.0) and dim (0.15). The dim mode is useful for indoor display or when the bright screen would be distracting. The brightness setting is remembered through sleep/wake cycles.
Â
LCARS Diagnostics Screen
The stats screen shows a two-column layout with LCARS-style framing. The left column has labels in blue and values in gold on the right. It displays the current session uptime in hours and minutes, the number of history samples collected out of 120, and the current reading with session min/max range for CO2, humidity and temperature. Battery percentage is shown at the bottom.
LCARS Graph Screens
Three separate graph screens show rolling history for CO2, humidity and temperature. Each graph is a bar histogram with the LCARS frame on the left showing the current value, unit, min/max range and a 2HR time window label.
The bars are color-coded by zone. For CO2, green is safe (under 600 ppm), yellow is elevated (600 to 800 ppm) and red is high (above 800 ppm). Humidity and temperature have their own zone thresholds tuned to typical comfort ranges.
Data is sampled every 60 seconds into a circular buffer of 120 entries, giving two hours of rolling history. The bar width adjusts dynamically — with just a few samples the bars are wide and centered, gradually slimming down as the buffer fills. Dashed threshold lines mark the zone boundaries.
Press D1 on any graph screen to toggle zoom. The zoomed view shows the last 15 minutes with wide bars for a detailed close-up of recent changes.
Â
LCARS Name Badge
The badge screen shows your personalized information in the LCARS style with a gold frame and colored accent blocks. Your name appears at double size, followed by your title, registry ID, sensor status and project name. A QR code on the right side links to the URL you specify — scannable directly from the display at conventions or meetups.
All badge text is editable in the tunables section at the top of code.py: BADGE_NAME, BADGE_TITLE, BADGE_ID, BADGE_PROJECT and BADGE_QR_URL. Set the QR URL to an empty string to hide the QR code.
Page last edited April 07, 2026
Text editor powered by tinymce.