electron 0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,89 @@
1
+ require 'serialport'
2
+
3
+ class Electron#ics
4
+
5
+ HIGH = 1
6
+ LOW = 0
7
+ OUTPUT = 0
8
+ INPUT = 1
9
+
10
+ attr_reader :port
11
+ attr_accessor :debug
12
+ def initialize(options = {})
13
+ @debug = options[:debug] || false
14
+ @port = options[:port] || _scan_for_port
15
+ @baud_rate = options[:baud_rate] || 115200
16
+ @data_bits = options[:data_bits] || 8
17
+ @stop_bits = options[:stop_bits] || 1
18
+ @parity = options[:party] || SerialPort::NONE
19
+ connect
20
+ end
21
+
22
+ def connect
23
+ puts "connecting to #{@port}" if debug
24
+ @board = SerialPort.new @port, @baud_rate, @data_bits, @stop_bits, @parity
25
+ end
26
+
27
+ def helpers(&block)
28
+ self.instance_eval(&block)
29
+ end
30
+
31
+ def loop(&block)
32
+ while(true) do
33
+ block.call
34
+ sleep 0.1
35
+ end
36
+ end
37
+
38
+ def read
39
+ @board.gets
40
+ end
41
+
42
+ def close
43
+ @board.close
44
+ end
45
+
46
+ def pin_mode(pin, value)
47
+ _write("pm", pin, value)
48
+ end
49
+
50
+ def analog_write(pin, value)
51
+ _write("aw", pin, value)
52
+ end
53
+
54
+ def digital_write(pin, value)
55
+ _write("dw", pin, value)
56
+ end
57
+
58
+ def digital_read(pin)
59
+ _write("dr", pin)
60
+ read.to_i
61
+ end
62
+
63
+ def analog_read(pin)
64
+ _write("ar", pin)
65
+ read.to_i
66
+ end
67
+
68
+ private
69
+
70
+ def _write(*args)
71
+ puts "#{@port}: !#{args.join(" ")}." if debug
72
+ begin
73
+ @board.write "!#{args.join(" ")}."
74
+ rescue Errno::ENXIO => e
75
+ sleep 1
76
+ connect
77
+ @board.write "!#{args.join(" ")}."
78
+ end
79
+ end
80
+
81
+ def _scan_for_port
82
+ serial_port = `ls /dev | grep usb`.chomp.split(/\n/).select {|port| port =~ /^cu\./}.first
83
+ "/dev/#{serial_port}"
84
+ end
85
+ end
86
+
87
+ require 'electron/base'
88
+ require 'electron/led'
89
+ require 'electron/button'
@@ -0,0 +1,17 @@
1
+ class Electron
2
+
3
+ class Base
4
+
5
+ def initialize(options = {})
6
+ @board = options[:board] || (raise "Board is required")
7
+ @pin = options[:pin] || (raise "Pin is required")
8
+ setup
9
+ end
10
+
11
+ def setup
12
+
13
+ end
14
+
15
+ end
16
+
17
+ end
@@ -0,0 +1,21 @@
1
+ class Electron
2
+ class Button < Base
3
+
4
+ def setup
5
+ @board.pin_mode(@pin, Electron::INPUT)
6
+ end
7
+
8
+ def current_state
9
+ @board.digital_read(@pin)
10
+ end
11
+
12
+ def down?
13
+ current_state == 1
14
+ end
15
+
16
+ def up?
17
+ current_state == 0
18
+ end
19
+
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ class Electron
2
+ class LED < Base
3
+
4
+ def setup
5
+ @board.pin_mode(@pin, Electron::OUTPUT)
6
+ end
7
+
8
+ def on
9
+ @board.digital_write(@pin, Electron::HIGH)
10
+ end
11
+ def off
12
+ @board.digital_write(@pin, Electron::LOW)
13
+ end
14
+
15
+ def blink(delay = 0.2)
16
+ loop do
17
+ on
18
+ sleep delay
19
+ off
20
+ sleep delay
21
+ end
22
+ end
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,49 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: electron
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Bryan Goines
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-10-24 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description:
15
+ email: bryann83@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/electron/base.rb
21
+ - lib/electron/button.rb
22
+ - lib/electron/led.rb
23
+ - lib/electron.rb
24
+ homepage: http://github.com/bry4n/electron
25
+ licenses: []
26
+ post_install_message:
27
+ rdoc_options: []
28
+ require_paths:
29
+ - lib
30
+ required_ruby_version: !ruby/object:Gem::Requirement
31
+ none: false
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ requirements: []
43
+ rubyforge_project:
44
+ rubygems_version: 1.8.23
45
+ signing_key:
46
+ specification_version: 3
47
+ summary: ! '...'
48
+ test_files: []
49
+ has_rdoc: