arduino 0.3.3 → 0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +7 -1
- data/arduino.gemspec +3 -3
- data/arduino.pde +151 -131
- data/example_blink.rb +6 -2
- data/lib/arduino.rb +133 -120
- metadata +34 -64
data/README.md
CHANGED
@@ -4,7 +4,7 @@ This gem is a prototyping API for Arduino in Ruby. Helps prototype Arduino progr
|
|
4
4
|
|
5
5
|
#### Setup:
|
6
6
|
1. Install the gem: `gem install arduino`
|
7
|
-
2. Load [arduino.pde](https://github.com/
|
7
|
+
2. Load [arduino.pde](https://github.com/HashNuke/arduino/raw/master/arduino.pde) onto your Arduino dev board (just once and for all).
|
8
8
|
3. Import the arduino gem: `require "arduino"`
|
9
9
|
|
10
10
|
## Methods
|
@@ -65,3 +65,9 @@ The output pins must be set explicitly.
|
|
65
65
|
> © 2010 Akash Manohar <akash@akash.im>
|
66
66
|
> under the MIT License
|
67
67
|
|
68
|
+
# Credits
|
69
|
+
|
70
|
+
Thanks to the following people:
|
71
|
+
|
72
|
+
* [@unsymbol](http://github.com/unsymbol) - for fixing the Ubuntu reset problem
|
73
|
+
|
data/arduino.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "arduino"
|
6
|
-
s.version = "0.
|
6
|
+
s.version = "0.4"
|
7
7
|
s.date = %q{2011-01-01}
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["Akash Manohar"]
|
@@ -18,10 +18,10 @@ Thank you for installing the arduino gem
|
|
18
18
|
|
19
19
|
Load the arduino.pde program from http://ln.akash.im/arduino.pde to your board before using this library
|
20
20
|
|
21
|
-
Source: https://github.com/
|
21
|
+
Source: https://github.com/HashNuke/arduino/
|
22
22
|
|
23
23
|
--
|
24
|
-
|
24
|
+
@HashNuke
|
25
25
|
(http://akash.im)
|
26
26
|
==============================================
|
27
27
|
}
|
data/arduino.pde
CHANGED
@@ -1,131 +1,151 @@
|
|
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
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
}
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
}
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
}
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
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
|
+
int serialStatus = 0;
|
8
|
+
|
9
|
+
void setup() {
|
10
|
+
// connect to the serial port
|
11
|
+
Serial.begin(115200);
|
12
|
+
setupPins();
|
13
|
+
serialStatus = 1;
|
14
|
+
}
|
15
|
+
|
16
|
+
void loop()
|
17
|
+
{
|
18
|
+
|
19
|
+
if(serialStatus==0)
|
20
|
+
{
|
21
|
+
Serial.flush();
|
22
|
+
setupPins();
|
23
|
+
}
|
24
|
+
askCmd();
|
25
|
+
|
26
|
+
{
|
27
|
+
if(Serial.available()>0)
|
28
|
+
{
|
29
|
+
cmd = int(Serial.read()) - 48;
|
30
|
+
|
31
|
+
if(cmd==0) //set digital low
|
32
|
+
{
|
33
|
+
cmd_arg[0] = int(readData()) - 48;
|
34
|
+
digitalWrite(cmd_arg[0],LOW);
|
35
|
+
}
|
36
|
+
|
37
|
+
if(cmd==1) //set digital high
|
38
|
+
{
|
39
|
+
cmd_arg[0] = int(readData()) - 48;
|
40
|
+
digitalWrite(cmd_arg[0],HIGH);
|
41
|
+
}
|
42
|
+
|
43
|
+
if(cmd==2) //get digital value
|
44
|
+
{
|
45
|
+
cmd_arg[0] = int(readData()) - 48;
|
46
|
+
cmd_arg[0] = digitalRead(cmd_arg[0]);
|
47
|
+
Serial.println(cmd_arg[0]);
|
48
|
+
}
|
49
|
+
|
50
|
+
if(cmd==3) // set analog value
|
51
|
+
{
|
52
|
+
Serial.println("I'm in the right place");
|
53
|
+
cmd_arg[0] = int(readData()) - 48;
|
54
|
+
cmd_arg[1] = readHexValue();
|
55
|
+
analogWrite(cmd_arg[0],cmd_arg[1]);
|
56
|
+
}
|
57
|
+
|
58
|
+
if(cmd==4) //read analog value
|
59
|
+
{
|
60
|
+
cmd_arg[0] = int(readData()) - 48;
|
61
|
+
cmd_arg[0] = analogRead(cmd_arg[0]);
|
62
|
+
Serial.println(cmd_arg[0]);
|
63
|
+
}
|
64
|
+
|
65
|
+
if(cmd==5)
|
66
|
+
{
|
67
|
+
serialStatus = 0;
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
}
|
72
|
+
|
73
|
+
char readData()
|
74
|
+
{
|
75
|
+
askData();
|
76
|
+
|
77
|
+
while(1)
|
78
|
+
{
|
79
|
+
if(Serial.available()>0)
|
80
|
+
{
|
81
|
+
return Serial.read();
|
82
|
+
}
|
83
|
+
}
|
84
|
+
}
|
85
|
+
|
86
|
+
|
87
|
+
//read hex value from serial and convert to integer
|
88
|
+
int readHexValue()
|
89
|
+
{
|
90
|
+
int strval[2];
|
91
|
+
int converted_str;
|
92
|
+
|
93
|
+
while(1)
|
94
|
+
{
|
95
|
+
if(Serial.available()>0)
|
96
|
+
{
|
97
|
+
strval[0] = convert_hex_to_int(Serial.read());
|
98
|
+
break;
|
99
|
+
}
|
100
|
+
}
|
101
|
+
|
102
|
+
askData();
|
103
|
+
|
104
|
+
while(1)
|
105
|
+
{
|
106
|
+
if(Serial.available()>0)
|
107
|
+
{
|
108
|
+
strval[1] = convert_hex_to_int(Serial.read());
|
109
|
+
break;
|
110
|
+
}
|
111
|
+
}
|
112
|
+
|
113
|
+
converted_str = (strval[0]*16) + strval[1];
|
114
|
+
return converted_str;
|
115
|
+
}
|
116
|
+
|
117
|
+
|
118
|
+
int convert_hex_to_int(char c)
|
119
|
+
{
|
120
|
+
return (c <= '9') ? c-'0' : c-'a'+10;
|
121
|
+
}
|
122
|
+
|
123
|
+
|
124
|
+
void askData()
|
125
|
+
{
|
126
|
+
Serial.println("?");
|
127
|
+
}
|
128
|
+
|
129
|
+
|
130
|
+
void askCmd()
|
131
|
+
{
|
132
|
+
askData();
|
133
|
+
while(Serial.available()<=0)
|
134
|
+
{}
|
135
|
+
}
|
136
|
+
|
137
|
+
|
138
|
+
void setupPins()
|
139
|
+
{
|
140
|
+
while(Serial.available()<1)
|
141
|
+
{
|
142
|
+
// get number of output pins and convert to int
|
143
|
+
cmd = int(readData()) - 48;
|
144
|
+
for(int i=0; i<cmd; i++)
|
145
|
+
{
|
146
|
+
cmd_arg[0] = int(readData()) - 48;
|
147
|
+
pinMode(cmd_arg[0], OUTPUT);
|
148
|
+
}
|
149
|
+
break;
|
150
|
+
}
|
151
|
+
}
|
data/example_blink.rb
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
require "./lib/arduino"
|
2
2
|
|
3
|
+
port = '/dev/ttyUSB0'
|
4
|
+
|
3
5
|
#specify the port as an argument
|
4
|
-
board = Arduino.new(
|
6
|
+
board = Arduino.new(port)
|
5
7
|
|
6
8
|
#declare output pins
|
7
9
|
board.output(13)
|
8
10
|
|
9
11
|
#perform operations
|
10
|
-
|
12
|
+
5.times do
|
11
13
|
board.setHigh(13)
|
12
14
|
puts "High" if board.getState(13)
|
13
15
|
sleep(1)
|
@@ -15,3 +17,5 @@ board.output(13)
|
|
15
17
|
puts "Low" if !board.getState(13)
|
16
18
|
sleep(1)
|
17
19
|
end
|
20
|
+
|
21
|
+
board.close
|
data/lib/arduino.rb
CHANGED
@@ -12,126 +12,139 @@ require "serialport"
|
|
12
12
|
|
13
13
|
class Arduino
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
@pinStates = {}
|
22
|
-
end
|
15
|
+
# initialize port and baudrate
|
16
|
+
def initialize(port, baudrate=115200)
|
17
|
+
puts "initialized"
|
18
|
+
data_bits = 8
|
19
|
+
stop_bits = 1
|
20
|
+
parity = SerialPort::NONE
|
23
21
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
22
|
+
@serial = SerialPort.new port, baudrate
|
23
|
+
@serial.read_timeout = 2
|
24
|
+
@serial.sync
|
25
|
+
|
26
|
+
@port = port
|
27
|
+
@outputPins = []
|
28
|
+
@pinStates = {}
|
29
|
+
end
|
30
|
+
|
31
|
+
# Print information about connected board
|
32
|
+
def to_s
|
33
|
+
"Arduino is on port #{@port} at #{@serial.baud} baudrate"
|
34
|
+
end
|
35
|
+
|
36
|
+
# Set output pins. This is a must.
|
37
|
+
def output(*pinList)
|
38
|
+
sendData(pinList.length)
|
39
|
+
if pinList.class==Array
|
40
|
+
@outputPins = pinList
|
41
|
+
pinList.each do |pin|
|
42
|
+
sendPin(pin)
|
43
|
+
end
|
44
|
+
else
|
45
|
+
raise ArgumentError, "Arguments must be a list of pin numbers"
|
46
|
+
end
|
47
|
+
puts "return pinlist"
|
48
|
+
return pinList
|
49
|
+
end
|
50
|
+
|
51
|
+
# Set a pin state to low
|
52
|
+
def setLow(pin)
|
53
|
+
saveState(pin, false)
|
54
|
+
sendData('0')
|
55
|
+
sendPin(pin)
|
56
|
+
end
|
57
|
+
|
58
|
+
def isLow?(pin)
|
59
|
+
if !getState(pin)
|
60
|
+
return true
|
61
|
+
else
|
62
|
+
return false
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Set a pin state to high
|
67
|
+
def setHigh(pin)
|
68
|
+
saveState(pin, true)
|
69
|
+
sendData('1')
|
70
|
+
sendPin(pin)
|
71
|
+
end
|
72
|
+
|
73
|
+
def isHigh?(pin)
|
74
|
+
if getState(pin)
|
75
|
+
return true
|
76
|
+
else
|
77
|
+
return false
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def saveState(pin, state)
|
82
|
+
@pinStates[pin.to_s] = state
|
83
|
+
end
|
84
|
+
|
85
|
+
# Get state of a digital pin. Returns true if high and false if low.
|
86
|
+
def getState(pin)
|
87
|
+
if @pinStates.key?(pin.to_s)
|
88
|
+
return @pinStates[pin.to_s]
|
89
|
+
end
|
90
|
+
return false
|
91
|
+
end
|
92
|
+
|
93
|
+
# Write to an analog pin
|
94
|
+
def analogWrite(pin, value)
|
95
|
+
sendData('3')
|
96
|
+
fullHexValue = value.to_s(base=16)
|
97
|
+
hexValue = hexValue[2..fullHexValue.length]
|
98
|
+
if(hexValue.length==1)
|
99
|
+
sendData('0')
|
100
|
+
else
|
101
|
+
sendData(hexValue[0])
|
102
|
+
end
|
103
|
+
sendData(hexValue[1])
|
104
|
+
end
|
105
|
+
|
106
|
+
# Read from an analog pin
|
107
|
+
def analogRead(pin)
|
108
|
+
sendData('4')
|
109
|
+
sendPin(pin)
|
110
|
+
getData()
|
111
|
+
end
|
112
|
+
|
113
|
+
# set all pins to low
|
114
|
+
def turnOff
|
115
|
+
@outputPins.each do |pin|
|
116
|
+
setLow(pin)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
# close serial connection to connected board
|
121
|
+
def close
|
122
|
+
# stops executing arduino code
|
123
|
+
@serial.write '5'.chr
|
124
|
+
# resets the arduino board (not on windows)
|
125
|
+
@serial.dtr=(0)
|
126
|
+
# close serial connection
|
127
|
+
@serial.close
|
128
|
+
p "closed"
|
129
|
+
end
|
130
|
+
|
131
|
+
private
|
132
|
+
|
133
|
+
def sendPin(pin)
|
134
|
+
pinInChar = (pin+48)
|
135
|
+
sendData(pinInChar)
|
136
|
+
end
|
43
137
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
# Set a pin state to high
|
60
|
-
def setHigh(pin)
|
61
|
-
saveState(pin, true)
|
62
|
-
sendData('1')
|
63
|
-
sendPin(pin)
|
64
|
-
end
|
65
|
-
|
66
|
-
def isHigh?(pin)
|
67
|
-
if getState(pin)
|
68
|
-
return true
|
69
|
-
else
|
70
|
-
return false
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def saveState(pin, state)
|
75
|
-
@pinStates[pin.to_s] = state
|
76
|
-
end
|
77
|
-
|
78
|
-
# Get state of a digital pin. Returns true if high and false if low.
|
79
|
-
def getState(pin)
|
80
|
-
if @pinStates.key?(pin.to_s)
|
81
|
-
return @pinStates[pin.to_s]
|
82
|
-
end
|
83
|
-
return false
|
84
|
-
end
|
85
|
-
|
86
|
-
# Write to an analog pin
|
87
|
-
def analogWrite(pin, value)
|
88
|
-
sendData('3')
|
89
|
-
fullHexValue = value.to_s(base=16)
|
90
|
-
hexValue = hexValue[2..fullHexValue.length]
|
91
|
-
if(hexValue.length==1)
|
92
|
-
sendData('0')
|
93
|
-
else
|
94
|
-
sendData(hexValue[0])
|
95
|
-
end
|
96
|
-
sendData(hexValue[1])
|
97
|
-
end
|
98
|
-
|
99
|
-
# Read from an analog pin
|
100
|
-
def analogRead(pin)
|
101
|
-
sendData('4')
|
102
|
-
sendPin(pin)
|
103
|
-
getData()
|
104
|
-
end
|
105
|
-
|
106
|
-
# set all pins to low
|
107
|
-
def turnOff
|
108
|
-
@outputPins.each do |pin|
|
109
|
-
setLow(pin)
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
# close serial connection to connected board
|
114
|
-
def close
|
115
|
-
@serial.close
|
116
|
-
end
|
117
|
-
|
118
|
-
private
|
119
|
-
|
120
|
-
def sendPin(pin)
|
121
|
-
pinInChar = (pin+48)
|
122
|
-
sendData(pinInChar)
|
123
|
-
end
|
124
|
-
|
125
|
-
def sendData(serialData)
|
126
|
-
while true
|
127
|
-
break if getData()=="?"
|
128
|
-
end
|
129
|
-
s = String(serialData.chr)
|
130
|
-
x = @serial.write (s)
|
131
|
-
end
|
132
|
-
|
133
|
-
def getData
|
134
|
-
cleanData = @serial.readlines()
|
135
|
-
cleanData = cleanData.join("").gsub("\n","").gsub("\r","")
|
136
|
-
end
|
138
|
+
def sendData(serialData)
|
139
|
+
while true
|
140
|
+
break if getData()=="?"
|
141
|
+
end
|
142
|
+
s = String(serialData.chr)
|
143
|
+
x = @serial.write s
|
144
|
+
end
|
145
|
+
|
146
|
+
def getData
|
147
|
+
cleanData = @serial.readlines()
|
148
|
+
cleanData = cleanData.join("").gsub("\n","").gsub("\r","")
|
149
|
+
end
|
137
150
|
end
|
metadata
CHANGED
@@ -1,47 +1,35 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: arduino
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 3
|
8
|
-
- 3
|
9
|
-
version: 0.3.3
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.4'
|
5
|
+
prerelease:
|
10
6
|
platform: ruby
|
11
|
-
authors:
|
7
|
+
authors:
|
12
8
|
- Akash Manohar
|
13
9
|
autorequire:
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
dependencies:
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-01-01 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: serialport
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70182320491400 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
segments:
|
29
|
-
- 1
|
30
|
-
- 0
|
31
|
-
- 4
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
32
21
|
version: 1.0.4
|
33
22
|
type: :runtime
|
34
|
-
|
35
|
-
|
36
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70182320491400
|
25
|
+
description: A ruby library to talk to Arduino without having to burn programs repeatedly
|
26
|
+
to the board
|
27
|
+
email:
|
37
28
|
- akash@akash.im
|
38
29
|
executables: []
|
39
|
-
|
40
30
|
extensions: []
|
41
|
-
|
42
31
|
extra_rdoc_files: []
|
43
|
-
|
44
|
-
files:
|
32
|
+
files:
|
45
33
|
- .gitignore
|
46
34
|
- Gemfile
|
47
35
|
- Gemfile.lock
|
@@ -52,49 +40,31 @@ files:
|
|
52
40
|
- arduino.pde
|
53
41
|
- example_blink.rb
|
54
42
|
- lib/arduino.rb
|
55
|
-
has_rdoc: true
|
56
43
|
homepage: http://akash.im/arduino-ruby
|
57
44
|
licenses: []
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
----------------------------------------------\n\
|
63
|
-
\t\n\
|
64
|
-
Load the arduino.pde program from http://ln.akash.im/arduino.pde to your board before using this library\n\
|
65
|
-
\t\n\
|
66
|
-
Source: https://github.com/SingAlong/arduino/\n\n\
|
67
|
-
--\n\
|
68
|
-
SingAlong\n\
|
69
|
-
(http://akash.im)\n\
|
70
|
-
==============================================\n\
|
71
|
-
\t"
|
45
|
+
post_install_message: ! "\n==============================================\nThank you
|
46
|
+
for installing the arduino gem\n----------------------------------------------\n\t\nLoad
|
47
|
+
the arduino.pde program from http://ln.akash.im/arduino.pde to your board before
|
48
|
+
using this library\n\t\nSource: https://github.com/HashNuke/arduino/\n\n--\n@HashNuke\n(http://akash.im)\n==============================================\n\t"
|
72
49
|
rdoc_options: []
|
73
|
-
|
74
|
-
require_paths:
|
50
|
+
require_paths:
|
75
51
|
- lib
|
76
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
52
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
77
53
|
none: false
|
78
|
-
requirements:
|
79
|
-
- -
|
80
|
-
- !ruby/object:Gem::Version
|
81
|
-
|
82
|
-
|
83
|
-
version: "0"
|
84
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ! '>='
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: '0'
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
59
|
none: false
|
86
|
-
requirements:
|
87
|
-
- -
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
|
90
|
-
- 0
|
91
|
-
version: "0"
|
60
|
+
requirements:
|
61
|
+
- - ! '>='
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '0'
|
92
64
|
requirements: []
|
93
|
-
|
94
65
|
rubyforge_project: arduino
|
95
|
-
rubygems_version: 1.
|
66
|
+
rubygems_version: 1.8.10
|
96
67
|
signing_key:
|
97
68
|
specification_version: 3
|
98
69
|
summary: Arduino Prototyping API for Ruby
|
99
70
|
test_files: []
|
100
|
-
|