-
Notifications
You must be signed in to change notification settings - Fork 0
user manual
Ook beschikbaar in het Nederlands: Gebruikershandleiding
Your KITKAT is a robot cat companion: it shows an animated eye, tells the time and weather, plays internet radio, dances, plays games, glows, and reacts to petting, light and movement with its own moods.
KITKAT has two joysticks and a touch strip (its back/head).
Right joystick — controls the current screen:
| Input | Action |
|---|---|
| ▲ / ▼ | move selection up/down |
| ◀ / ▶ | change value / move left-right |
| OK (center press) | confirm / start / play-stop |
Left joystick — global shortcuts (work on any screen):
| Input | Action |
|---|---|
| ◀ / ▶ | previous / next screen |
| ▲ | open the Quick Menu |
| ▼ | PANIC STOP — instantly stops motors, LEDs and audio. Works everywhere, even mid-game |
| CANCEL (center press) | back / exit |
Touch strip: stroke it slowly enough to cross at least 3 pads over at least 3 seconds to register as petting — a fast flick may not register. Petting always makes KITKAT feel Love, and (if Mood → Audio is on) plays a purr for as long as you keep stroking.
- On: press the left joystick center button. (KITKAT also wakes itself for the alarm, and — if Wake/Move is enabled — when you tap or knock it.)
- Off: open Menu → Power → Shut Down, or just leave it alone (see Idle sleep below).
- Restart: Menu → Power → Restart.
While it's charging/docked, "off" looks like a couple of quick automatic restarts. The charger backfeeds power past the internal power switch, so KITKAT physically can't cut its own power while plugged in. Instead it reboots into a bare-bones standby mode, turns everything off, and polls the power button/alarm/tap-wake directly until one of them fires — that's normal, not a malfunction.
No button/touch activity (and no charger plug/unplug) for a while triggers, in order:
| ...while running on battery | ...while charging/docked |
|---|---|
| Backlight off at 5 min idle | Backlight dims at 5 min idle |
| — | Radio stream stops at ~3 h 55 min idle (device stays on) |
| Full shutdown at 15 min idle — extended to 4 h if the radio is playing, so a battery-powered stream doesn't get cut off just because no buttons were touched | Full shutdown at 8 h idle |
Turn on Settings → Backlight to disable all of this (screen and radio never sleep on their own); a Power → Timer countdown (15–120 min) is a separate one-shot "turn off in N minutes" that ignores activity entirely once armed.
Connect the charger. On the screen's top status row:
- battery icon blinking = charging
- star icon = charger connected (also stays on when charging is complete)
If the battery is critically low (below ~3.2 V, checked once at boot and every 10 seconds while running), KITKAT shows "BATTERY LOW – CHARGE ME NOW" for a few seconds and turns itself off — also disabling tap-to-wake and the alarm's power-on so it can't wake itself back up onto a battery that's still too low. It will refuse to stay on until you connect the charger. (The battery-icon low-battery warning on the status row fires a little earlier, around 3.4 V, so you normally get a heads-up before the automatic shutdown.)
To play music from the radio or to get weather updates or to sync automatically the time, you need to establish a wifi connection. Read in section 9 - wifi more about how to connect to the wifi.
Screens rotate automatically: Clock (10 s) → Weather (20 s) → Eye (20 s) → Radio (20 s) → Jokes (self-paced) and around again. Use right-joystick ◀/▶ to browse manually; going past the last screen reaches the Menu (it never appears on its own).
- Clock — time and date from the built-in real-time clock (keeps running while KITKAT is off). Shows the next alarm time underneath if one is set.
- Weather — current conditions for your location (found automatically via your internet connection), refreshed hourly, with two rotating pages (temperature/humidity/description, then wind/cloud/rain/pressure) and animated rain when it rains. Shows "No WiFi" until it has data.
- Eye — KITKAT's animated eye showing its current mood (see §5). Pet the touch strip while this screen is up!
- Radio — internet radio player (see §4).
- Jokes — a dad joke: word-wrapped setup, a short pause, then the punchline, then it moves on by itself (no need to press anything). Told from a local library built into the firmware, so it works without WiFi too.
Status icons (top edge, always visible): WiFi connected (arrows icon), charging (battery icon blinking) / charger connected (star icon).

