226 lines
4.9 KiB
Ruby
226 lines
4.9 KiB
Ruby
|
require 'pp'
|
||
|
require 'rubygems'
|
||
|
require 'serialport'
|
||
|
require 'png'
|
||
|
|
||
|
# Requires the gems serialport and png
|
||
|
#
|
||
|
# $ gem install ruby-serialport
|
||
|
# $ gem install png
|
||
|
|
||
|
|
||
|
@sp = SerialPort.new '/dev/tty.usbserial-A4001o6L', 19200
|
||
|
|
||
|
@canvas = PNG::Canvas.new(500,500)
|
||
|
@x = 0
|
||
|
@y = 0
|
||
|
@ready_for_command = true
|
||
|
@last_byte = Time.now
|
||
|
|
||
|
@input = ''
|
||
|
|
||
|
@step_count = 0
|
||
|
|
||
|
Thread.new do
|
||
|
step_mode = false
|
||
|
@sp.each_byte do |byte|
|
||
|
#puts byte.chr
|
||
|
|
||
|
@last_byte = Time.now
|
||
|
@input << byte.chr
|
||
|
if byte == 126 # ('~')
|
||
|
step_mode = true
|
||
|
@input << '[step mode on]'
|
||
|
else
|
||
|
if step_mode
|
||
|
@step_count += 1
|
||
|
if byte == 10
|
||
|
@input << '[step mode off]'
|
||
|
step_mode = false
|
||
|
else
|
||
|
step = byte-33
|
||
|
puts @step_count
|
||
|
if (step & 1) != 0
|
||
|
if (step & 8) != 0
|
||
|
puts "x-1"
|
||
|
@x+=1
|
||
|
else
|
||
|
puts "x+1"
|
||
|
@x-=1
|
||
|
end
|
||
|
end
|
||
|
if (step & 2) != 0
|
||
|
if (step & 16) != 0
|
||
|
puts "y-1"
|
||
|
@y+=1
|
||
|
else
|
||
|
puts "y+1"
|
||
|
@y-=1
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
else
|
||
|
if byte == 62 # '>'
|
||
|
@ready_for_command = true
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
@canvas[250-@x,250-@y] = PNG::Color::Black
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def send_command(command)
|
||
|
while !@ready_for_command do
|
||
|
sleep(1)
|
||
|
puts "Processing ..."
|
||
|
if (Time.now-@last_byte > 5)
|
||
|
return
|
||
|
end
|
||
|
end
|
||
|
sleep(0.5)
|
||
|
puts "Sent: #{command}"
|
||
|
@input << "[sent #{command}]"
|
||
|
@sp.write("#{command}\r")
|
||
|
@ready_for_command = false
|
||
|
end
|
||
|
|
||
|
|
||
|
blocks = <<-END.split("\n").map{|s|s.strip}
|
||
|
N10 G00 Z100.000 G53
|
||
|
N15 G00 X38.105 Y71.468 G53
|
||
|
N20 Z2.0 F200 G53
|
||
|
N25 G01 Z-0.2 G53
|
||
|
N30 X37.177 Y74.406 G53
|
||
|
N35 X37.779 Y74.698 G53
|
||
|
N40 X41.077 Y76.347 G53
|
||
|
N45 X42.177 Y73.719 G53
|
||
|
N50 X40.304 Y72.173 G53
|
||
|
N55 X39.548 Y73.873 G53
|
||
|
N60 X38.638 Y73.152 G53
|
||
|
N65 X39.153 Y71.915 G53
|
||
|
N70 X38.105 Y71.468 G53
|
||
|
N75 G00 Z2.0 G53
|
||
|
N80 X37.266 Y75.042 G53
|
||
|
N85 G01 Z-0.2 G53
|
||
|
N90 X37.862 Y79.198 G53
|
||
|
N95 G00 Z2.0 G53
|
||
|
N100 X37.684 Y77.960 G53
|
||
|
N105 G01 Z-0.2 G53
|
||
|
N110 X42.718 Y77.239 G53
|
||
|
N115 G00 Z2.0 G53
|
||
|
N120 X42.895 Y78.476 G53
|
||
|
N125 G01 Z-0.2 G53
|
||
|
N130 X42.300 Y74.320 G53
|
||
|
N135 G00 Z2.0 G53
|
||
|
N140 X43.975 Y77.690 G53
|
||
|
N145 G01 Z-0.2 G53
|
||
|
N150 X43.425 Y77.769 G53
|
||
|
N155 G00 Z2.0 G53
|
||
|
N160 X44.604 Y78.161 G53
|
||
|
N165 G01 Z-0.2 G53
|
||
|
N170 G02 X43.975 Y77.690 I-0.550 J0.079 G53
|
||
|
N175 G00 Z2.0 G53
|
||
|
N180 X44.643 Y78.436 G53
|
||
|
N185 G01 Z-0.2 G53
|
||
|
N190 X44.604 Y78.161 G53
|
||
|
N195 G00 Z2.0 G53
|
||
|
N200 X44.172 Y79.065 G53
|
||
|
N205 G01 Z-0.2 G53
|
||
|
N210 G02 X44.643 Y78.436 I-0.079 J-0.550 G53
|
||
|
N215 G00 Z2.0 G53
|
||
|
N220 X43.622 Y79.144 G53
|
||
|
N225 G01 Z-0.2 G53
|
||
|
N230 X44.172 Y79.065 G53
|
||
|
N235 G00 Z2.0 G53
|
||
|
N240 X43.780 Y80.243 G53
|
||
|
N245 G01 Z-0.2 G53
|
||
|
N250 X43.622 Y79.144 G53
|
||
|
N255 G00 Z2.0 G53
|
||
|
N260 X44.880 Y80.086 G53
|
||
|
N265 G01 Z-0.2 G53
|
||
|
N270 X43.780 Y80.243 G53
|
||
|
N275 G00 Z2.0 G53
|
||
|
N280 X46.488 Y79.154 G53
|
||
|
N285 G01 Z-0.2 G53
|
||
|
N290 G02 X46.808 Y79.669 I1.265 J-0.427 G53
|
||
|
N295 G02 X47.312 Y79.597 I0.229 J-0.198 G53
|
||
|
N300 G02 X47.474 Y79.012 I-1.172 J-0.639 G53
|
||
|
N305 G02 X47.452 Y78.454 I-2.606 J-0.179 G53
|
||
|
N310 G02 X47.316 Y77.912 I-2.587 J0.362 G53
|
||
|
N315 G02 X46.997 Y77.397 I-1.265 J0.427 G53
|
||
|
N320 G02 X46.493 Y77.469 I-0.229 J0.198 G53
|
||
|
N325 G02 X46.331 Y78.054 I1.172 J0.639 G53
|
||
|
N330 G02 X46.352 Y78.612 I2.606 J0.179 G53
|
||
|
N335 G02 X46.489 Y79.154 I2.587 J-0.362 G53
|
||
|
N340 G00 Z2.0 G53
|
||
|
N345 X45.370 Y77.630 G53
|
||
|
N350 G01 Z-0.2 G53
|
||
|
N355 X45.350 Y77.493 G53
|
||
|
N360 G00 Z2.0 G53
|
||
|
N365 X48.179 Y77.649 G53
|
||
|
N370 G01 Z-0.2 G53
|
||
|
N375 X48.218 Y77.924 G53
|
||
|
N380 G02 X49.318 Y77.766 I0.550 J-0.079 G53
|
||
|
N385 G01 X49.278 Y77.491 G53
|
||
|
N390 G02 X48.179 Y77.649 I-0.550 J0.079 G53
|
||
|
N395 G00 Z2.0 G53
|
||
|
N400 X48.435 Y78.945 G53
|
||
|
N405 G01 Z-0.2 G53
|
||
|
N410 G03 X49.397 Y78.807 I0.481 J-0.069 G53
|
||
|
N415 G01 X49.417 Y78.944 G53
|
||
|
N420 G03 X48.454 Y79.082 I-0.481 J0.069 G53
|
||
|
N425 G01 X48.435 Y78.945 G53
|
||
|
N430 G00 Z2.0 G53
|
||
|
N435 X50.379 Y79.297 G53
|
||
|
N440 G01 Z-0.2 G53
|
||
|
N445 X51.479 Y79.140 G53
|
||
|
N450 G00 Z2.0 G53
|
||
|
N455 X50.222 Y78.198 G53
|
||
|
N460 G01 Z-0.2 G53
|
||
|
N465 X50.379 Y79.297 G53
|
||
|
N470 G00 Z2.0 G53
|
||
|
N475 X50.772 Y78.119 G53
|
||
|
N480 G01 Z-0.2 G53
|
||
|
N485 X50.222 Y78.198 G53
|
||
|
N490 G00 Z2.0 G53
|
||
|
N495 X51.243 Y77.490 G53
|
||
|
N500 G01 Z-0.2 G53
|
||
|
N505 G03 X50.772 Y78.119 I-0.550 J0.079 G53
|
||
|
N510 G00 Z2.0 G53
|
||
|
N515 X51.203 Y77.215 G53
|
||
|
N520 G01 Z-0.2 G53
|
||
|
N525 X51.243 Y77.490 G53
|
||
|
N530 G00 Z2.0 G53
|
||
|
N535 X50.574 Y76.744 G53
|
||
|
N540 G01 Z-0.2 G53
|
||
|
N545 G03 X51.203 Y77.215 I0.079 J0.550 G53
|
||
|
N550 G00 Z2.0 G53
|
||
|
N555 X50.025 Y76.823 G53
|
||
|
N560 G01 Z-0.2 G53
|
||
|
N565 X50.574 Y76.744 G53
|
||
|
N570 G00 Z2.0 G53
|
||
|
N575 X53.049 Y76.389 G53
|
||
|
N580 G01 Z-0.2 G53
|
||
|
N585 X51.949 Y76.547 G53
|
||
|
N590 X53.274 Y78.222 G53
|
||
|
N595 G03 X53.327 Y78.454 I-0.218 J0.172 G53
|
||
|
N600 G03 X52.262 Y78.607 I-0.552 J-0.061 G53
|
||
|
N605 G00 Z2.0 G53
|
||
|
N610 M30 G53
|
||
|
END
|
||
|
|
||
|
blocks.each do |block|
|
||
|
send_command(block)
|
||
|
if (Time.now-@last_byte > 5)
|
||
|
puts "Bailing, cause somethin' went wrong"
|
||
|
break
|
||
|
end
|
||
|
end
|
||
|
|
||
|
sleep(3);
|
||
|
|
||
|
PNG.new(@canvas).save("gcodetest.png")
|
||
|
|
||
|
puts @input
|
||
|
`open gcodetest.png`
|