adafruit-servo-driver 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []