wall_e 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,7 +3,7 @@ require 'wall_e'
3
3
 
4
4
  WallE::Assembler.build do
5
5
 
6
- led = Led(9)
6
+ led = Led(3)
7
7
  rate = 0.75
8
8
 
9
9
  repeat do
@@ -3,7 +3,7 @@ require 'wall_e'
3
3
 
4
4
  WallE::Assembler.build do
5
5
 
6
- led = Led(9)
6
+ led = Led(5)
7
7
 
8
8
  direction = 1000 / (255 * 2)
9
9
 
@@ -75,7 +75,7 @@ class MorseCode
75
75
  end
76
76
 
77
77
  WallE::Assembler.build do
78
- piezo = Piezo(9)
78
+ piezo = Piezo(6)
79
79
 
80
80
  mc = MorseCode.new(piezo)
81
81
 
@@ -2,8 +2,14 @@ require 'bundler/setup'
2
2
  require 'wall_e'
3
3
 
4
4
  WallE::Assembler.build do
5
-
6
- servo = Servo(9)
5
+ # This example uses a Sparkfun's "Medium" servo.
6
+ # (DGServo S05NF STD http://www.sparkfun.com/products/10333)
7
+ # Using the range 15..170 appears to be the sweet spot for this servo.
8
+ #
9
+ # YMMV especially if you are using a different servo.
10
+ #
11
+ # The Hitec HS-322 (http://amzn.com/B0006O3XEA) has a range of 2..180.
12
+ servo = Servo(9, range: 15..170)
7
13
  servo.min
8
14
 
9
15
  repeat do
@@ -0,0 +1,46 @@
1
+ require 'forwardable'
2
+
3
+ module WallE
4
+ class Claw
5
+ extend Forwardable
6
+
7
+ def_delegators :@pan_servo, :min, :max, :center
8
+
9
+ # Public: Initialize a Claw
10
+ #
11
+ # claw_servo - the Servo controlling the claw.
12
+ # pan_servo - the Servo controlling the pan/tilt bracket.
13
+ def initialize(claw_servo, pan_servo)
14
+ @claw_servo = claw_servo
15
+ @pan_servo = pan_servo
16
+ end
17
+
18
+ # Public: open the claw.
19
+ #
20
+ # Returns nothing.
21
+ def let_go
22
+ @claw_servo.min
23
+ end
24
+
25
+ # Public: close the claw.
26
+ #
27
+ # Returns nothing.
28
+ def grab
29
+ @claw_servo.max
30
+ end
31
+
32
+ # Public: Indicates if the claw currently open.
33
+ #
34
+ # Returns truthy/falsy value.
35
+ def open?
36
+ !closed?
37
+ end
38
+
39
+ # Public: Indicates if the claw is currently closed.
40
+ #
41
+ # Returns truthy/falsy value.
42
+ def closed?
43
+ @claw_servo.maxed?
44
+ end
45
+ end
46
+ end
@@ -31,7 +31,7 @@ module WallE
31
31
  #
32
32
  # Returns nothing.
33
33
  def center
34
- move_to ((min + max) / 2).abs
34
+ move_to ((@range.min + @range.max) / 2).abs
35
35
  end
36
36
 
37
37
  # Public: Move the servo.
@@ -1,3 +1,3 @@
1
1
  module WallE
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/wall_e.rb CHANGED
@@ -3,11 +3,11 @@ require 'wall_e/serial_snoop'
3
3
  require 'wall_e/pin'
4
4
  require 'pry'
5
5
 
6
+ # TODO everything in components should be required automagically.
6
7
  require 'wall_e/components/led'
7
8
  require 'wall_e/components/servo'
8
9
  require 'wall_e/components/piezo'
9
-
10
-
10
+ require 'wall_e/components/claw'
11
11
 
12
12
  module WallE
13
13
  class Assembler
@@ -15,14 +15,17 @@ module WallE
15
15
  attr_reader :board
16
16
 
17
17
  def self.build(&block)
18
+ wall_e = create
18
19
 
19
- arduino = SerialSnoop.locate_ports
20
-
21
- wall_e = new(arduino)
20
+ wall_e.instance_eval(&block) if block_given?
22
21
 
23
- wall_e.instance_eval(&block)
22
+ Pry.start(wall_e, :prompt => [ proc { |obj, *| "wall_e > " },
23
+ proc { |obj, *| "wall_e* "} ])
24
+ end
24
25
 
25
- Pry.start(wall_e, :prompt => [ proc { |obj, *| "wall_e > " }, proc { |obj, *| "wall_e* "} ])
26
+ def self.create
27
+ arduino = SerialSnoop.locate_ports
28
+ new(arduino)
26
29
  end
27
30
 
28
31
  def initialize(arduino)
@@ -45,6 +48,7 @@ module WallE
45
48
  end
46
49
  end
47
50
 
51
+ # TODO some metaprogramming sauce to reduce the component helper code.
48
52
  def Led(pin_number)
49
53
  pin = Pin.new(pin_number, @board)
