Method: Neotrellis::Keypad#set_event

Defined in:
lib/neotrellis/keypad.rb

#set_event(key, event: KEY_BOTH, enabled: true, &block) ⇒ Object

Register a callback to execute when a key’s event is processed.

Parameters:

  • key (Integer)

    ID of the key. Must be between 0 and 15 (for the 4x4 keypad)

  • event (Neotrellis::Keypad::KEY_PRESSED|Neotrellis::Keypad::KEY_RELEASED|Neotrellis::Keypad::KEY_BOTH) (defaults to: KEY_BOTH)

    Type of event to react to.

  • enabled (Boolean) (defaults to: true)

    If false, the callback will be disabled.

  • block (Block)

    Code to execute when the event is trigerred. A Neotrellis::Keypad::KeyEvent will be passed as argument to the block.



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/neotrellis/keypad.rb', line 107

def set_event(key, event: KEY_BOTH, enabled: true, &block)
  if event == KEY_BOTH
    set_event(key, event: KEY_PRESSED, enabled: enabled, &block)
    set_event(key, event: KEY_RELEASED, enabled: enabled, &block)
  else
    raise "event must be one of KEY_PRESSED, KEY_RELEASED" unless [KEY_PRESSED, KEY_RELEASED].include? event
    raise "enabled must be a boolean" unless [true, false].include? enabled

    # Convert data to SeeSaw's binary registers
    key_b = (key/4)*8 + (key%4)
    edge_b = (1 << (event+1)) | ( enabled ? 1 : 0 )

    @seesaw.write(KEYPAD_BASE, KEYPAD_EVENT, key_b, edge_b)
    @callbacks[KeyEvent.new(key, event)] = block
  end
end