wall_e 0.0.3 → 0.0.4
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.
- data/README.md +33 -3
- data/cookbook/Button/toggle_led.rb +11 -0
- data/cookbook/Servo/sweep.rb +1 -1
- data/lib/wall_e.rb +33 -7
- data/lib/wall_e/components/button.rb +61 -0
- data/lib/wall_e/pin.rb +9 -0
- data/lib/wall_e/version.rb +1 -1
- data/test/button_test.rb +65 -0
- data/wall_e.gemspec +1 -1
- metadata +8 -4
data/README.md
CHANGED
@@ -1,6 +1,23 @@
|
|
1
|
-
#
|
1
|
+
# Wall·E
|
2
2
|
|
3
|
-
|
3
|
+
Ruby powered robots.
|
4
|
+
|
5
|
+
## Shout-outs
|
6
|
+
|
7
|
+
Wall·E would not have been possible if not for the awesome goings on in
|
8
|
+
the Node community. Big props to:
|
9
|
+
|
10
|
+
* [Rick Waldron](https://github.com/rwldrn) creator of [johnny-five](https://github.com/rwldrn/johnny-five)
|
11
|
+
* [Chris Williams](https://github.com/voodootikigod) creator of [node-serialport](https://github.com/voodootikigod/node-serialport)
|
12
|
+
* [Julian Gautier](https://github.com/jgautier) creator [firmata](https://github.com/jgautier/firmata)
|
13
|
+
|
14
|
+
## Prerequisites
|
15
|
+
|
16
|
+
1. Download and install the [Arduio IDE](http://www.arduino.cc/en/Main/Software) for your OS
|
17
|
+
2. Download and unzip [Firmata 2.2](http://at.or.at/hans/pd/Firmata-2.2.zip)
|
18
|
+
3. Plug in your Arduino via USB
|
19
|
+
4. Open the Arduino IDE, select: File > Open > [Path from step 2] > examples > StandardFirmata
|
20
|
+
5. Click the Upload button
|
4
21
|
|
5
22
|
## Installation
|
6
23
|
|
@@ -18,7 +35,19 @@ Or install it yourself as:
|
|
18
35
|
|
19
36
|
## Usage
|
20
37
|
|
21
|
-
|
38
|
+
require 'wall_e'
|
39
|
+
|
40
|
+
WallE::Assembler.build do
|
41
|
+
|
42
|
+
led = Led(3)
|
43
|
+
rate = 0.75
|
44
|
+
|
45
|
+
repeat do
|
46
|
+
led.toggle
|
47
|
+
delay rate
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
22
51
|
|
23
52
|
## Contributing
|
24
53
|
|
@@ -27,3 +56,4 @@ TODO: Write usage instructions here
|
|
27
56
|
3. Commit your changes (`git commit -am 'Added some feature'`)
|
28
57
|
4. Push to the branch (`git push origin my-new-feature`)
|
29
58
|
5. Create new Pull Request
|
59
|
+
|
data/cookbook/Servo/sweep.rb
CHANGED
data/lib/wall_e.rb
CHANGED
@@ -8,10 +8,10 @@ require 'wall_e/components/led'
|
|
8
8
|
require 'wall_e/components/servo'
|
9
9
|
require 'wall_e/components/piezo'
|
10
10
|
require 'wall_e/components/claw'
|
11
|
+
require 'wall_e/components/button'
|
11
12
|
|
12
13
|
module WallE
|
13
14
|
class Assembler
|
14
|
-
|
15
15
|
attr_reader :board
|
16
16
|
|
17
17
|
def self.build(&block)
|
@@ -51,23 +51,49 @@ module WallE
|
|
51
51
|
# TODO some metaprogramming sauce to reduce the component helper code.
|
52
52
|
def Led(pin_number)
|
53
53
|
pin = Pin.new(pin_number, @board)
|
54
|
-
Led.new(pin)
|
54
|
+
(leds << Led.new(pin)).last
|
55
55
|
end
|
56
56
|
|
57
57
|
def Servo(pin_number, options = {})
|
58
58
|
pin = Pin.new(pin_number, @board)
|
59
|
-
Servo.new(pin, options)
|
59
|
+
(servos << Servo.new(pin, options)).last
|
60
60
|
end
|
61
61
|
|
62
62
|
def Piezo(pin_number)
|
63
63
|
pin = Pin.new(pin_number, @board)
|
64
|
-
Piezo.new(pin)
|
64
|
+
(piezos << Piezo.new(pin)).last
|
65
65
|
end
|
66
66
|
|
67
67
|
def Claw(claw_pin_number, pan_pin_number)
|
68
68
|
claw_servo = Servo(claw_pin_number, range: 60..144)
|
69
69
|
pan_servo = Servo(pan_pin_number)
|
70
|
-
Claw.new(claw_servo, pan_servo)
|
70
|
+
(claws << Claw.new(claw_servo, pan_servo)).last
|
71
|
+
end
|
72
|
+
|
73
|
+
def Button(pin_number)
|
74
|
+
pin = Pin.new(pin_number, @board)
|
75
|
+
(buttons << Button.new(pin)).last
|
76
|
+
end
|
77
|
+
|
78
|
+
# TODO wrap up these collections in some metaprogramming sauce too.
|
79
|
+
def leds
|
80
|
+
@leds ||= []
|
81
|
+
end
|
82
|
+
|
83
|
+
def servos
|
84
|
+
@servos ||= []
|
85
|
+
end
|
86
|
+
|
87
|
+
def piezos
|
88
|
+
@piezos ||= []
|
89
|
+
end
|
90
|
+
|
91
|
+
def claws
|
92
|
+
@claws ||= []
|
93
|
+
end
|
94
|
+
|
95
|
+
def buttons
|
96
|
+
@buttons ||= []
|
71
97
|
end
|
72
98
|
|
73
99
|
def delay(seconds)
|
@@ -79,11 +105,11 @@ module WallE
|
|
79
105
|
end
|
80
106
|
|
81
107
|
def resume
|
82
|
-
@running = true
|
83
108
|
@group.list.each(&:wakeup)
|
109
|
+
@running = true
|
84
110
|
end
|
85
111
|
|
86
|
-
def
|
112
|
+
def shut_down
|
87
113
|
@group.list.each(&:kill)
|
88
114
|
end
|
89
115
|
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module WallE
|
2
|
+
class Button
|
3
|
+
|
4
|
+
# Public: Initialize a Button.
|
5
|
+
#
|
6
|
+
# pin - the Pin the Button is attached to.
|
7
|
+
# hold_time - the Integer seconds to indicate that the button is being held (default: 0.07).
|
8
|
+
def initialize(pin, hold_time = 0.7)
|
9
|
+
@pin = pin
|
10
|
+
@pin.set_mode(Pin::INPUT)
|
11
|
+
@pin.start_reporting
|
12
|
+
@hold_time = hold_time
|
13
|
+
@pin.on("digital-read-#{@pin.number}", method(:handler))
|
14
|
+
end
|
15
|
+
|
16
|
+
# Public: What to do when the button is pressed.
|
17
|
+
#
|
18
|
+
# block - the block that will run when the button is pressed.
|
19
|
+
#
|
20
|
+
# Returns nothing.
|
21
|
+
def pressed(&block)
|
22
|
+
@down_callback = block
|
23
|
+
end
|
24
|
+
|
25
|
+
# Public: What to do when the button is released.
|
26
|
+
#
|
27
|
+
# block - the block that will run when the button is released.
|
28
|
+
#
|
29
|
+
# Returns nothing.
|
30
|
+
def released(&block)
|
31
|
+
@up_callback = block
|
32
|
+
end
|
33
|
+
|
34
|
+
# Public: What to do when the button is held.
|
35
|
+
#
|
36
|
+
# block - the block that will be run when the button is held.
|
37
|
+
#
|
38
|
+
# Returns nothing.
|
39
|
+
def held(&block)
|
40
|
+
@hold_callback = block
|
41
|
+
end
|
42
|
+
|
43
|
+
# Internal: The handler for the Pin's read event.
|
44
|
+
#
|
45
|
+
# value - the Integer returned from the read event.
|
46
|
+
#
|
47
|
+
# Returns nothing.
|
48
|
+
def handler(value)
|
49
|
+
if value.zero?
|
50
|
+
@up_callback.call if @up_callback
|
51
|
+
else
|
52
|
+
@last_press = Time.now
|
53
|
+
@down_callback.call if @down_callback
|
54
|
+
end
|
55
|
+
|
56
|
+
if value.zero? && (Time.now - @last_press) > @hold_time
|
57
|
+
@hold_callback.call if @hold_callback
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/wall_e/pin.rb
CHANGED
@@ -1,5 +1,8 @@
|
|
1
|
+
require 'forwardable'
|
2
|
+
|
1
3
|
module WallE
|
2
4
|
class Pin
|
5
|
+
extend Forwardable
|
3
6
|
class UnsupportedModeError < StandardError; end
|
4
7
|
|
5
8
|
# Internal: Fixnum byte for pin mode input.
|
@@ -19,6 +22,8 @@ module WallE
|
|
19
22
|
# Public: Returns the Integer pin number.
|
20
23
|
attr_reader :number
|
21
24
|
|
25
|
+
def_delegators :@board, :on, :off, :once
|
26
|
+
|
22
27
|
# Public: Initialize a Pin
|
23
28
|
#
|
24
29
|
# number - the Integer pin number on the board.
|
@@ -80,5 +85,9 @@ module WallE
|
|
80
85
|
def value
|
81
86
|
@onboard_pin.value
|
82
87
|
end
|
88
|
+
|
89
|
+
def start_reporting
|
90
|
+
@board.start_pin_reporting
|
91
|
+
end
|
83
92
|
end
|
84
93
|
end
|
data/lib/wall_e/version.rb
CHANGED
data/test/button_test.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
require_relative '../lib/wall_e/components/button'
|
3
|
+
|
4
|
+
class ButtonTest < MiniTest::Unit::TestCase
|
5
|
+
DummyPin = Class.new do
|
6
|
+
def set_mode(mode); end
|
7
|
+
def start_reporting; end
|
8
|
+
def number; 7; end
|
9
|
+
def on(*args); end
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_sets_up_pin
|
13
|
+
pin = MiniTest::Mock.new
|
14
|
+
pin.expect(:set_mode, 1, [WallE::Pin::INPUT])
|
15
|
+
pin.expect(:start_reporting, 1)
|
16
|
+
pin.expect(:number, 7)
|
17
|
+
pin.expect(:on, 1, ['digital-read-7', Method])
|
18
|
+
|
19
|
+
WallE::Button.new(pin)
|
20
|
+
|
21
|
+
pin.verify
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_pressed
|
25
|
+
blk = MiniTest::Mock.new
|
26
|
+
blk.expect(:run, nil)
|
27
|
+
|
28
|
+
button = WallE::Button.new(DummyPin.new)
|
29
|
+
button.pressed { blk.run }
|
30
|
+
|
31
|
+
button.handler(1)
|
32
|
+
|
33
|
+
blk.verify
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_released
|
37
|
+
blk = MiniTest::Mock.new
|
38
|
+
blk.expect(:run, nil)
|
39
|
+
|
40
|
+
button = WallE::Button.new(DummyPin.new)
|
41
|
+
button.released { blk.run }
|
42
|
+
|
43
|
+
button.pressed { }
|
44
|
+
button.handler(1)
|
45
|
+
|
46
|
+
button.handler(0)
|
47
|
+
|
48
|
+
blk.verify
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_held
|
52
|
+
blk = MiniTest::Mock.new
|
53
|
+
blk.expect(:run, nil)
|
54
|
+
|
55
|
+
button = WallE::Button.new(DummyPin.new, 0.2)
|
56
|
+
button.held { blk.run }
|
57
|
+
button.released { }
|
58
|
+
button.pressed { }
|
59
|
+
button.handler(1)
|
60
|
+
sleep 0.2
|
61
|
+
button.handler(0)
|
62
|
+
|
63
|
+
blk.verify
|
64
|
+
end
|
65
|
+
end
|
data/wall_e.gemspec
CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
|
|
17
17
|
|
18
18
|
|
19
19
|
gem.add_development_dependency("minitest", "~> 3.3.0")
|
20
|
-
gem.add_runtime_dependency("firmata", "~> 0.0.
|
20
|
+
gem.add_runtime_dependency("firmata", "~> 0.0.7")
|
21
21
|
gem.add_runtime_dependency("event_spitter", "~> 0.5.0")
|
22
22
|
gem.add_runtime_dependency("pry", "~> 0.9.10")
|
23
23
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wall_e
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 0.0.
|
37
|
+
version: 0.0.7
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 0.0.
|
45
|
+
version: 0.0.7
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: event_spitter
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,6 +87,7 @@ files:
|
|
87
87
|
- LICENSE
|
88
88
|
- README.md
|
89
89
|
- Rakefile
|
90
|
+
- cookbook/Button/toggle_led.rb
|
90
91
|
- cookbook/Led/blink.rb
|
91
92
|
- cookbook/Led/fade_in.rb
|
92
93
|
- cookbook/Led/fade_out.rb
|
@@ -94,6 +95,7 @@ files:
|
|
94
95
|
- cookbook/Piezo/morse_code.rb
|
95
96
|
- cookbook/Servo/sweep.rb
|
96
97
|
- lib/wall_e.rb
|
98
|
+
- lib/wall_e/components/button.rb
|
97
99
|
- lib/wall_e/components/claw.rb
|
98
100
|
- lib/wall_e/components/led.rb
|
99
101
|
- lib/wall_e/components/piezo.rb
|
@@ -102,6 +104,7 @@ files:
|
|
102
104
|
- lib/wall_e/pin.rb
|
103
105
|
- lib/wall_e/serial_snoop.rb
|
104
106
|
- lib/wall_e/version.rb
|
107
|
+
- test/button_test.rb
|
105
108
|
- test/claw_test.rb
|
106
109
|
- test/led_test.rb
|
107
110
|
- test/piezo_test.rb
|
@@ -135,6 +138,7 @@ signing_key:
|
|
135
138
|
specification_version: 3
|
136
139
|
summary: ''
|
137
140
|
test_files:
|
141
|
+
- test/button_test.rb
|
138
142
|
- test/claw_test.rb
|
139
143
|
- test/led_test.rb
|
140
144
|
- test/piezo_test.rb
|