Sha256: 91b90b59712fb74c9db56283af9cb0ca87e96997c123290c26ebb2faa112a316

Contents?: true

Size: 1.61 KB

Versions: 2

Compression:

Stored size: 1.61 KB

Contents

require 'pi_piper'
require 'tamashii/agent/device/keyboard/base'

module Tamashii
  module Agent
    module Device
      module Keyboard
        class ButtonMatrix4x4 < Base

          def initialize_hardware
            @row_pins = fetch_option(:row_pins, default_row_pins).map do |pin_number|
              PiPiper::Pin.new(pin: pin_number, direction: :out).tap {|pin| pin.on} 
            end
            @col_pins = fetch_option(:col_pins, default_col_pins).map do |pin_number|
              PiPiper::Pin.new(pin: pin_number, direction: :in, pull: :up)
            end
          end

          def number_of_keys
            16
          end

          def polling_interval
            0.01
          end

          def default_row_pins
            [21, 20, 16, 12]
          end

          def default_col_pins
            [26, 19, 13, 6]
          end
          
          def finalize_hardware
            (@row_pins + @col_pins).each do |pin|
              unexport_pin(pin.pin)
            end
          end

          def read_key
            current_key = nil
            @row_pins.each_with_index do |row_pin, row_index|
              row_pin.off
              @col_pins.each_with_index do |col_pin, col_index|
                col_pin.read
                key = row_index * 4 + col_index
                if col_pin.off?
                  current_key = key
                  mark_key_down(key)
                else
                  mark_key_up(key)
                end
              end
              row_pin.on
              sleep 0.001
            end
            current_key
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
tamashii-agent-0.4.0 lib/tamashii/agent/device/keyboard/button_matrix4x4.rb
tamashii-agent-0.3.4 lib/tamashii/agent/device/keyboard/button_matrix4x4.rb