(No WiFi yet? The Weather screen looks like this instead:)
A fast overlay for the most-used settings, reachable from any screen — you don't need to be in the Menu first. It uses the same right-joystick scheme as everything else (§1): ▲/▶ open it and move between/change the 5 rows below, ◀ moves back up/decreases a value, OK confirms where noted, CANCEL closes it and returns you to exactly the screen/state you were on before.
| Row | What it does |
|---|---|
| Vol | radio volume ◀/▶ in 5 % steps; OK = instant play/stop |
| Motor | motors on/off |
| LEDs | LED mode: Off / Auto / Manual |
| Move | pick a dance move (needs Motor ON) — see the full list below |
| FX | pick a light effect or saved color slot — see the full list below |
Changes here take effect immediately and are saved the same as making them from the Menu — Quick Menu, the Menu, and the web dashboard all read/write the exact same settings, so whichever one you use last "wins."
Getting to the full Menu instead: the Quick Menu only covers these 5 shortcuts — for everything else (WiFi, boot mode, the alarm, Time, Games, etc.) use the actual Menu, reached by pressing right-joystick ▶ repeatedly past the last screen in the rotation (Clock → Weather → Eye → Radio → Jokes → Menu), or ◀ from Clock to reach it from the other direction. The Menu never appears in the automatic rotation — you always have to navigate to it deliberately. See §8 for everything in it.
Wiggle, Spin, Rock, Bow, Twist, Moonwalk, Zigzag, Drumroll, Victory, Zigzag B, Bow B, Moonwalk F, Drumroll B, Party.
| # | Name | # | Name | # | Name |
|---|---|---|---|---|---|
| 1 | Breath | 8 | Curious | 15 | Prowl |
| 2 | Blink | 9 | Angry | 16 | Twinkle |
| 3 | Purr | 10 | Happy | 17 | Police |
| 4 | Alert | 11 | Matrix | 18 | Sunrise |
| 5 | Sleep | 12 | Fire | 19 | Cozy |
| 6 | Scan | 13 | Thunder | 20 | Midnight |
| 7 | Heartbeat | 14 | Hypno | 21 | Disco |
...followed by Slot 1–5, the custom per-LED colors you design and save in the web dashboard (§7). Picking anything here only actually lights up the LEDs while LEDs → Manual (or Mood → LED Mode → Manual) is set — see §5 for how LED Mode gates all of this.
Only in "Web Radio" boot mode (the default — see §8).
On the Radio screen:
- Select the station row (▲/▼), browse stations with ◀/▶ — a
*marks a station you've selected but not started yet — then press OK to tune. - The volume row changes volume in 5 % steps. Going below 0 % stops the radio; pressing ▶ while stopped starts it again. (Under the hood, 0–100 % on screen maps onto a 40–100 % driver range — anything quieter than that is inaudible noise on this hardware, so "0 %" just means stopped.)
- The PLAY/STOP row toggles playback with ◀/▶ or OK.
While playing, the screen shows the WiFi signal strength and the scrolling song/program title, when the station broadcasts one (ICY metadata). If a stream drops out, KITKAT notices within about a second and reconnects to the same station automatically.
KITKAT remembers the station, volume and whether it was playing, and resumes after the next power-on.
Managing stations (add/remove, up to 20) is done from the web dashboard in Web Server mode (§7) — the 12 built-in Belgian/European stations can't be deleted, only your own additions.
- Master switch: Mood → LED Mode (Off / Auto / Manual — or Quick Menu → LEDs). Off keeps every LED dark. Auto lets the mood engine pick effects on its own (see Moods below). Manual hands control to your own Effect pick and color slots instead.
- Mood → Effect picks one of 21 animated effects, or one of 5 color slots you design and save in the web dashboard (both only take effect while LED Mode is Manual). Mood → Brightness dims the whole strip; Mood → Eye Dim further dims just the two eye pixels on top of that.
- During games and in the menu the eye LEDs stay dark on purpose (they point straight at you).
All 21 animated effects
| # | Name | # | Name | # | Name |
|---|---|---|---|---|---|
| 1 | Breath | 8 | Curious | 15 | Prowl |
| 2 | Blink | 9 | Angry | 16 | Twinkle |
| 3 | Purr | 10 | Happy | 17 | Police |
| 4 | Alert | 11 | Matrix | 18 | Sunrise |
| 5 | Sleep | 12 | Fire | 19 | Cozy |
| 6 | Scan | 13 | Thunder | 20 | Midnight |
| 7 | Heartbeat | 14 | Hypno | 21 | Disco |
Slots 1–5 (custom per-LED colors) sit right after these in the same Effect list.
- Enable Effects → Mot En first (safety gate — dances refuse to run with motors off, and a power cycle always starts with the dance stopped). Effects → PWM x fine-tunes motor power if a unit runs hot or weak.
- Pick a move under Effects → Dance or Quick Menu → Move: Wiggle, Spin, Rock, Bow, Twist, Moonwalk, Zigzag, Drumroll, Victory, Zigzag B, Bow B, Moonwalk F, Drumroll B, Party.
- Right joystick ▼ (panic stop) halts everything instantly.
KITKAT continuously re-evaluates its mood from a few real sensors — room darkness, whether it's being moved/shaken, WiFi connection, and battery level — checked whenever one of those changes (or at least every minute). The eye animation always follows the current mood. When more than one condition applies, the first match in the table below wins (e.g. a dark room where it's also being shaken shows Evil, not Sleepy):
| Mood | Eye | How you get into it |
|---|---|---|
| Neutral | ![]() |
The default — none of the other conditions below apply |
| Happy | ![]() |
The charger was just plugged in (shown for 30 s, then falls back to whatever the table below would otherwise pick) |
| Sad | ![]() |
Battery low and WiFi connected |
| Excited | ![]() |
Being moved or shaken (and battery not low) |
| Evil | ![]() |
Room is dark and it's being moved or shaken |
| Angry | ![]() |
Not currently triggered automatically — reserved for a future sensor hookup |
| Sleepy | ![]() |
Room is dark and it's sitting still |
| Surprised | ![]() |
Not currently triggered automatically — reserved for a future sensor hookup |
| Confused | ![]() |
Not currently triggered automatically — reserved for a future sensor hookup |
| Nervous | ![]() |
Battery low and no WiFi |
| Love | ![]() |
Petting the touch strip (shown for 30 s, then falls back the same way as Happy) |
| Bored | ![]() |
No button/pet/motion activity at all for 2+ hours |
Set Mood → LED Mode to Auto to let these moods also drive the lights, or Mood → Audio to let some of them trigger a sound clip:
| Mood | Light effect (Auto mode) | Sound |
|---|---|---|
| Sad | Breath | — |
| Love | Purr | Purr (sustained while petting) |
| Sleepy | Sleep | — |
| Bored | Scan | a "left alone" clip |
| Excited | Curious | — |
| Angry | Angry | an angry clip |
| Nervous | Thunder | — |
| Evil | Hypno | — |
| Neutral / Happy / Surprised / Confused | (no automatic light — Happy still purrs, see below) | Happy → Purr |
Menu → Games: Dino Runner, Snake, Breakout, Connect 4, Invaders, Hunt Wumpus.
Every game starts with a title screen: OK to play, CANCEL to leave. After game over, OK restarts and CANCEL exits. All six are played with the right joystick — the same ▲▼◀▶/OK/CANCEL you use everywhere else (§1) — not the left one; the left joystick's shortcuts are disabled while a game is running, except panic stop (▼), which always still works and immediately exits back to the carousel. The eye LEDs stay dark during games for the same reason they do in the menu (they point straight at you).

An endless runner. Cacti and a bird approach from the right; get past as many as you can.
- ▲ or OK — jump (only while on the ground)
- ▼ — duck
Jump over cacti — ducking doesn't save you from one. The bird only threatens you while running upright, so either jumping over it or ducking under it works. Landing right as an obstacle arrives has a brief forgiveness window, so close calls at the exact moment you jump aren't unfair. Your score ticks up simply by surviving, and the game speeds up the longer you last. One hit ends the run — there are no extra lives.

Classic snake on a 25×10 grid, with 3 lives.
- ▲▼◀▶ — turn (you can't reverse directly into yourself)
Steer into the hollow square to eat it — the snake grows by one and speeds up a little each time. Running into the outer border costs a life and resets the snake back to its starting length and position (the run continues); running into your own body ends the game immediately, no life saved. Game over once all 3 lives from border hits are used up.

Paddle-and-bricks, 3 lives.
- ◀▶ — move the paddle
- OK — launch the ball ("OK>GO" is shown while waiting to serve)
Bounce the ball into the 9×4 brick wall to clear bricks (10 points each); where the ball hits the paddle changes the angle it bounces off at, so you can aim. Letting the ball fall past the paddle costs a life and re-serves it; lose all 3 lives and it's "YOU LOSE." Clear every brick and the wall resets with a slightly faster ball — there's no final level, just an increasingly fast high-score run.

You (○, hollow circles) versus the built-in AI (●, filled circles) — this is not a two-player mode.
- ◀▶ — move the column cursor
- OK — drop your piece into that column
First to connect 4 in a row — horizontally, vertically, or diagonally — wins. The AI takes a winning move if one exists, otherwise blocks your winning move if you have one, otherwise prefers the center columns. A full board with no winner is a Draw.

A 5×3 alien formation marches side to side (dropping a row and reversing direction each time it hits an edge) over 3 lives.
- ◀▶ — move your ship
- OK — fire (only one of your shots can be on screen at a time)
Aliens shoot back at random once any are alive; getting hit by an alien bullet costs a life, and losing all 3 ends the game ("YOU LOSE"). If the formation itself reaches your ship's row before you clear it, that's an instant "INVADED! YOU LOSE." Destroy every alien in the formation to win ("YOU WON") — there's a single wave, no escalating levels.

The classic text-adventure cave crawl, turn-based (nothing moves until you do). You're in a 20-room cave (each room has exactly 3 tunnels) hunting the Wumpus with 5 arrows, while avoiding 2 bottomless pits and 2 giant bats.
- ◀▶ — cycle which of the 3 visible tunnels is selected
- ▲ — toggle shoot mode on/off (only available while you still have arrows)
- OK — walk through the selected tunnel (normal mode), or fire an arrow into it (shoot mode)
Every time you move, KITKAT tells you what's next door: "Wumpus!" if the Wumpus is in an adjacent room, "Draft!" for a pit, "Bats!" for a bat room (any combination, or "All clear." if none apply) — use these clues to figure out safe rooms before you enter them. Walking into the Wumpus's room gets you eaten; walking into a pit means you fell in — both end the game. Walking into a bat room doesn't hurt you, but the bats grab you and drop you in a random room instead, so re-check your clues afterward. Firing an arrow costs one whether you hit or miss; hit the Wumpus and you win instantly ("WUMPUS SLAIN! WIN!"); miss and there's a 50/50 chance the startled Wumpus itself wanders into an adjacent room — which occasionally means it wanders straight into yours, ending the game. Run out of arrows without ever hitting it and it's "No arrows! YOU LOSE."
Switch Menu → Settings → Boot Mode to Web Srv and restart (§8). Then open KITKAT's address in a browser on the same WiFi — use Menu → Settings → Show IP and scan the QR code.
The dashboard gives you:
- Radio manager — add/remove stations, choose which station STREAM mode plays on its next boot, set the volume.
- LED studio — LED Mode (Off / Auto / Manual), effect picker, brightness and color sliders with a live preview on the robot, plus 5 custom color slots: pick a color for each of the 6 LEDs individually (you see it live), then Save the slot. Apply slots later from the LCD menu or Quick Menu (FX → Slot 1–5). Set LED Mode to Manual while designing so the mood engine doesn't repaint your work.
- Drive — steer KITKAT like an RC car with the on-screen D-pad or WASD/arrow keys, with a speed slider. You must tick Motors Enabled first; the robot stops automatically if the connection drops (2 s), the tab is hidden, or you release the keys. Driving is always disabled after a restart.
- Clock — set the time manually, choose the NTP time server and timezone, or trigger an immediate time sync.
- Alarm Sound — pick which saved station plays when the alarm rings, and a local backup clip for when there's no WiFi at the time. (Turning the alarm on/off and setting its time is still done from the LCD menu.)
While in Web Server mode the radio on the device is disabled (the Radio screen says so) — the two features share the same audio hardware.
(Full walkthrough of every dashboard option, with a screenshot of each card, is on the Web Dashboard wiki page.)
The Menu is a hierarchical, GEM-style menu (5 rows per screen — a scrollbar appears on the right edge on pages with more items). Every real setting lives on one of these pages:
Menu
├── Settings
│ ├── Acc WK — tap/knock-to-wake toggle
│ ├── Backlight — always-on override
│ ├── Boot in — Web Radio / Web Srv
│ ├── WiFi Setup — guided provisioning
│ ├── Show IP — QR of the dashboard address
│ ├── Test — internal diagnostic screen
│ ├── Version — Date / Time / Branch / Commit / Tag / Dev ID (read-only)
│ └── Forget WiFi — erase credentials, reopen setup
├── Effects
│ ├── Mot En — motors master switch
│ ├── PWM x — motor power calibration
│ └── Dance — run a move now
├── Mood
│ ├── Audio — mood sound clips on/off
│ ├── LED Mode — Off / Auto / Manual
│ ├── Effect — light effect / color slot (Manual mode)
│ ├── Brightness — light dimmer
│ └── Eye Dim — extra eye-only dimmer
├── Time — Hour/Min/Sec/Day/Month/Year + Apply
├── Alarm
│ ├── Enable, LED, Move, Sound
│ ├── Station, Backup — what plays when it rings
│ └── Set Alarm — Hour/Minute + Apply
├── Power
│ ├── Timer — one-shot power-off countdown
│ ├── Restart
│ └── Shut Down
└── Games — Dino Runner / Snake / Breakout / Connect 4 / Invaders / Hunt Wumpus
All settings are remembered across power cycles except where noted in the tables below. State shown in the menu always reflects the latest value, even if it was just changed from the Quick Menu or the dashboard.
| Setting | Options | What it does | Remembered? |
|---|---|---|---|
| Acc WK | on/off | tap/knock the sleeping KITKAT to wake it | yes |
| Backlight | on/off | screen backlight never turns off (also disables idle sleep entirely, see §1) | yes |
| Boot Mode | Web Radio / Web Srv | radio streaming vs. web dashboard (applies after Restart) | yes |
| WiFi Setup | — | guided WiFi connection (§9) | — |
| Show IP | — | QR code with KITKAT's dashboard address | — |
| Test | — | internal diagnostic screen (touch pads, LDR, battery, ADC stats, accelerometer) | — |
| Version | — | read-only: build date/time, git branch/commit/tag, device serial | — |
| Forget WiFi | — | erase WiFi credentials and reopen setup | — |

| Setting | Options | What it does | Remembered? |
|---|---|---|---|
| Mot En | on/off | master switch for all motor movement | yes |
| PWM x | 0.70–1.30 | fine-tune motor power if a unit runs hot/weak | yes |
| Dance | None / 14 moves | run a dance move now (needs Mot En) | no — always off after power-on |
LED control (mode, effect, brightness, color slots) lives on the Mood page below, not here.
| Setting | Options | What it does | Remembered? |
|---|---|---|---|
| Audio | on/off | moods may trigger a sound clip (petting/charging purr, "left alone" sound) | yes |
| LED Mode | Off / Auto / Manual | Off: LEDs stay dark. Auto: mood picks the light effect. Manual: your Effect pick/color slots own the LEDs instead | yes |
| Effect | None / 21 effects / Slot 1–5 | which light effect plays while LED Mode is Manual | yes |
| Brightness | 0–100 % | dims animated effects and saved color slots | yes |
| Eye Dim | 0–100 % | extra dimming just for the eye LEDs, on top of Brightness | yes |

| Setting | Options | What it does | Remembered? |
|---|---|---|---|
| Alarm On | on/off | enable the daily alarm | yes (stored in the clock chip) |
| LED | same effect list as Mood → Effect | light effect while the alarm rings | yes |
| Move | same move list as Effects → Dance | dance move while the alarm rings | yes |
| Sound | on/off | play audio while the alarm rings (Web Radio boot mode only — see §7) | yes |
| Station | your saved stations | which station streams for the alarm | yes |
| Backup | sound list | local clip played if the station can't be reached (or there's no WiFi) | yes |
| Set Alarm | hour/minute + Apply | alarm time (fires every day) | yes |

