There is a remotely operated device / toy / drone, which has a number of "functions": various lights, sound effects and so on. There is a remote control with a number of physical buttons. This remote control can be configured with a GUI so the user can set which button operates which functions. By the press of a button, the remote control sends a command containing the states of all the functions.
It seems simple at first: if we have 4 functions to be controlled for a specific button, we could just have a list of checkboxes:
download bmml source – Wireframes created with Balsamiq Mockups
This will turn functions 2 and 3 on, and functions 1 and 4 off, on the press of the button.
However, we would like to have a possibility to not touch a specific function. For example, we want the user to be able to specify the following: "turn on function 1, turn off function 2, and leave the others as they were" (because they might have been activated by another button and we don't want to undo that).
I fear that an undetermined (tri-state) checkbox won't be clear enough:
We want to clearly indicate that it's a "turn on" command, a "turn off" command, or there is no command.
Another straightforward way would be to use drop-down lists:
The problem with this is that the vast majority of the userbase is not computer-savvy at all, and might get confused. Checkboxes in the first example were so simple...
But having two checkboxes per row (one for "affect this function?" and the next for the actual command, which is greyed out if the first is unchecked), would be even more confusing.
EDIT
To clear up some possible misunderstandings. My problem is not that I need to make clear that a function is already "used" by another button. That's not a problem. Precisely that is why I need the option for a button to leave a function untouched (untouched when using it, not untouched when configuring it).
For example, let's say button A switches functions 1 and 4 off, and functions 2 and 3 on. That's how I, as a user, want it.
Now I, as a user, want to have a button C configured so that it turns on function 1, and a button D which turns it off again.
If I only had binary choices, then when I pressed D it would not only turn off funciton 1, it would turn all of them off. That's what I want to avoid.
Therefore, the configuration has to have three options: turn it on, turn it off, and leave it as it was.