# variables for state var state[4] = [0,0,0,0] var new_state[4] = [0,0,0,0] # variables for notes var notes[6] var durations[6] var note_index = 6 var note_count = 6 var wave[142] var i var wave_phase var wave_intensity # compute a sinus wave for sound for i in 0:141 do wave_phase = (i-70)*468 call math.cos(wave_intensity, wave_phase) wave[i] = wave_intensity/256 end call sound.wave(wave) # reset outputs call sound.system(-1) call leds.top(0,0,0) call leds.bottom.left(0,0,0) call leds.bottom.right(0,0,0) call leds.circle(0,0,0,0,0,0,0,0) # subroutine to display the current state sub display_state call leds.circle(0,state[1]*32,0,state[3]*32,0,state[2]*32,0,state[0]*32) # when a note is finished, play the next note onevent sound.finished if note_index != note_count then call sound.freq(notes[note_index], durations[note_index]) note_index += 1 end onevent prox when prox.horizontal[4] >= 2000 do if state[0] == 0 and state[1] == 0 and state[2] == 0 and state[3] == 0 then call leds.top(0,0,32) new_state[1] = 1 new_state[2] = 0 new_state[3] = 0 emit pair_run 0 end end when prox.horizontal[0] >= 2000 do if state[0] == 0 and state[1] == 1 and state[2] == 0 and state[3] == 0 then call leds.top(0,32,0) call math.copy(notes[0:5], [440, 524, 440, 370, 311, 370]) call math.copy(durations[0:5], [7, 7, 14, 7, 7, 14]) note_index = 1 note_count = 6 call sound.freq(notes[0], durations[0]) new_state[0] = 0 new_state[1] = 1 new_state[2] = 0 new_state[3] = 1 emit pair_run 1 end end when prox.horizontal[4] >= 2000 do if state[0] == 0 and state[1] == 1 and state[2] == 0 and state[3] == 1 then call leds.top(0,0,32) new_state[0] = 0 new_state[1] = 1 new_state[2] = 1 new_state[3] = 1 emit pair_run 2 end end when prox.horizontal[0] >= 2000 do if state[0] == 0 and state[1] == 1 and state[2] == 1 and state[3] == 1 then call leds.top(0,32,0) new_state[0] = 1 new_state[1] = 1 new_state[2] = 1 new_state[3] = 1 call math.copy(notes[0:5], [440, 524, 440, 370, 311, 370]) call math.copy(durations[0:5], [7, 7, 14, 7, 7, 14]) note_index = 1 note_count = 6 call sound.freq(notes[0], durations[0]) emit pair_run 3 end end when prox.horizontal[4] >= 2000 do if state[0] == 1 and state[1] == 1 and state[2] == 1 and state[3] == 1 then call leds.top(32,0,0) call math.copy(notes[0:5], [524, 524, 524, 524, 524, 524]) call math.copy(durations[0:5], [14, 7, 14, 7, 14, 7]) note_index = 1 note_count = 6 call sound.freq(notes[0], durations[0]) emit pair_run 4 end end when prox.horizontal[5] >= 2000 do if state[0] == 1 and state[1] == 1 and state[2] == 1 and state[3] == 1 then call leds.top(0,32,0) call math.copy(notes[0:5], [440, 524, 440, 370, 311, 370]) call math.copy(durations[0:5], [7, 7, 14, 7, 7, 14]) note_index = 1 note_count = 6 call sound.freq(notes[0], durations[0]) new_state[0] = 0 new_state[1] = 1 new_state[2] = 0 new_state[3] = 1 emit pair_run 5 end end when prox.horizontal[5] >= 2000 do if state[0] == 0 and state[1] == 1 and state[2] == 0 and state[3] == 1 then call leds.top(0,32,0) call math.copy(notes[0:5], [440, 524, 440, 370, 311, 370]) call math.copy(durations[0:5], [7, 7, 14, 7, 7, 14]) note_index = 1 note_count = 6 call sound.freq(notes[0], durations[0]) new_state[0] = 0 new_state[1] = 0 new_state[2] = 0 new_state[3] = 0 emit pair_run 6 end end call math.copy(state, new_state) callsub display_state