| Setting | Options | What it does | Remembered? |
|---|---|---|---|
| Timer | None/15…120 min | one-shot power-off countdown from now (activity does not cancel it; RAM-only, cleared on any boot) | no |
| Restart | — | reboot | — |
| Shut Down | — | power off now — if charging/docked it can't fully cut power, so it briefly reboots into standby instead (see §1) | — |
Date and time fields (Hour/Minute/Second/Day/Month/Year) + Apply — sets the clock manually. Kept by the battery-backed clock chip, independent of every other setting.



The menu auto-exits to the carousel after 60 seconds idle; CANCEL on this root page exits immediately.
When the alarm time arrives, KITKAT switches itself on (if off) and shows a ringing-bell screen with the current time. Press any key to dismiss. The alarm repeats daily until you turn Alarm On off. Whatever the LCD was showing and whatever the radio was doing before the alarm fired both come back automatically once you dismiss it.

- Open Menu → Settings → WiFi Setup (this also starts automatically on a brand-new KITKAT).
- Scan the first QR code with your phone — it joins you to the temporary
ROCAT-xxxxsetup network. - The screen switches to a second QR code — scan it (or browse to
192.168.4.1) to open the setup page, pick your home WiFi and enter its password. - When KITKAT shows the checkmark and your network name, you're done — it returns to the previous screen automatically after a couple of seconds.
Once online, KITKAT automatically: finds your location and sets its timezone from it (it knows ~45 common zones by name, and falls back to a plain UTC-offset if yours isn't one of them — either way it always sets something sensible), syncs the clock once per power-on, and fetches weather.
Without WiFi everything local still works — clock, eye/moods, lights, dances, games — but radio, weather and time-sync don't.
| Symptom | Explanation / fix |
|---|---|
| KITKAT reboots itself a couple of times right after "Shut Down" | Normal while charging/docked — see the note in §1. It's settling into standby, not malfunctioning. |
| Screen went dim/dark by itself | Idle sleep — see §1's table. Press any button, or turn on Settings → Backlight to disable idle sleep entirely. |
| KITKAT turned itself off | Idle sleep, the Power → Timer countdown, or a critically low battery (it shows "CHARGE ME NOW" first). |
| Radio won't start | Check the WiFi icon; radio needs Web Radio boot mode (§8) and only starts once WiFi is connected. Some station formats (AAC/HLS) are not currently supported — stick to MP3 streams. |
| Radio screen says "Disabled by webserver" | You're in Web Srv boot mode. Switch Boot Mode back and restart. |
| Dance selected but nothing moves | Turn Mot En on first, then re-select the move. Also check nothing triggered the panic stop. |
| Lights don't change when picking an effect | Set Mood → LED Mode to Auto or Manual (Off keeps them dark on purpose). |
| Alarm rings but no sound plays | Check Alarm → Sound is on and you're in Web Radio boot mode — Alarm Sound has no effect in Web Srv mode. |
| Petting doesn't register | Stroke slower — it needs to cross at least 3 pads over at least 3 seconds, a quick flick won't count. |
| Wrong time | It syncs once per power-on when WiFi connects. Set it manually under Set Time or the dashboard, or trigger a sync from the dashboard's NTP Sync button. Timezone is set automatically from your location (see §9). |
| Can't remove a station in the dashboard | Built-in stations can't be deleted, only your own additions. |
| Robot drives then suddenly stops (dashboard) | The safety watchdog stopped it — connection hiccup, hidden tab, or you clicked into a text box. Re-press the direction. |
| Nothing responds at all | Use the physical reset button, then power on normally. |
Firmware documentation for developers lives in the same folder — start at Home.










