pi_facer 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Manifest +24 -0
- data/README.md +48 -0
- data/Rakefile +14 -0
- data/lib/pi_facer.rb +28 -0
- data/lib/pi_facer/io.rb +76 -0
- data/pi_facer.gemspec +20 -0
- metadata +65 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ab54d4f2592cd0e45473a1b959a15da85309d11c
|
4
|
+
data.tar.gz: dda5407c3966f3bf22e47eb766c19c136e1e7a2e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b20b6b0d435e4c2a7bd633bf44cde09ff0eb2569b1e0e9133afaab171ad031ff6cb9951b73f9e9c3960e8547252d0648283f895b3b5854e136e21bf8f4946628
|
7
|
+
data.tar.gz: 65c47843eddb2f1e6713e11cfeb909d82feffde61006d1aa1f4452cece24ca22fa688c76c5f2ebb3a9c5d0d6ecd85182a271bf9a72f2f124b7b80583aabe71c2
|
data/Manifest
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
.
|
2
|
+
./examples
|
3
|
+
./examples/2_bit_counter
|
4
|
+
./examples/2_bit_counter/2_bit_counter.rb
|
5
|
+
./examples/7-segment
|
6
|
+
./examples/7-segment/7-segment.rb
|
7
|
+
./examples/dsl_switch
|
8
|
+
./examples/dsl_switch/dsl_switch.rb
|
9
|
+
./examples/morse_code
|
10
|
+
./examples/morse_code/circuit.png
|
11
|
+
./examples/morse_code/morse_code.rb
|
12
|
+
./examples/simple_switch
|
13
|
+
./examples/simple_switch/circuit.png
|
14
|
+
./examples/simple_switch/simple_switch.rb
|
15
|
+
./lib
|
16
|
+
./lib/pi_facer
|
17
|
+
./lib/pi_facer/io.rb
|
18
|
+
./lib/pi_facer.rb
|
19
|
+
./Manifest
|
20
|
+
./pi_facer.gemspec
|
21
|
+
./Rakefile
|
22
|
+
./README.md
|
23
|
+
|
24
|
+
8 directories, 13 files
|
data/README.md
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
## Overview
|
2
|
+
|
3
|
+
Pi Facer brings event driven programming to the Raspberry Pi's PiFace accessory.
|
4
|
+
Pi Facer was designed for Ruby 2.0!
|
5
|
+
Pi Facer was based and inspired on <a href="https://github.com/jwhitehorn/pi_piper">Pi Piper</a> and uses <a href="https://github.com/blakejakopovic/piface">piface</a>, and such is still alpha as piface is.
|
6
|
+
|
7
|
+
To get started:
|
8
|
+
|
9
|
+
To install Pi Facer:
|
10
|
+
|
11
|
+
sudo gem install pi_facer
|
12
|
+
|
13
|
+
### PIFACE
|
14
|
+
PiFace Digital plugs directly onto the top of your Raspberry Pi, and allows you to sense and control the real world.
|
15
|
+
2 Changeover relays
|
16
|
+
8 Open-collector outputs
|
17
|
+
8 Digital inputs
|
18
|
+
8 LED indicators
|
19
|
+
4 Switches
|
20
|
+
Graphical emulator and simulator
|
21
|
+
|
22
|
+
```ruby
|
23
|
+
require 'pi_facer'
|
24
|
+
include PiFacer
|
25
|
+
|
26
|
+
watch :io => 3 do
|
27
|
+
puts "FIO changed from #{last_value} to #{value}"
|
28
|
+
end
|
29
|
+
|
30
|
+
PiFacer.wait
|
31
|
+
```
|
32
|
+
|
33
|
+
Your block will be called when a change to the pin's state is detected.
|
34
|
+
|
35
|
+
Additionally you can use the outputs too:
|
36
|
+
|
37
|
+
```ruby
|
38
|
+
pin = PiFacer::FIO.new(:io => 1, :direction => :out)
|
39
|
+
pin.on
|
40
|
+
sleep 1
|
41
|
+
pin.off
|
42
|
+
```
|
43
|
+
|
44
|
+
|
45
|
+
***
|
46
|
+
<img src="http://www.raspberrypi.org/wp-content/uploads/2012/03/Raspi_Colour_R.png" width="90" />
|
47
|
+
|
48
|
+
Proudly developed exclusively on a [Raspberry Pi](http://www.raspberrypi.org)
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'echoe'
|
4
|
+
|
5
|
+
Echoe.new('pi_facer', '0.0.1') do |p|
|
6
|
+
p.description = "Event driven Raspberry PIFace library"
|
7
|
+
p.url = "http://github.com/awls99/pi_piper"
|
8
|
+
p.author = "Arthur Silva"
|
9
|
+
p.email = "awls99@gmail.com"
|
10
|
+
p.ignore_pattern = ["examples/**/*"]
|
11
|
+
p.dependencies = ['piface']
|
12
|
+
end
|
13
|
+
|
14
|
+
Dir["#{File.dirname(__FILE__)}/tasks/*.rake"].sort.each { |ext| load ext }
|
data/lib/pi_facer.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'piface'
|
2
|
+
Dir[File.dirname(__FILE__) + '/pi_facer/*.rb'].each {|file| require file }
|
3
|
+
|
4
|
+
module PiFacer
|
5
|
+
extend self
|
6
|
+
|
7
|
+
#Defines an event block to be executed when an event occurs.
|
8
|
+
#
|
9
|
+
# == Parameters:
|
10
|
+
# options:
|
11
|
+
# Options hash. Options include `:pin`, `:invert` and `:direction`.
|
12
|
+
#
|
13
|
+
def watch(options, &block)
|
14
|
+
Thread.new do
|
15
|
+
pin = PiFacer::FIO.new(options)
|
16
|
+
loop do
|
17
|
+
pin.wait_for_change
|
18
|
+
yield pin
|
19
|
+
end
|
20
|
+
end.abort_on_exception = true
|
21
|
+
end
|
22
|
+
|
23
|
+
#Prevents the main thread from exiting. Required when using PiFacer.watch
|
24
|
+
def wait
|
25
|
+
loop do sleep 1 end
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
data/lib/pi_facer/io.rb
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
module PiFacer
|
2
|
+
# Represents a Piface io on the Raspberry Pi
|
3
|
+
class FIO
|
4
|
+
attr_reader :io, :last_value, :value, :direction, :invert
|
5
|
+
|
6
|
+
#Initializes a new Piface io.
|
7
|
+
#
|
8
|
+
# @param [Hash] options A hash of options
|
9
|
+
# @option options [Fixnum] :io The io number to initialize. Required.
|
10
|
+
# @option options [Symbol] :direction The direction of communication, either :in or :out. Defaults to :in.
|
11
|
+
# @option options [Boolean] :invert Indicates if the value read from the physical io should be inverted. Defaults to false.
|
12
|
+
# @option options [Symbol] :trigger Indicates when the wait_for_change method will detect a change, either :rising, :falling, or :both edge triggers. Defaults to :both.
|
13
|
+
def initialize(direction: :in, invert: true, trigger: :both, **options)
|
14
|
+
raise "Invalid direction. Options are :in or :out" unless [:in, :out].include? direction
|
15
|
+
raise "Invalid IO, Piface IO numbers go from 1 to 8" unless (1..8).include? options[:io]
|
16
|
+
raise 'Invalid trigger' unless %I[rising falling both].include? trigger
|
17
|
+
|
18
|
+
@io = options[:io]
|
19
|
+
@direction = direction
|
20
|
+
@invert = invert
|
21
|
+
@trigger = trigger
|
22
|
+
|
23
|
+
read
|
24
|
+
end
|
25
|
+
|
26
|
+
# If the io has been initialized for output this method will set the logic level high.
|
27
|
+
def on
|
28
|
+
Piface.write( @io, 1 ) if direction == :out
|
29
|
+
end
|
30
|
+
|
31
|
+
# Tests if the logic level is high.
|
32
|
+
def on?
|
33
|
+
not off?
|
34
|
+
end
|
35
|
+
|
36
|
+
# If the io has been initialized for output this method will set the logic level low.
|
37
|
+
def off
|
38
|
+
Piface.write( @io, 0 ) if direction == :out
|
39
|
+
end
|
40
|
+
|
41
|
+
# Tests if the logic level is low.
|
42
|
+
def off?
|
43
|
+
value == 0
|
44
|
+
end
|
45
|
+
|
46
|
+
# If the io has been initialized for output this method will either raise or lower the logic level depending on `new_value`.
|
47
|
+
# @param [Object] new_value If false or 0 the io will be set to off, otherwise on.
|
48
|
+
def update_value(new_value)
|
49
|
+
!new_value || new_value == 0 ? off : on
|
50
|
+
end
|
51
|
+
|
52
|
+
# Tests if the logic level has changed since the io was last read.
|
53
|
+
def changed?
|
54
|
+
read
|
55
|
+
last_value != value
|
56
|
+
end
|
57
|
+
|
58
|
+
# blocks until a logic level change occurs. The initializer option `:trigger` modifies what edge this method will release on.
|
59
|
+
def wait_for_change
|
60
|
+
loop do
|
61
|
+
if changed?
|
62
|
+
next if @trigger == :rising and @value == 0
|
63
|
+
next if @trigger == :falling and @value == 1
|
64
|
+
break
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def read
|
70
|
+
@last_value = @value
|
71
|
+
val = Piface.read @io
|
72
|
+
@value = invert ? (val ^ 1) : val
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
end
|
data/pi_facer.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = "pi_facer"
|
5
|
+
s.version = "0.0.1"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Arthur Silva"]
|
9
|
+
s.date = Time.now.strftime("%Y-%m-%d")
|
10
|
+
s.description = "Event driven Raspberry Pi Piface library based on pi_piper lib"
|
11
|
+
s.email = "awls99@gmail.com"
|
12
|
+
s.extra_rdoc_files = ["README.md", "lib/pi_facer.rb", "lib/pi_facer/io.rb"]
|
13
|
+
s.files = ["Manifest", "README.md", "Rakefile", "lib/pi_facer.rb", "lib/pi_facer/io.rb", "pi_facer.gemspec"]
|
14
|
+
s.homepage = "https://github.com/awls99/pi_piper"
|
15
|
+
s.require_paths = ["lib"]
|
16
|
+
s.rubygems_version = "1.8.23"
|
17
|
+
s.summary = "Event driven Raspberry Pi Piface library based on pi_piper lib"
|
18
|
+
s.add_dependency(%q<piface>, [">= 0"])
|
19
|
+
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: pi_facer
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Arthur Silva
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-05-08 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: piface
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Event driven Raspberry Pi Piface library based on pi_piper lib
|
28
|
+
email: awls99@gmail.com
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files:
|
32
|
+
- README.md
|
33
|
+
- lib/pi_facer.rb
|
34
|
+
- lib/pi_facer/io.rb
|
35
|
+
files:
|
36
|
+
- Manifest
|
37
|
+
- README.md
|
38
|
+
- Rakefile
|
39
|
+
- lib/pi_facer.rb
|
40
|
+
- lib/pi_facer/io.rb
|
41
|
+
- pi_facer.gemspec
|
42
|
+
homepage: https://github.com/awls99/pi_piper
|
43
|
+
licenses: []
|
44
|
+
metadata: {}
|
45
|
+
post_install_message:
|
46
|
+
rdoc_options: []
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '1.2'
|
59
|
+
requirements: []
|
60
|
+
rubyforge_project:
|
61
|
+
rubygems_version: 2.0.3
|
62
|
+
signing_key:
|
63
|
+
specification_version: 4
|
64
|
+
summary: Event driven Raspberry Pi Piface library based on pi_piper lib
|
65
|
+
test_files: []
|