arduino_mega 0.1.0

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.
Files changed (2) hide show
  1. data/lib/arduino_mega.rb +170 -0
  2. metadata +56 -0
@@ -0,0 +1,170 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ # A ruby library to talk to Arduino without
4
+ # having to burn programs repeatedly to the board.
5
+ #
6
+ # Author:: Akash Manohar (akash@akash.im)
7
+ # Copyright:: Copyright (c) 2010 Akash Manohar
8
+ # License:: MIT License
9
+
10
+ require "serialport"
11
+
12
+ # The main Arduino class.
13
+ # Allows managing connection to board and getting & setting pin states.
14
+
15
+ class Arduino
16
+
17
+ # initialize port and baudrate
18
+ def initialize(port, baudrate=115200)
19
+ puts "initialized"
20
+ data_bits = 8
21
+ stop_bits = 1
22
+ parity = SerialPort::NONE
23
+
24
+ @serial = SerialPort.new port, baudrate
25
+ @serial.read_timeout = 2
26
+ @serial.sync
27
+
28
+ @port = port
29
+ @output_pins = []
30
+ @pin_states = {}
31
+ end
32
+
33
+ # Print information about connected board
34
+ def to_s
35
+ "Arduino is on port #{@port} at #{@serial.baud} baudrate"
36
+ end
37
+
38
+ # Set output pins. This is a must.
39
+ def output(*pin_list)
40
+ send_data(pin_list.length)
41
+ if pin_list.class==Array
42
+ @output_pins = pin_list
43
+ pin_list.each do |pin|
44
+ send_pin(pin)
45
+ end
46
+ else
47
+ raise ArgumentError, "Arguments must be a list of pin numbers"
48
+ end
49
+ puts "return pinlist"
50
+ return pin_list
51
+ end
52
+
53
+ # Set a pin state to low
54
+ def set_low(pin)
55
+ save_state(pin, false)
56
+ send_data('0')
57
+ send_pin(pin)
58
+ end
59
+
60
+ def is_low?(pin)
61
+ if !get_state(pin)
62
+ return true
63
+ else
64
+ return false
65
+ end
66
+ end
67
+
68
+ # Set a pin state to high
69
+ def set_high(pin)
70
+ save_state(pin, true)
71
+ send_data('1')
72
+ send_pin(pin)
73
+ end
74
+
75
+ def is_high?(pin)
76
+ if get_state(pin)
77
+ return true
78
+ else
79
+ return false
80
+ end
81
+ end
82
+
83
+ def save_state(pin, state)
84
+ @pin_states[pin.to_s] = state
85
+ end
86
+
87
+ # Get state of a digital pin. Returns true if high and false if low.
88
+ def get_state(pin)
89
+ if @pin_states.key?(pin.to_s)
90
+ return @pin_states[pin.to_s]
91
+ end
92
+ return false
93
+ end
94
+
95
+ # Write to an analog pin
96
+ def analog_write(pin, value)
97
+ send_data('3')
98
+ full_hex_value = value.to_s(base=16)
99
+ hex_value = hex_value[2..full_hex_value.length]
100
+ if(hex_value.length==1)
101
+ send_data('0')
102
+ else
103
+ send_data(hex_value[0])
104
+ end
105
+ send_data(hex_value[1])
106
+ end
107
+
108
+ # Read from an analog pin
109
+ def analog_read(pin)
110
+ send_data('4')
111
+ send_pin(pin)
112
+ get_data()
113
+ end
114
+
115
+ # set all pins to low
116
+ def turn_off
117
+ @output_pins.each do |pin|
118
+ set_low(pin)
119
+ end
120
+ end
121
+
122
+ # close serial connection to connected board
123
+ def close
124
+ # stops executing arduino code
125
+ @serial.write '5'.chr
126
+ # resets the arduino board (not on windows)
127
+ @serial.dtr=(0)
128
+ # close serial connection
129
+ @serial.close
130
+ p "closed"
131
+ end
132
+
133
+ private
134
+
135
+ def send_pin(pin)
136
+ pin_in_char = (pin+48)
137
+ send_data(pin_in_char)
138
+ end
139
+
140
+ def send_data(serial_data)
141
+ while true
142
+ break if get_data()=="?"
143
+ end
144
+ s = String(serial_data.chr)
145
+ x = @serial.write s
146
+ end
147
+
148
+ def get_data
149
+ clean_data = @serial.readlines()
150
+ clean_data = clean_data.join("").gsub("\n","").gsub("\r","")
151
+ end
152
+ end
153
+
154
+ # file: arduino_mega.rb
155
+
156
+ class ArduinoMega < Arduino
157
+
158
+ attr_accessor :p13h
159
+
160
+ def initialize(args=[])
161
+ super(*args)
162
+ output(13) # declare output pins
163
+ end
164
+
165
+ def p13h=(bflag)
166
+ send (bflag == true ? :set_high : :set_low), 13
167
+ end
168
+
169
+ end
170
+
metadata ADDED
@@ -0,0 +1,56 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: arduino_mega
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.0
6
+ platform: ruby
7
+ authors:
8
+ - James Robertson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2012-04-24 00:00:00 +01:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description:
18
+ email:
19
+ executables: []
20
+
21
+ extensions: []
22
+
23
+ extra_rdoc_files: []
24
+
25
+ files:
26
+ - lib/arduino_mega.rb
27
+ has_rdoc: true
28
+ homepage:
29
+ licenses: []
30
+
31
+ post_install_message:
32
+ rdoc_options: []
33
+
34
+ require_paths:
35
+ - lib
36
+ required_ruby_version: !ruby/object:Gem::Requirement
37
+ none: false
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: "0"
42
+ required_rubygems_version: !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
48
+ requirements: []
49
+
50
+ rubyforge_project:
51
+ rubygems_version: 1.5.2
52
+ signing_key:
53
+ specification_version: 3
54
+ summary: arduino_mega
55
+ test_files: []
56
+