Coding Dojo
The learning remote control
/* a C++ exercise */
@AlinPandichi
Coding Dojo Mindset
● We are here to learn
● Safe place outside of work
● Need to slow down
● Focus on doing it right
● Non­competitive, collaborative, fun 
environment
Expectations?
Agenda
● 19:00 ­ 19:10 Introduction  
● 19:10 ­ 19:30 Intro
● 19:30 ­ 20:00 Practice Session Part 1 
● 20:00 ­ 20:10 Break  
● 20:10 ­ 20:45 Practice Session Part 2 
● 20:45 ­ 21:00 Retrospective
The learning remote control
● You are writing the firmware for a 
learning remote control.
● You put it into a 'listening' state...
● ...to capture the signal from another IR 
remote control
● Your firmware must find a repeating 
pattern of pulses
Digital signal processing
● https://www.allaboutcircuits.com/uploads/articles/An­
Introduction­to­Digital­Signal­Processing­(1).png
Other requirements
● on_start_learning_mode to simulate the 
user initiating a training operation
● on_signal_change called repeatedly to 
simulate a continually repeating input 
signal
● Return a list of pulses representing the 
detected pattern (or none)
Other requirements
● A pulse is defined as a HIGH/LOW pair 
made out of an integer 2­tuple. 
● Each integer pair is the time in 
nanoseconds the signal was high for and 
then the time in nanoseconds the signal 
was low for. For example:
# high for 52 nanos, low for 4500 nanos
pulse = (52, 4500)
In ASCII art...
| (1) (2) (3)(4)(5) (6) (7)(8) <--
| ..................... .... ..... ... <--- HIGH
| | | | | | | | |
|.....| |...| |..| |.....| | <--- LOW
| <- nanos_elapsed ->
+-------------------------------------------------------------
time_nanos ->
It should look something like this
def on_signal_change(is_high,
nanos_elapse):
# your code
...
# then return a pattern
return [(50, 4500), (3423, 333),
(212,44)]
The following will hold true
● The first invocation of the on_signal_change method 
will be the start of the pattern. Note that nanos_elapsed 
will be 0 for this first call.
● The first invocation of the on_signal_change method 
will always be for a LOW to HIGH transition (rising 
edge, is_high is True).
● The pattern will be made up of at least 1 HIGH/LOW 
pulse.
● The pattern will be made up of less than 26 HIGH/LOW 
pulses.
● The pattern will be made up of ideal pulses (i.e. no 
jitter, fuzzyness, or drift).
Practice session
● One laptop with a functional dev. env. is 
connected to a projector
● Two developers pair program on the 
laptop. The others are watching the code 
changes.
● Every 7 minutes, one developer leaves the 
laptop and the next one from the room 
takes his place. 
Practice time!
Retrospective
● What surprised you?
● What happened as expected?
● What do you plan to use at work?
Kata stolen from:
https://www.codewars.com/kata/
Learn more!
https://cppeurope.com/
Thank you!
@AlinPandichi

Coding Dojo - The learning remote control