arduino 0.2 → 0.3
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.
- data/Gemfile.lock +16 -0
- data/MIT-license.txt +19 -0
- data/README.md +67 -0
- data/arduino.gemspec +1 -1
- data/arduino.pde +131 -0
- data/example_blink.rb +15 -0
- data/lib/arduino.rb +30 -7
- data/lib/arduino/version.rb +1 -1
- metadata +8 -3
data/Gemfile.lock
ADDED
data/MIT-license.txt
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Copyright (c) 2009-2010 Akash Manohar J <akash@akash.im>
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
4
|
+
of this software and associated documentation files (the "Software"), to deal
|
5
|
+
in the Software without restriction, including without limitation the rights
|
6
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
7
|
+
copies of the Software, and to permit persons to whom the Software is
|
8
|
+
furnished to do so, subject to the following conditions:
|
9
|
+
|
10
|
+
The above copyright notice and this permission notice shall be included in
|
11
|
+
all copies or substantial portions of the Software.
|
12
|
+
|
13
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
14
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
15
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
16
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
17
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
18
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
19
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# Arduino ruby gem
|
2
|
+
|
3
|
+
Arduino is a prototyping API for Arduino in Ruby. Helps prototype Arduino programs quickly from the computer, without the need to burn to the board frequently.
|
4
|
+
|
5
|
+
#### Setup:
|
6
|
+
1. Install the gem: `gem install arduino`
|
7
|
+
2. Load arduino.pde onto your Arduino dev board (just once and for all).
|
8
|
+
3. Import the arduino gem: `require "arduino"`
|
9
|
+
|
10
|
+
## Methods
|
11
|
+
|
12
|
+
#### Initializing:
|
13
|
+
|
14
|
+
#Arduino.new(port, baudrate)
|
15
|
+
board = Arduino.new("/dev/ttyUSB1")
|
16
|
+
|
17
|
+
Port is something like "/dev/ttyUSB0" on linux and COM*x* (COM1/COM2) on windows. Baudrate is optional. It is 115200 by default.
|
18
|
+
|
19
|
+
#### Setting output pins
|
20
|
+
|
21
|
+
The output pins must be set explicitly.
|
22
|
+
|
23
|
+
#Arduino.output(list_of_output_pins)
|
24
|
+
board.output(10,11,13)
|
25
|
+
|
26
|
+
|
27
|
+
**Digital I/O**
|
28
|
+
|
29
|
+
1. `Arduino.setHigh(pin)`
|
30
|
+
2. `Arduino.setLow(pin)`
|
31
|
+
3. `Arduino.getState(pin)` - returns `true` if pin state is high, else it returns `false`
|
32
|
+
|
33
|
+
**Analog I/O**
|
34
|
+
|
35
|
+
1. `Arduino.analogRead(pin)` - returns the analog value
|
36
|
+
2. `Arduino.analogRead(pin, value)` - sets the analog value
|
37
|
+
|
38
|
+
**Misc**
|
39
|
+
|
40
|
+
1.) `Arduino.turnOff` - sets all the pins to low state
|
41
|
+
|
42
|
+
2.) `Arduino.close` - closes serial connection. Using this makes sure that you won't have to disconnect & reconnect the Arduino again to recover the serial port.
|
43
|
+
|
44
|
+
## Usage example
|
45
|
+
|
46
|
+
# This is the blink program.
|
47
|
+
|
48
|
+
require "arduino"
|
49
|
+
|
50
|
+
#specify the port Baudrate is optional and set to 115200 by default
|
51
|
+
myBoard = Arduino.new("/dev/ttyUSB1")
|
52
|
+
|
53
|
+
#declare output pins
|
54
|
+
myBoard.output(13)
|
55
|
+
|
56
|
+
#perform operations
|
57
|
+
10.times do
|
58
|
+
myBoard.setHigh(13)
|
59
|
+
sleep(1)
|
60
|
+
myBoard.setLow(13)
|
61
|
+
sleep(1)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Developed for the love of programming by
|
65
|
+
> © 2010 Akash Manohar <akash@akash.im>
|
66
|
+
> under the MIT License
|
67
|
+
|
data/arduino.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.email = ["akash@akash.im"]
|
11
11
|
s.homepage = ""
|
12
12
|
s.summary = %q{Arduino Prototyping API for Ruby}
|
13
|
-
s.description = %q{A library to talk to Arduino
|
13
|
+
s.description = %q{A ruby library to talk to Arduino without having to burn programs repeatedly to the board}
|
14
14
|
|
15
15
|
s.rubyforge_project = "arduino"
|
16
16
|
|
data/arduino.pde
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
// variable to store the data from the serial port
|
2
|
+
int cmd = 0;
|
3
|
+
|
4
|
+
// command arguments
|
5
|
+
int cmd_arg[2];
|
6
|
+
|
7
|
+
|
8
|
+
void setup() {
|
9
|
+
// connect to the serial port
|
10
|
+
Serial.begin(115200);
|
11
|
+
// confirm ready state
|
12
|
+
|
13
|
+
while(Serial.available()<1)
|
14
|
+
{
|
15
|
+
// get number of output pins and convert to int
|
16
|
+
cmd = int(readData()) - 48;
|
17
|
+
for(int i=0; i<cmd; i++)
|
18
|
+
{
|
19
|
+
cmd_arg[0] = int(readData()) - 48;
|
20
|
+
pinMode(cmd_arg[0], OUTPUT);
|
21
|
+
}
|
22
|
+
break;
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
26
|
+
void loop()
|
27
|
+
{
|
28
|
+
|
29
|
+
askCmd();
|
30
|
+
|
31
|
+
if(Serial.available()>0)
|
32
|
+
{
|
33
|
+
cmd = int(Serial.read()) - 48;
|
34
|
+
|
35
|
+
if(cmd==0) //set digital low
|
36
|
+
{
|
37
|
+
cmd_arg[0] = int(readData()) - 48;
|
38
|
+
digitalWrite(cmd_arg[0],LOW);
|
39
|
+
}
|
40
|
+
|
41
|
+
if(cmd==1) //set digital high
|
42
|
+
{
|
43
|
+
cmd_arg[0] = int(readData()) - 48;
|
44
|
+
digitalWrite(cmd_arg[0],HIGH);
|
45
|
+
}
|
46
|
+
|
47
|
+
if(cmd==2) //get digital value
|
48
|
+
{
|
49
|
+
cmd_arg[0] = int(readData()) - 48;
|
50
|
+
cmd_arg[0] = digitalRead(cmd_arg[0]);
|
51
|
+
Serial.println(cmd_arg[0]);
|
52
|
+
}
|
53
|
+
|
54
|
+
if(cmd==3) // set analog value
|
55
|
+
{
|
56
|
+
Serial.println("I'm in the right place");
|
57
|
+
cmd_arg[0] = int(readData()) - 48;
|
58
|
+
cmd_arg[1] = readHexValue();
|
59
|
+
analogWrite(cmd_arg[0],cmd_arg[1]);
|
60
|
+
}
|
61
|
+
|
62
|
+
if(cmd==4) //read analog value
|
63
|
+
{
|
64
|
+
cmd_arg[0] = int(readData()) - 48;
|
65
|
+
cmd_arg[0] = analogRead(cmd_arg[0]);
|
66
|
+
Serial.println(cmd_arg[0]);
|
67
|
+
}
|
68
|
+
}
|
69
|
+
}
|
70
|
+
|
71
|
+
char readData()
|
72
|
+
{
|
73
|
+
askData();
|
74
|
+
|
75
|
+
while(1)
|
76
|
+
{
|
77
|
+
if(Serial.available()>0)
|
78
|
+
{
|
79
|
+
return Serial.read();
|
80
|
+
}
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
|
85
|
+
//read hex value from serial and convert to integer
|
86
|
+
int readHexValue()
|
87
|
+
{
|
88
|
+
int strval[2];
|
89
|
+
int converted_str;
|
90
|
+
|
91
|
+
while(1)
|
92
|
+
{
|
93
|
+
if(Serial.available()>0)
|
94
|
+
{
|
95
|
+
strval[0] = convert_hex_to_int(Serial.read());
|
96
|
+
break;
|
97
|
+
}
|
98
|
+
}
|
99
|
+
|
100
|
+
askData();
|
101
|
+
|
102
|
+
while(1)
|
103
|
+
{
|
104
|
+
if(Serial.available()>0)
|
105
|
+
{
|
106
|
+
strval[1] = convert_hex_to_int(Serial.read());
|
107
|
+
break;
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
converted_str = (strval[0]*16) + strval[1];
|
112
|
+
return converted_str;
|
113
|
+
}
|
114
|
+
|
115
|
+
int convert_hex_to_int(char c)
|
116
|
+
{
|
117
|
+
return (c <= '9') ? c-'0' : c-'a'+10;
|
118
|
+
}
|
119
|
+
|
120
|
+
void askData()
|
121
|
+
{
|
122
|
+
Serial.println("?");
|
123
|
+
}
|
124
|
+
|
125
|
+
void askCmd()
|
126
|
+
{
|
127
|
+
askData();
|
128
|
+
while(Serial.available()<=0)
|
129
|
+
{}
|
130
|
+
}
|
131
|
+
|
data/example_blink.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require "arduino"
|
2
|
+
|
3
|
+
#specify the port as an argument
|
4
|
+
myBoard = Arduino.new('/dev/ttyUSB2')
|
5
|
+
|
6
|
+
#declare output pins
|
7
|
+
myBoard.output(13)
|
8
|
+
|
9
|
+
#perform operations
|
10
|
+
10.times do
|
11
|
+
myBoard.setHigh(13)
|
12
|
+
sleep(1)
|
13
|
+
myBoard.setLow(13)
|
14
|
+
sleep(1)
|
15
|
+
end
|
data/lib/arduino.rb
CHANGED
@@ -1,18 +1,35 @@
|
|
1
|
+
# The program takes an initial word or phrase from
|
2
|
+
# the command line (or in the absence of a
|
3
|
+
# parameter from the first line of standard
|
4
|
+
# input). In then reads successive words or
|
5
|
+
# phrases from standard input and reports whether
|
6
|
+
# they are angrams of the first word.
|
7
|
+
#
|
8
|
+
# Author:: Dave Thomas (mailto:dave@x.y)
|
9
|
+
# Copyright:: Copyright (c) 2002 The Pragmatic Programmers, LLC
|
10
|
+
# License:: Distributes under the same terms as Ruby
|
11
|
+
|
1
12
|
require "serialport"
|
2
13
|
|
14
|
+
# The main Arduino class.
|
15
|
+
# Allows managing connection to board and getting & setting pin states.
|
16
|
+
|
3
17
|
class Arduino
|
4
18
|
|
19
|
+
# initialize port and baudrate
|
5
20
|
def initialize(port, baudrate=115200)
|
6
21
|
@serial = SerialPort.new port, baudrate
|
7
22
|
@serial.sync
|
8
|
-
@port = port
|
23
|
+
@port = port
|
9
24
|
@outputPins = []
|
10
25
|
end
|
11
26
|
|
27
|
+
# Print information about connected board
|
12
28
|
def to_s
|
13
29
|
"Arduino is on port #{@port} at #{@serial.baud} baudrate"
|
14
30
|
end
|
15
|
-
|
31
|
+
|
32
|
+
# Set output pins. This is a must.
|
16
33
|
def output(*pinList)
|
17
34
|
sendData(pinList.length)
|
18
35
|
|
@@ -26,22 +43,26 @@ class Arduino
|
|
26
43
|
end
|
27
44
|
end
|
28
45
|
|
46
|
+
# Get state of a digital pin. Returns true if high and false if low.
|
29
47
|
def getState(pin)
|
30
48
|
sendData('2')
|
31
49
|
sendPin(pin)
|
32
50
|
return formatPinState(getData())
|
33
51
|
end
|
34
52
|
|
53
|
+
# Set a pin state to low
|
35
54
|
def setLow(pin)
|
36
55
|
sendData('0')
|
37
56
|
sendPin(pin)
|
38
57
|
end
|
39
|
-
|
58
|
+
|
59
|
+
# Set a pin state to high
|
40
60
|
def setHigh(pin)
|
41
61
|
sendData('1')
|
42
62
|
sendPin(pin)
|
43
63
|
end
|
44
|
-
|
64
|
+
|
65
|
+
# Write to an analog pin
|
45
66
|
def analogWrite(pin, value)
|
46
67
|
sendData('3')
|
47
68
|
fullHexValue = value.to_s(base=16)
|
@@ -54,18 +75,21 @@ class Arduino
|
|
54
75
|
sendData(hexValue[1])
|
55
76
|
end
|
56
77
|
|
78
|
+
# Read from an analog pin
|
57
79
|
def analogRead(pin)
|
58
80
|
sendData('4')
|
59
81
|
sendPin(pin)
|
60
82
|
getData()
|
61
83
|
end
|
62
84
|
|
85
|
+
# set all pins to low
|
63
86
|
def turnOff
|
64
87
|
@outputPins.each do |pin|
|
65
88
|
setLow(pin)
|
66
89
|
end
|
67
90
|
end
|
68
91
|
|
92
|
+
# close serial connection to connected board
|
69
93
|
def close
|
70
94
|
@serial.close
|
71
95
|
end
|
@@ -91,9 +115,8 @@ class Arduino
|
|
91
115
|
end
|
92
116
|
|
93
117
|
def formatPinState(pinValue)
|
94
|
-
return
|
95
|
-
return
|
96
|
-
#raise Exception, "Data/Connection error"
|
118
|
+
return true if pinValue=="1"
|
119
|
+
return false #if pinValue=="0"
|
97
120
|
end
|
98
121
|
|
99
122
|
end
|
data/lib/arduino/version.rb
CHANGED
metadata
CHANGED
@@ -4,8 +4,8 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
version: "0.
|
7
|
+
- 3
|
8
|
+
version: "0.3"
|
9
9
|
platform: ruby
|
10
10
|
authors:
|
11
11
|
- Akash Manohar
|
@@ -17,7 +17,7 @@ date: 2011-01-01 00:00:00 +05:30
|
|
17
17
|
default_executable:
|
18
18
|
dependencies: []
|
19
19
|
|
20
|
-
description: A library to talk to Arduino
|
20
|
+
description: A ruby library to talk to Arduino without having to burn programs repeatedly to the board
|
21
21
|
email:
|
22
22
|
- akash@akash.im
|
23
23
|
executables: []
|
@@ -29,8 +29,13 @@ extra_rdoc_files: []
|
|
29
29
|
files:
|
30
30
|
- .gitignore
|
31
31
|
- Gemfile
|
32
|
+
- Gemfile.lock
|
33
|
+
- MIT-license.txt
|
34
|
+
- README.md
|
32
35
|
- Rakefile
|
33
36
|
- arduino.gemspec
|
37
|
+
- arduino.pde
|
38
|
+
- example_blink.rb
|
34
39
|
- lib/arduino.rb
|
35
40
|
- lib/arduino/version.rb
|
36
41
|
has_rdoc: true
|