adafruit-servo-driver 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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 84f2cc7a69153a8eede4660e1437ca7ddd7b67ca
4
+ data.tar.gz: d4bfa9b88a0334c46373ea1249948fdcc9d2e431
5
+ SHA512:
6
+ metadata.gz: c07a7084e686daaa3159127b23223055e4a6b3b6c444d124f9d0d471dee4872024a773980c4c53df7c34f2e62d591683517e19df996157ddc9c7526e1c0a145d
7
+ data.tar.gz: c00d8858116ee94af5cf8af14245c26503f3d444dadb573cc1c4a2ceaac5d6702da060569fd0e0480ac8d87e7fd65dc8abd41a630d9edbac2535477b82cd8c23
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in adafruit-servo-driver.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Chris D'Ambrosio
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,41 @@
1
+ ## Adafruit Servo Driver ##
2
+
3
+ ### Description ###
4
+
5
+ A Ruby implementation of Adafruit's Python library for the Adafruit PCA9685 16-Channel
6
+ PWM Servo Driver for use with the Raspberry Pi.
7
+
8
+ ### Installation ###
9
+
10
+ ```
11
+ gem install adafruit-servo-driver
12
+ ```
13
+
14
+ ### Usage/Example ###
15
+
16
+ ```ruby
17
+ require 'adafruit-servo-driver'
18
+
19
+ pwm = PWM.new(0x40, true)
20
+ pwm.setPWMFreq(50)
21
+
22
+ channel = 0
23
+
24
+ 3.times do
25
+ pwm.setPWM(channel, 0, 212)
26
+ sleep(0.5)
27
+ pwm.setPWM(channel, 0, 412)
28
+ sleep(0.5)
29
+ end
30
+ ```
31
+
32
+ ### Relevant Links: ###
33
+
34
+ Product Page:
35
+ http://www.adafruit.com/products/815
36
+
37
+ Original Adafruit Python Adafruit_PWM_Servo_Driver Library:
38
+ https://github.com/adafruit/Adafruit-Raspberry-Pi-Python-Code
39
+
40
+ Tutorial: Adafruit 16 Channel Servo Driver with Raspberry Pi
41
+ http://learn.adafruit.com/adafruit-16-channel-servo-driver-with-raspberry-pi
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
@@ -0,0 +1,28 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'adafruit-servo-driver/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "adafruit-servo-driver"
8
+ spec.version = AdafruitServoDriver::VERSION
9
+ spec.authors = ["Chris D'Ambrosio"]
10
+ spec.email = ["cdambrosio@gmail.com"]
11
+ spec.summary = %q{Ruby i2c interface for the Adafruit PCA9685 Servo } +
12
+ %q{Driver and Raspberry Pi}
13
+ spec.description = %q{A Ruby implementation of Adafruit's Python library } +
14
+ %q{for the Adafruit PCA9685 16-Channel PWM Servo } +
15
+ %q{Driver for use with the Raspberry Pi.}
16
+ spec.homepage = ""
17
+ spec.license = "MIT"
18
+
19
+ spec.files = `git ls-files -z`.split("\x0")
20
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
21
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
22
+ spec.require_paths = ["lib"]
23
+
24
+ spec.add_dependency "i2c", "~> 0.4.0"
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.7"
27
+ spec.add_development_dependency "rake", "~> 10.0"
28
+ end
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # adapted from http://www.raspberrypi.org/phpBB3/viewtopic.php?t=32826
4
+
5
+ require File.dirname(__FILE__) + '/adafruit-pwm-servo-driver'
6
+
7
+ pwm = PWM.new(0x40, true)
8
+ pwm.setPWMFreq(50)
9
+
10
+ channel = 0
11
+
12
+ 3.times do
13
+ pwm.setPWM(channel, 0, 212)
14
+ sleep(0.5)
15
+ pwm.setPWM(channel, 0, 412)
16
+ sleep(0.5)
17
+ end
@@ -0,0 +1,7 @@
1
+ require 'i2c'
2
+
3
+ module AdafruitServoDriver
4
+ end
5
+
6
+ require 'adafruit-servo-driver/version'
7
+ require 'adafruit-servo-driver/pwm'
@@ -0,0 +1,84 @@
1
+ require 'i2c/i2c'
2
+
3
+ class PWM
4
+ # Registers
5
+ MODE1 = 0x00
6
+ MODE2 = 0x01
7
+ SUBADR1 = 0x02
8
+ SUBADR2 = 0x03
9
+ SUBADR3 = 0x04
10
+ PRESCALE = 0xFE
11
+ LED0_ON_L = 0x06
12
+ LED0_ON_H = 0x07
13
+ LED0_OFF_L = 0x08
14
+ LED0_OFF_H = 0x09
15
+ ALL_LED_ON_L = 0xFA
16
+ ALL_LED_ON_H = 0xFB
17
+ ALL_LED_OFF_L = 0xFC
18
+ ALL_LED_OFF_H = 0xFD
19
+
20
+ # Bits
21
+ RESTART = 0x80
22
+ SLEEP = 0x10
23
+ ALLCALL = 0x01
24
+ INVRT = 0x10
25
+ OUTDRV = 0x04
26
+
27
+ def initialize(address=0x40, debug=false)
28
+ # TODO detect pi revision
29
+ @address = address
30
+ @i2c = I2C.create('/dev/i2c-1')
31
+ @debug = debug
32
+ puts 'Reseting PCA9685 MODE1 (without SLEEP) and MODE2' if @debug
33
+ setAllPWM(0, 0)
34
+ @i2c.write(@address, MODE2, OUTDRV)
35
+ @i2c.write(@address, MODE1, ALLCALL)
36
+ sleep(0.005) # wait for oscillator
37
+
38
+ mode1 = @i2c.read(@address, 8, MODE1).unpack('C').first
39
+ @i2c.write(@address, MODE1, ALLCALL)
40
+ mode1 = mode1 & ~SLEEP # wake up (reset sleep)
41
+ @i2c.write(@address, MODE1, mode1)
42
+ sleep(0.005) # wait for oscillator
43
+ end
44
+
45
+ def set_pwm_freq(freq)
46
+ prescaleval = 25000000.0 # 25MHz
47
+ prescaleval /= 4096.0 # 12-bit
48
+ prescaleval /= Float(freq)
49
+ prescaleval -= 1.0
50
+ if @debug
51
+ puts "Setting PWM frequency to #{freq} Hz"
52
+ puts "Estimated pre-scale: #{prescaleval}"
53
+ end
54
+ prescale = (prescaleval + 0.5).floor
55
+ if @debug
56
+ puts "Final pre-scale: #{prescale}"
57
+ end
58
+
59
+ oldmode = @i2c.read(@address, 8, MODE1).unpack('C').first
60
+ newmode = (oldmode & 0x7F) | 0x10 # sleep
61
+ @i2c.write(@address, MODE1, newmode) # go to sleep
62
+ @i2c.write(@address, PRESCALE, prescale)
63
+ @i2c.write(@address, MODE1, oldmode)
64
+ sleep(0.005)
65
+ @i2c.write(@address, MODE1, oldmode | RESTART)
66
+ end
67
+ alias_method :setPWMFreq, :set_pwm_freq
68
+
69
+ def set_pwm(channel, on, off)
70
+ @i2c.write(@address, LED0_ON_L+4*channel, on & 0xFF)
71
+ @i2c.write(@address, LED0_ON_H+4*channel, on >> 8)
72
+ @i2c.write(@address, LED0_OFF_L+4*channel, off & 0xFF)
73
+ @i2c.write(@address, LED0_OFF_H+4*channel, off >> 8)
74
+ end
75
+ alias_method :setPWM, :set_pwm
76
+
77
+ def set_all_pwm(on, off)
78
+ @i2c.write(@address, ALL_LED_ON_L, on & 0xFF)
79
+ @i2c.write(@address, ALL_LED_ON_H, on >> 8)
80
+ @i2c.write(@address, ALL_LED_OFF_L, off & 0xFF)
81
+ @i2c.write(@address, ALL_LED_OFF_H, off >> 8)
82
+ end
83
+ alias_method :setAllPWM, :set_all_pwm
84
+ end
@@ -0,0 +1,3 @@
1
+ module AdafruitServoDriver
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,97 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: adafruit-servo-driver
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Chris D'Ambrosio
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-01-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: i2c
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.4.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.4.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.7'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.7'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ description: A Ruby implementation of Adafruit's Python library for the Adafruit PCA9685
56
+ 16-Channel PWM Servo Driver for use with the Raspberry Pi.
57
+ email:
58
+ - cdambrosio@gmail.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - ".gitignore"
64
+ - Gemfile
65
+ - LICENSE.txt
66
+ - README.md
67
+ - Rakefile
68
+ - adafruit-servo-driver.gemspec
69
+ - example.rb
70
+ - lib/adafruit-servo-driver.rb
71
+ - lib/adafruit-servo-driver/pwm.rb
72
+ - lib/adafruit-servo-driver/version.rb
73
+ homepage: ''
74
+ licenses:
75
+ - MIT
76
+ metadata: {}
77
+ post_install_message:
78
+ rdoc_options: []
79
+ require_paths:
80
+ - lib
81
+ required_ruby_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ requirements: []
92
+ rubyforge_project:
93
+ rubygems_version: 2.4.5
94
+ signing_key:
95
+ specification_version: 4
96
+ summary: Ruby i2c interface for the Adafruit PCA9685 Servo Driver and Raspberry Pi
97
+ test_files: []