pbosetti-rubitlash 0.1 → 0.2

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.
@@ -19,15 +19,44 @@ I'm still writing few docs, but the library itself is quite short. Look at it to
19
19
  EXAMPLE
20
20
  =======
21
21
 
22
- require "rubitlash"
23
-
22
+ require "../lib/rubitlash"
23
+
24
+ # Instantiate the connection. Verbose mode is false
24
25
  bl = Bitlash.new("/dev/tty.usbserial-A6004aLr", 57600, false)
26
+
27
+ # talk() writes its argument to Arduino and reports the reply:
25
28
  r = bl.talk "print free()"
26
29
  puts "Bytes free: #{r}"
27
- bl[:a] = 2
28
- puts "a = #{bl[:a]}"
29
- bl.talk "d13=1"
30
+
31
+ # variables are accessed as keys of the Bitlash instance:
32
+ bl[:a] = 2 # writing
33
+ puts "a = #{bl[:a]}" # reading
34
+ bl.talk "d12=1" # low-level
30
35
  sleep 2
31
- bl[:f] = bl.free
36
+
37
+ # Assigning Bitlash variables:
38
+ bl[:f] = bl.free # commands and functions are mapped as methods
32
39
  puts "f = #{bl[:f]}"
33
- bl.close
40
+
41
+ # Macro example
42
+ bl.macro "toggle13", "d13=!d13" # define a new macro
43
+ puts "\nMacros:"
44
+ bl.ls.each_with_index {|m,i| puts "#{i}:\t#{m}"}
45
+ bl.toggle13 # calls the new macro
46
+ sleep 1
47
+ # but also:
48
+ # bl.run :toggle13 # this runs in background on Arduino
49
+ # sleep 1
50
+
51
+ # Some play
52
+ puts "\nStarting cyclic fade"
53
+ bl.pinmode(11,1)
54
+ t = t0 = Time.now.to_f
55
+ while (t - t0) < 5 do
56
+ t = Time.now.to_f
57
+ bl[:a11] = ((1.0 - Math::cos((t - t0)*Math::PI))*100).to_i # 2 Hz cycle
58
+ sleep 0.01
59
+ end
60
+
61
+ bl.close
62
+
@@ -5,13 +5,41 @@
5
5
  # reserved.
6
6
  require "../lib/rubitlash"
7
7
 
8
+ # Instantiate the connection. Verbose mode is false
8
9
  bl = Bitlash.new("/dev/tty.usbserial-A6004aLr", 57600, false)
10
+
11
+ # talk() writes its argument to Arduino and reports the reply:
9
12
  r = bl.talk "print free()"
10
13
  puts "Bytes free: #{r}"
11
- bl[:a] = 2
12
- puts "a = #{bl[:a]}"
13
- bl.talk "d13=1"
14
+
15
+ # variables are accessed as keys of the Bitlash instance:
16
+ bl[:a] = 2 # writing
17
+ puts "a = #{bl[:a]}" # reading
18
+ bl.talk "d12=1" # low-level
14
19
  sleep 2
15
- bl[:f] = bl.free
20
+
21
+ # Assigning Bitlash variables:
22
+ bl[:f] = bl.free # commands and functions are mapped as methods
16
23
  puts "f = #{bl[:f]}"
24
+
25
+ # Macro example
26
+ bl.macro "toggle13", "d13=!d13" # define a new macro
27
+ puts "\nMacros:"
28
+ bl.ls.each_with_index {|m,i| puts "#{i}:\t#{m}"}
29
+ bl.toggle13 # calls the new macro
30
+ sleep 1
31
+ # but also:
32
+ # bl.run :toggle13 # this runs in background on Arduino
33
+ # sleep 1
34
+
35
+ # Some play
36
+ puts "\nStarting cyclic fade"
37
+ bl.pinmode(11,1)
38
+ t = t0 = Time.now.to_f
39
+ while (t - t0) < 5 do
40
+ t = Time.now.to_f
41
+ bl[:a11] = ((1.0 - Math::cos((t - t0)*Math::PI))*100).to_i # 2 Hz cycle
42
+ sleep 0.01
43
+ end
44
+
17
45
  bl.close
@@ -22,6 +22,7 @@ require 'expect'
22
22
 
23
23
  class Bitlash
24
24
  PROMPT = ">\s"
25
+ COMMANDS = %w[boot help if ls peep print ps rm run stop while]
25
26
  attr_accessor :port_addr
26
27
  attr_reader :port, :baud
27
28
  def initialize(port_addr, baud=57600, verbose=false, name="Bitflash##{(rand*1000).to_i}")
@@ -43,9 +44,8 @@ class Bitlash
43
44
 
44
45
  def talk(string)
45
46
  @port.puts string
46
- reply = @port.expect(/#{PROMPT}/)[0]
47
- reply =~ /(.*)\n\r(.*)\n\r/
48
- return $2
47
+ reply = @port.expect(/#{PROMPT}/)[0].split("\n\r")[1...-1]
48
+ return reply.size == 1 ? reply[0] : reply
49
49
  end
50
50
 
51
51
  def [](var)
@@ -60,8 +60,15 @@ class Bitlash
60
60
  self.talk "#{name}:=\"#{cmd}\""
61
61
  end
62
62
 
63
+ # def run(macro); self.talk macro.to_s; end
64
+ # def background(macro); self.talk "run #{macro}"; end
65
+
63
66
  def method_missing(m, *args)
64
- cmd = args.size > 0 ? "print #{m.to_s}(#{args * ','})" : "print #{m.to_s}"
67
+ if COMMANDS.include? m.to_s
68
+ cmd = args.size > 0 ? "#{m.to_s} #{args * ','}" : "#{m.to_s}"
69
+ else
70
+ cmd = args.size > 0 ? "print #{m.to_s}(#{args * ','})" : "print #{m.to_s}"
71
+ end
65
72
  self.talk(cmd)
66
73
  end
67
74
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pbosetti-rubitlash
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.1"
4
+ version: "0.2"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paolo Bosetti