50
54
  Led.new(pin)
@@ -60,6 +64,12 @@ module WallE
60
64
  Piezo.new(pin)
61
65
  end
62
66
 
67
+ def Claw(claw_pin_number, pan_pin_number)
68
+ claw_servo = Servo(claw_pin_number, range: 60..144)
69
+ pan_servo = Servo(pan_pin_number)
70
+ Claw.new(claw_servo, pan_servo)
71
+ end
72
+
63
73
  def delay(seconds)
64
74
  @board.delay seconds
65
75
  end
@@ -81,13 +91,13 @@ module WallE
81
91
  t = Thread.new do
82
92
  loop do
83
93
  Thread.stop unless @running
84
- begin
85
- block.call
86
- rescue Exception => e
87
- puts e.message
88
- puts e.backtrace.inspect
89
- Thread.kill
90
- end
94
+ begin
95
+ block.call
96
+ rescue Exception => e
97
+ puts e.message
98
+ puts e.backtrace.inspect
99
+ Thread.kill
100
+ end
91
101
  end
92
102
  end
93
103
 
data/test/claw_test.rb ADDED
@@ -0,0 +1,47 @@
1
+ require_relative 'test_helper'
2
+ require_relative '../lib/wall_e/components/claw'
3
+
4
+ class ClawTest < MiniTest::Unit::TestCase
5
+
6
+ DummyServo = Class.new
7
+
8
+ def test_let_go
9
+ claw_servo = MiniTest::Mock.new
10
+ claw_servo.expect :min, 1
11
+ pan_servo = DummyServo.new
12
+
13
+ claw = WallE::Claw.new(claw_servo, pan_servo)
14
+
15
+ claw.let_go
16
+
17
+ claw_servo.verify
18
+ end
19
+
20
+ def test_grab
21
+ claw_servo = MiniTest::Mock.new
22
+ claw_servo.expect :max, 1
23
+ pan_servo = DummyServo.new
24
+
25
+ claw = WallE::Claw.new(claw_servo, pan_servo)
26
+
27
+ claw.grab
28
+
29
+ claw_servo.verify
30
+ end
31
+
32
+ def test_tilting
33
+ pan_servo = MiniTest::Mock.new
34
+ pan_servo.expect :min, 1
35
+ pan_servo.expect :max, 1
36
+ pan_servo.expect :center, 1
37
+ claw_servo = DummyServo.new
38
+
39
+ claw = WallE::Claw.new(claw_servo, pan_servo)
40
+
41
+ claw.min
42
+ claw.max
43
+ claw.center
44
+
45
+ pan_servo.verify
46
+ end
47
+ end
data/test/servo_test.rb CHANGED
@@ -56,16 +56,14 @@ class ServoTest < MiniTest::Unit::TestCase
56
56
  end
57
57
 
58
58
  def test_moving_to_center
59
- def test_moving_to_min
60
- pin = MiniTest::Mock.new
61
- pin.expect(:set_mode, 1, [WallE::Pin::SERVO])
62
- pin.expect(:servo_write, 1, [90])
59
+ pin = MiniTest::Mock.new
60
+ pin.expect(:set_mode, 1, [WallE::Pin::SERVO])
61
+ pin.expect(:servo_write, 1, [90])
63
62
 
64
- servo = WallE::Servo.new(pin)
65
- servo.center
63
+ servo = WallE::Servo.new(pin)
64
+ servo.center
66
65
 
67
- pin.verify
68
- end
66
+ pin.verify
69
67
  end
70
68
 
71
69
  end
data/test/test_helper.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  gem 'minitest' # use the gem version of minitest not the version bundled with 1.9.3
2
2
  require 'minitest/autorun'
3
- require 'minitest/pride'
3
+ require 'minitest/pride'
4
+ require_relative '../lib/wall_e/pin'
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.1
4
+ version: 0.0.2
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-11 00:00:00.000000000 Z
12
+ date: 2012-09-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: minitest
@@ -94,6 +94,7 @@ files:
94
94
  - cookbook/Piezo/morse_code.rb
95
95
  - cookbook/Servo/sweep.rb
96
96
  - lib/wall_e.rb
97
+ - lib/wall_e/components/claw.rb
97
98
  - lib/wall_e/components/led.rb
98
99
  - lib/wall_e/components/piezo.rb
99
100
  - lib/wall_e/components/servo.rb
@@ -101,6 +102,7 @@ files:
101
102
  - lib/wall_e/pin.rb
102
103
  - lib/wall_e/serial_snoop.rb
103
104
  - lib/wall_e/version.rb
105
+ - test/claw_test.rb
104
106
  - test/led_test.rb
105
107
  - test/piezo_test.rb
106
108
  - test/pin_test.rb
@@ -133,6 +135,7 @@ signing_key:
133
135
  specification_version: 3
134
136
  summary: ''
135
137
  test_files:
138
+ - test/claw_test.rb
136
139
  - test/led_test.rb
137
140
  - test/piezo_test.rb
138
141
  - test/pin_test.rb