farmbot-serial 0.1.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/arduino.rb +2 -2
- data/lib/arduino/outgoing_handler.rb +3 -3
- data/lib/gcode.rb +19 -8
- data/spec/lib/gcode_spec.rb +12 -5
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b9026a21d4da007da2bdc85509d68297763fce5
|
4
|
+
data.tar.gz: 78705810cdea9c1b98e6f217859b2be0a08e6090
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d02a8e074e6964ed3340b0450528b3caac103bc54734266cbd24db2d1db25c1516ed48fbd704cd17416f4a6c6f9134da4cbc1e8c18d0a467e560c13d27614aa6
|
7
|
+
data.tar.gz: 1aa4ede5691439074cd5de2e269b52e18a405d65a2faac85aeac8d305b8643e50570de696fa58a72ee4a54468e0f42ad63dc4d688a8f5ce7d19d613710ef5f7f
|
data/lib/arduino.rb
CHANGED
@@ -20,7 +20,7 @@ module FB
|
|
20
20
|
y += (bot.current_position.y || 0)
|
21
21
|
z += (bot.current_position.z || 0)
|
22
22
|
|
23
|
-
write "G00 X#{x} Y#{y} Z#{z}"
|
23
|
+
write { FB::Gcode.new { "G00 X#{x} Y#{y} Z#{z}" } }
|
24
24
|
end
|
25
25
|
|
26
26
|
def move_absolute(x: 0, y: 0, z: 0, s: 100)
|
@@ -61,8 +61,8 @@ module FB
|
|
61
61
|
|
62
62
|
private
|
63
63
|
|
64
|
-
def write(str)
|
65
|
-
bot.write(FB::Gcode.new
|
64
|
+
def write(str = "\n")
|
65
|
+
bot.write( block_given? ? yield : FB::Gcode.new{ str } )
|
66
66
|
end
|
67
67
|
end
|
68
68
|
end
|
data/lib/gcode.rb
CHANGED
@@ -3,18 +3,16 @@ module FB
|
|
3
3
|
class Gcode
|
4
4
|
GCODE_DICTIONARY = YAML.load_file(File.join(File.dirname(__FILE__), 'gcode.yml'))
|
5
5
|
|
6
|
-
attr_accessor :cmd, :params, :
|
6
|
+
attr_accessor :cmd, :params, :block
|
7
7
|
|
8
|
-
def initialize(
|
9
|
-
@
|
10
|
-
@params = str.split(' ').map { |line| GcodeToken.new(line) }
|
11
|
-
@cmd = @params.shift || 'NULL'
|
8
|
+
def initialize(&block)
|
9
|
+
@block = block
|
12
10
|
end
|
13
11
|
|
14
12
|
# Turns a string of many gcodes into an array of many gcodes. Used to parse
|
15
13
|
# incoming serial.
|
16
14
|
def self.parse_lines(string)
|
17
|
-
string.gsub("\r", '').split("\n").map { |s| self.new
|
15
|
+
string.gsub("\r", '').split("\n").map { |s| self.new { s } }
|
18
16
|
end
|
19
17
|
|
20
18
|
# Returns a symbolized english version of the gcode's name.
|
@@ -24,12 +22,25 @@ module FB
|
|
24
22
|
|
25
23
|
def to_s
|
26
24
|
# self.to_s # => "A12 B23 C45"
|
27
|
-
[
|
25
|
+
[cmd, *params].map(&:to_s).join(" ")
|
26
|
+
end
|
27
|
+
|
28
|
+
def params
|
29
|
+
@block
|
30
|
+
.call
|
31
|
+
.split(' ')
|
32
|
+
.map { |line| GcodeToken.new(line) }
|
33
|
+
.tap { |p| p.shift }
|
34
|
+
end
|
35
|
+
|
36
|
+
def cmd
|
37
|
+
cmd = @block.call.split(' ')
|
38
|
+
GcodeToken.new(cmd.any? ? cmd.first : "NULL0")
|
28
39
|
end
|
29
40
|
|
30
41
|
# A head/tail pair of a single node of GCode. Ex: R01 = [:R, '01']
|
31
42
|
class GcodeToken
|
32
|
-
attr_reader :head, :tail
|
43
|
+
attr_reader :head, :tail
|
33
44
|
|
34
45
|
def initialize(str)
|
35
46
|
nodes = str.scan(/\d+|\D+/) # ["R", "01"]
|
data/spec/lib/gcode_spec.rb
CHANGED
@@ -1,17 +1,18 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
describe FB::Gcode do
|
3
|
-
let(:gcode) { FB::Gcode.new
|
3
|
+
let(:gcode) { FB::Gcode.new{ "F31 P8 " } }
|
4
|
+
let(:null_token) { FB::Gcode::GcodeToken.new("NULL0") }
|
4
5
|
|
5
6
|
it("initializes from string") { expect(gcode).to be_kind_of(FB::Gcode) }
|
6
7
|
|
7
8
|
it("infers Gcode name") { expect(gcode.name).to eq(:read_status) }
|
8
9
|
|
9
10
|
it "returns :unknown for bad Gcode tokens" do
|
10
|
-
unknown = FB::Gcode.new
|
11
|
+
unknown = FB::Gcode.new{ "QQQ31 F32 " }.name
|
11
12
|
expect(unknown).to eq(:unknown)
|
12
13
|
end
|
13
14
|
|
14
|
-
it("sets the original input string") { expect(gcode.
|
15
|
+
it("sets the original input string") { expect(gcode.block[]).to eq("F31 P8 ") }
|
15
16
|
|
16
17
|
it("sets @cmd using the first Gcode node") do
|
17
18
|
expect(gcode.cmd).to be_kind_of(FB::Gcode::GcodeToken)
|
@@ -39,8 +40,14 @@ describe FB::Gcode do
|
|
39
40
|
end
|
40
41
|
|
41
42
|
it 'handles parameterless Gcode' do
|
42
|
-
expect(FB::Gcode.new
|
43
|
-
expect(FB::Gcode.new
|
43
|
+
expect(FB::Gcode.new{ " " }.name).to be(:unknown)
|
44
|
+
expect(FB::Gcode.new{ " " }.cmd.head).to eq(null_token.head)
|
45
|
+
expect(FB::Gcode.new{ " " }.cmd.tail).to eq(null_token.tail)
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'sets dyanmic parameters' do
|
49
|
+
random_gcode = FB::Gcode.new{ "Q#{Time.now.to_f.to_s[-2, 2]}" }
|
50
|
+
expect(random_gcode.cmd.tail).to_not eq(random_gcode.cmd.tail)
|
44
51
|
end
|
45
52
|
end
|
46
53
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: farmbot-serial
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Evers
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-04-
|
12
|
+
date: 2015-04-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|