smalruby 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of smalruby might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/smalruby/character.rb +5 -25
- data/lib/smalruby/hardware/button.rb +15 -8
- data/lib/smalruby/hardware/led.rb +5 -3
- data/lib/smalruby/hardware/rgb_led_anode.rb +6 -11
- data/lib/smalruby/hardware/rgb_led_cathode.rb +6 -11
- data/lib/smalruby/hardware/smalrubot_v3.rb +143 -0
- data/lib/smalruby/hardware.rb +3 -1
- data/lib/smalruby/version.rb +1 -1
- data/lib/smalruby/world.rb +0 -18
- data/lib/smalruby.rb +0 -44
- data/samples/check_hardware_motor_driver.rb +0 -29
- data/samples/check_hardware_smalrubot_v3.rb +187 -0
- data/samples/hardware_button.rb +6 -14
- data/samples/hardware_led.rb +2 -2
- data/samples/hardware_rgb_led_anode.rb +4 -4
- data/samples/hardware_rgb_led_cathode.rb +4 -4
- data/samples/hardware_sensor.rb +14 -12
- metadata +4 -3
- data/samples/hardware_button_with_pullup.rb +0 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ec6a107067381290914885042336c01037c6fef0
|
4
|
+
data.tar.gz: 4842514d256c5439e2ae92d4d94b5906c3ac2c4f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4e648a0a9adfb24038e4c24006a5201aba155ada13c703f67be288643c262948b91fe978b0ee4efec685396f04d36d311bf8346a5a8a524906988e9381077adf
|
7
|
+
data.tar.gz: d78a07a18293228d5cb6337df0b62bcbb2f2dba8b64388cb47fbfee3fa4cd5a5d50f12af7d1a86e7c9d5f4779a369d97e6d292e0b00d765720fbee4c23e4b161
|
data/lib/smalruby/character.rb
CHANGED
@@ -406,6 +406,11 @@ module Smalruby
|
|
406
406
|
Hardware.create_hardware(Hardware::Sensor, pin)
|
407
407
|
end
|
408
408
|
|
409
|
+
# create or get Hardware::SmalrubotV3 instance
|
410
|
+
def smalrubot_v3
|
411
|
+
Hardware.create_hardware(Hardware::SmalrubotV3)
|
412
|
+
end
|
413
|
+
|
409
414
|
# @!endgroup
|
410
415
|
|
411
416
|
def draw
|
@@ -427,10 +432,6 @@ module Smalruby
|
|
427
432
|
@checking_hit_targets << options
|
428
433
|
@checking_hit_targets.flatten!
|
429
434
|
@checking_hit_targets.uniq!
|
430
|
-
when :sensor_change
|
431
|
-
sensor(options.first)
|
432
|
-
when :button_up, :button_down
|
433
|
-
button(options.first)
|
434
435
|
end
|
435
436
|
end
|
436
437
|
|
@@ -480,27 +481,6 @@ module Smalruby
|
|
480
481
|
end
|
481
482
|
end
|
482
483
|
|
483
|
-
def sensor_change(pin, value)
|
484
|
-
@event_handlers[:sensor_change].try(:each) do |h|
|
485
|
-
next unless h.options.include?(pin)
|
486
|
-
@threads << h.call(value)
|
487
|
-
end
|
488
|
-
end
|
489
|
-
|
490
|
-
def button_up(pin)
|
491
|
-
@event_handlers[:button_up].try(:each) do |h|
|
492
|
-
next unless h.options.include?(pin)
|
493
|
-
@threads << h.call
|
494
|
-
end
|
495
|
-
end
|
496
|
-
|
497
|
-
def button_down(pin)
|
498
|
-
@event_handlers[:button_down].try(:each) do |h|
|
499
|
-
next unless h.options.include?(pin)
|
500
|
-
@threads << h.call
|
501
|
-
end
|
502
|
-
end
|
503
|
-
|
504
484
|
def alive?
|
505
485
|
@threads.compact!
|
506
486
|
@threads.delete_if { |t|
|
@@ -6,22 +6,29 @@ module Smalruby
|
|
6
6
|
# ボタンを表現するクラス
|
7
7
|
class Button < Smalrubot::Components::BaseComponent
|
8
8
|
def initialize(options)
|
9
|
-
@using_pullup = true
|
10
9
|
super(board: world.board, pin: Pin.smalruby_to_smalrubot(options[:pin]),
|
11
|
-
pullup:
|
10
|
+
pullup: false)
|
12
11
|
end
|
13
12
|
|
14
|
-
def
|
15
|
-
digital_read(pin) ==
|
13
|
+
def released?
|
14
|
+
board.digital_read(pin) == 0
|
16
15
|
end
|
17
16
|
|
18
|
-
alias_method :off?, :
|
17
|
+
alias_method :off?, :released?
|
18
|
+
alias_method :up?, :released?
|
19
19
|
|
20
|
-
def
|
21
|
-
!
|
20
|
+
def pressed?
|
21
|
+
!released?
|
22
22
|
end
|
23
23
|
|
24
|
-
alias_method :on?, :
|
24
|
+
alias_method :on?, :pressed?
|
25
|
+
alias_method :down?, :pressed?
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
def after_initialize(_ = {})
|
30
|
+
set_pin_mode(:in)
|
31
|
+
end
|
25
32
|
end
|
26
33
|
end
|
27
34
|
end
|
@@ -9,14 +9,16 @@ module Smalruby
|
|
9
9
|
super(board: world.board, pin: Pin.smalruby_to_smalrubot(options[:pin]))
|
10
10
|
end
|
11
11
|
|
12
|
-
# @!method
|
12
|
+
# @!method turn_on
|
13
13
|
# LEDをオンにする
|
14
|
+
alias_method :turn_on, :on
|
14
15
|
|
15
|
-
# @!method
|
16
|
+
# @!method turn_off
|
16
17
|
# LEDをオフにする
|
18
|
+
alias_method :turn_off, :off
|
17
19
|
|
18
20
|
def stop
|
19
|
-
|
21
|
+
turn_off
|
20
22
|
end
|
21
23
|
end
|
22
24
|
end
|
@@ -17,14 +17,9 @@ module Smalruby
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
# RGB LED
|
21
|
-
def
|
22
|
-
|
23
|
-
color: 'white'
|
24
|
-
}
|
25
|
-
opts = Util.process_options(options, defaults)
|
26
|
-
|
27
|
-
color = Color.smalruby_to_dxruby(opts[:color])
|
20
|
+
# RGB LEDを指定した色に光らせる
|
21
|
+
def color=(val)
|
22
|
+
color = Color.smalruby_to_dxruby(val)
|
28
23
|
analog_write(pins[0], calc_value(color[0]))
|
29
24
|
analog_write(pins[1], calc_value(color[1]))
|
30
25
|
analog_write(pins[2], calc_value(color[2]))
|
@@ -32,19 +27,19 @@ module Smalruby
|
|
32
27
|
end
|
33
28
|
|
34
29
|
# RGB LEDをオフにする
|
35
|
-
def
|
30
|
+
def turn_off
|
36
31
|
digital_write(pins[3], Smalrubot::Board::LOW)
|
37
32
|
end
|
38
33
|
|
39
34
|
def stop
|
40
|
-
|
35
|
+
turn_off
|
41
36
|
end
|
42
37
|
|
43
38
|
private
|
44
39
|
|
45
40
|
def after_initialize(_ = {})
|
46
41
|
set_pin_mode(pins[3], :out)
|
47
|
-
|
42
|
+
turn_off
|
48
43
|
end
|
49
44
|
|
50
45
|
def calc_value(value)
|
@@ -17,21 +17,16 @@ module Smalruby
|
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
|
-
# RGB LED
|
21
|
-
def
|
22
|
-
|
23
|
-
color: 'white'
|
24
|
-
}
|
25
|
-
opts = Util.process_options(options, defaults)
|
26
|
-
|
27
|
-
color = Color.smalruby_to_dxruby(opts[:color])
|
20
|
+
# RGB LEDを指定した色に光らせる
|
21
|
+
def color=(val)
|
22
|
+
color = Color.smalruby_to_dxruby(val)
|
28
23
|
analog_write(pins[0], calc_value(color[0]))
|
29
24
|
analog_write(pins[1], calc_value(color[1]))
|
30
25
|
analog_write(pins[2], calc_value(color[2]))
|
31
26
|
end
|
32
27
|
|
33
28
|
# RGB LEDをオフにする
|
34
|
-
def
|
29
|
+
def turn_off
|
35
30
|
color = Color.smalruby_to_dxruby('black')
|
36
31
|
analog_write(pins[0], calc_value(color[0]))
|
37
32
|
analog_write(pins[1], calc_value(color[1]))
|
@@ -39,13 +34,13 @@ module Smalruby
|
|
39
34
|
end
|
40
35
|
|
41
36
|
def stop
|
42
|
-
|
37
|
+
turn_off
|
43
38
|
end
|
44
39
|
|
45
40
|
private
|
46
41
|
|
47
42
|
def after_initialize(_ = {})
|
48
|
-
|
43
|
+
turn_off
|
49
44
|
end
|
50
45
|
|
51
46
|
def calc_value(value)
|
@@ -0,0 +1,143 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
require 'smalruby/hardware'
|
3
|
+
|
4
|
+
module Smalruby
|
5
|
+
module Hardware
|
6
|
+
# Smalrubot v3 class
|
7
|
+
class SmalrubotV3
|
8
|
+
# wait time for next action
|
9
|
+
WAIT_TIME = 0.01
|
10
|
+
|
11
|
+
@mutex = Mutex.new
|
12
|
+
|
13
|
+
class << self
|
14
|
+
# lock for motor driver
|
15
|
+
def lock(&block)
|
16
|
+
@mutex.synchronize do
|
17
|
+
yield
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# unlock for motor driver
|
22
|
+
def unlock(&block)
|
23
|
+
@mutex.unlock
|
24
|
+
yield
|
25
|
+
ensure
|
26
|
+
@mutex.lock
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Red LED that is connected D13
|
31
|
+
attr_reader :red_led
|
32
|
+
|
33
|
+
# Green LED that is connected D2
|
34
|
+
attr_reader :green_led
|
35
|
+
|
36
|
+
# Left Motor that is connected D6, D7, D8
|
37
|
+
attr_reader :left_motor
|
38
|
+
|
39
|
+
# Right Motor that is connected D9, D10, D11
|
40
|
+
attr_reader :right_motor
|
41
|
+
|
42
|
+
# Left touch sensor that is connected D4
|
43
|
+
attr_reader :left_touch_sensor
|
44
|
+
|
45
|
+
# Right touch sensor that is connected D3
|
46
|
+
attr_reader :right_touch_sensor
|
47
|
+
|
48
|
+
# Light sensor that is connected A0
|
49
|
+
attr_reader :light_sensor
|
50
|
+
|
51
|
+
def initialize(_)
|
52
|
+
@red_led = Led.new(pin: 'D13')
|
53
|
+
@green_led = Led.new(pin: 'D2')
|
54
|
+
|
55
|
+
@left_motor = MotorDriver.new(pin: 'D6')
|
56
|
+
@left_motor.speed = 100
|
57
|
+
@right_motor = MotorDriver.new(pin: 'D9')
|
58
|
+
@right_motor.speed = 100
|
59
|
+
|
60
|
+
@left_touch_sensor = Button.new(pin: 'D4')
|
61
|
+
@right_touch_sensor = Button.new(pin: 'D3')
|
62
|
+
|
63
|
+
@light_sensor = Sensor.new(pin: 'A0')
|
64
|
+
|
65
|
+
@current_motor_direction = :stop
|
66
|
+
end
|
67
|
+
|
68
|
+
# @!method forward(sec: nil)
|
69
|
+
# forward
|
70
|
+
#
|
71
|
+
# @param [Float] time of forwarding
|
72
|
+
|
73
|
+
# @!method backward(sec: nil)
|
74
|
+
# backward
|
75
|
+
#
|
76
|
+
# @param [Float] time of backwarding
|
77
|
+
|
78
|
+
# @!method turn_left(sec: nil)
|
79
|
+
# turn left
|
80
|
+
#
|
81
|
+
# @param [Float] time of turning left
|
82
|
+
|
83
|
+
# @!method turn_right(sec: nil)
|
84
|
+
# turn right
|
85
|
+
#
|
86
|
+
# @param [Float] time of turning right
|
87
|
+
%i(forward backward turn_left turn_right).each do |direction|
|
88
|
+
define_method(direction) do |sec: nil|
|
89
|
+
run(direction, sec: sec)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# stop
|
94
|
+
#
|
95
|
+
# @param [Float] time of stopping
|
96
|
+
def stop(sec: WAIT_TIME)
|
97
|
+
self.class.lock do
|
98
|
+
@left_motor.stop
|
99
|
+
@right_motor.stop
|
100
|
+
@current_motor_direction = :stop
|
101
|
+
if (sec = sec.to_f) > 0
|
102
|
+
sleep(sec)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
private
|
108
|
+
|
109
|
+
def run(direction, sec: nil)
|
110
|
+
self.class.lock do
|
111
|
+
if @current_motor_direction != :stop
|
112
|
+
self.class.unlock do
|
113
|
+
stop(sec: WAIT_TIME)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
case direction
|
117
|
+
when :forward
|
118
|
+
@left_motor.forward
|
119
|
+
@right_motor.forward
|
120
|
+
when :backward
|
121
|
+
@left_motor.backward
|
122
|
+
@right_motor.backward
|
123
|
+
when :turn_left
|
124
|
+
@left_motor.backward
|
125
|
+
@right_motor.forward
|
126
|
+
when :turn_right
|
127
|
+
@left_motor.forward
|
128
|
+
@right_motor.backward
|
129
|
+
end
|
130
|
+
@current_motor_direction = direction
|
131
|
+
if (sec = sec.to_f) > 0
|
132
|
+
sleep(sec)
|
133
|
+
if direction != :stop
|
134
|
+
self.class.unlock do
|
135
|
+
stop
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
data/lib/smalruby/hardware.rb
CHANGED
@@ -20,6 +20,8 @@ module Smalruby
|
|
20
20
|
autoload :Button
|
21
21
|
autoload :Sensor
|
22
22
|
|
23
|
+
autoload :SmalrubotV3
|
24
|
+
|
23
25
|
module_function
|
24
26
|
|
25
27
|
# ハードウェアを準備する
|
@@ -68,7 +70,7 @@ module Smalruby
|
|
68
70
|
# @param [Class] klass ハードウェアのクラス
|
69
71
|
# @param [String|Numeric] pin ピン番号
|
70
72
|
# @return [Object] ハードウェアのインスタンス
|
71
|
-
def create_hardware(klass, pin)
|
73
|
+
def create_hardware(klass, pin = nil)
|
72
74
|
klass = NullHardware unless @initialized_hardware
|
73
75
|
key = [klass, pin]
|
74
76
|
@hardware_cache.synchronize do
|
data/lib/smalruby/version.rb
CHANGED
data/lib/smalruby/world.rb
CHANGED
@@ -9,28 +9,10 @@ module Smalruby
|
|
9
9
|
attr_accessor :objects
|
10
10
|
attr_accessor :board
|
11
11
|
attr_accessor :current_stage
|
12
|
-
attr_reader :sensor_change_queue
|
13
|
-
attr_reader :button_change_queue
|
14
12
|
|
15
13
|
def initialize
|
16
14
|
@objects = []
|
17
15
|
@board = nil
|
18
|
-
@sensor_change_queue = []
|
19
|
-
@sensor_change_queue.extend(Mutex_m)
|
20
|
-
@button_change_queue = []
|
21
|
-
@button_change_queue.extend(Mutex_m)
|
22
|
-
end
|
23
|
-
|
24
|
-
def sensor_changed(pin, value)
|
25
|
-
@sensor_change_queue.synchronize do
|
26
|
-
@sensor_change_queue.push([pin, value])
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def button_changed(pin, up_or_down)
|
31
|
-
@button_change_queue.synchronize do
|
32
|
-
@button_change_queue.push([pin, up_or_down])
|
33
|
-
end
|
34
16
|
end
|
35
17
|
end
|
36
18
|
end
|
data/lib/smalruby.rb
CHANGED
@@ -143,10 +143,6 @@ module Smalruby
|
|
143
143
|
|
144
144
|
hit
|
145
145
|
|
146
|
-
sensor_change
|
147
|
-
|
148
|
-
button_change
|
149
|
-
|
150
146
|
world.objects.delete_if do |o|
|
151
147
|
o.join unless o.alive?
|
152
148
|
o.vanished?
|
@@ -219,46 +215,6 @@ module Smalruby
|
|
219
215
|
end
|
220
216
|
end
|
221
217
|
end
|
222
|
-
|
223
|
-
def sensor_change
|
224
|
-
if world.sensor_change_queue.length > 0
|
225
|
-
sensor_change_queue = nil
|
226
|
-
world.sensor_change_queue.synchronize do
|
227
|
-
sensor_change_queue = world.sensor_change_queue.dup
|
228
|
-
world.sensor_change_queue.clear
|
229
|
-
end
|
230
|
-
|
231
|
-
world.objects.each do |o|
|
232
|
-
if o.respond_to?(:sensor_change)
|
233
|
-
sensor_change_queue.each do |pin, value|
|
234
|
-
o.sensor_change(pin, value)
|
235
|
-
end
|
236
|
-
end
|
237
|
-
end
|
238
|
-
end
|
239
|
-
end
|
240
|
-
|
241
|
-
def button_change
|
242
|
-
if world.button_change_queue.length > 0
|
243
|
-
queue = nil
|
244
|
-
world.button_change_queue.synchronize do
|
245
|
-
queue = world.button_change_queue.dup
|
246
|
-
world.button_change_queue.clear
|
247
|
-
end
|
248
|
-
|
249
|
-
world.objects.each do |o|
|
250
|
-
if o.respond_to?(:button_up) && o.respond_to?(:button_down)
|
251
|
-
queue.each do |pin, up_or_down|
|
252
|
-
if up_or_down == :up
|
253
|
-
o.button_up(pin)
|
254
|
-
else
|
255
|
-
o.button_down(pin)
|
256
|
-
end
|
257
|
-
end
|
258
|
-
end
|
259
|
-
end
|
260
|
-
end
|
261
|
-
end
|
262
218
|
end
|
263
219
|
end
|
264
220
|
|
@@ -112,34 +112,5 @@ stage1.on(:start) do
|
|
112
112
|
fill(color: 'white')
|
113
113
|
draw_font(string: "右の速度: #{motor_driver('D9').speed}%", color: 'black')
|
114
114
|
end
|
115
|
-
|
116
|
-
if Input.key_down?(K_SPACE)
|
117
|
-
fill(color: 'white')
|
118
|
-
draw_font(string: '右のLED赤色を光らせる', color: 'black')
|
119
|
-
|
120
|
-
led('D13').on
|
121
|
-
|
122
|
-
await until !Input.key_down?(K_SPACE)
|
123
|
-
|
124
|
-
led('D13').off
|
125
|
-
|
126
|
-
fill(color: 'white')
|
127
|
-
draw_font(string: '左のLED緑色を光らせる', color: 'black')
|
128
|
-
|
129
|
-
led('D2').on
|
130
|
-
|
131
|
-
sleep(1)
|
132
|
-
|
133
|
-
led('D2').off
|
134
|
-
end
|
135
|
-
|
136
|
-
if Input.key_down?(K_B)
|
137
|
-
until !Input.key_down?(K_B)
|
138
|
-
fill(color: 'white')
|
139
|
-
draw_font(string: "センサーの情報#{sensor('A0').value}", color: 'black')
|
140
|
-
await
|
141
|
-
end
|
142
|
-
fill(color: 'white')
|
143
|
-
end
|
144
115
|
end
|
145
116
|
end
|
@@ -0,0 +1,187 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
DESCRIPTION = <<EOS
|
4
|
+
スモウルボットV3を操作します
|
5
|
+
EOS
|
6
|
+
|
7
|
+
require 'smalruby'
|
8
|
+
|
9
|
+
init_hardware
|
10
|
+
|
11
|
+
Smalrubot.debug_mode = true
|
12
|
+
|
13
|
+
stage1 = Stage.new(color: 'white')
|
14
|
+
stage1.smalrubot_v3
|
15
|
+
|
16
|
+
stage1.on(:start) do
|
17
|
+
fill(color: 'white')
|
18
|
+
draw_font(string: DESCRIPTION, color: 'black')
|
19
|
+
|
20
|
+
loop do
|
21
|
+
if Input.key_down?(K_UP)
|
22
|
+
fill(color: 'white')
|
23
|
+
draw_font(string: '進む', color: 'black')
|
24
|
+
|
25
|
+
smalrubot_v3.forward
|
26
|
+
|
27
|
+
await until !Input.key_down?(K_UP)
|
28
|
+
|
29
|
+
fill(color: 'white')
|
30
|
+
|
31
|
+
smalrubot_v3.stop
|
32
|
+
end
|
33
|
+
|
34
|
+
if Input.key_down?(K_DOWN)
|
35
|
+
fill(color: 'white')
|
36
|
+
draw_font(string: 'バックする', color: 'black')
|
37
|
+
|
38
|
+
smalrubot_v3.backward
|
39
|
+
|
40
|
+
await until !Input.key_down?(K_DOWN)
|
41
|
+
|
42
|
+
fill(color: 'white')
|
43
|
+
|
44
|
+
smalrubot_v3.stop
|
45
|
+
end
|
46
|
+
|
47
|
+
if Input.key_down?(K_LEFT)
|
48
|
+
fill(color: 'white')
|
49
|
+
draw_font(string: '左に旋回する', color: 'black')
|
50
|
+
|
51
|
+
smalrubot_v3.turn_left
|
52
|
+
|
53
|
+
await until !Input.key_down?(K_LEFT)
|
54
|
+
|
55
|
+
fill(color: 'white')
|
56
|
+
|
57
|
+
smalrubot_v3.stop
|
58
|
+
end
|
59
|
+
|
60
|
+
if Input.key_down?(K_RIGHT)
|
61
|
+
fill(color: 'white')
|
62
|
+
draw_font(string: '右に旋回する', color: 'black')
|
63
|
+
|
64
|
+
smalrubot_v3.turn_right
|
65
|
+
|
66
|
+
await until !Input.key_down?(K_RIGHT)
|
67
|
+
|
68
|
+
fill(color: 'white')
|
69
|
+
|
70
|
+
smalrubot_v3.stop
|
71
|
+
end
|
72
|
+
|
73
|
+
if Input.key_down?(K_W) || Input.key_down?(K_S)
|
74
|
+
if Input.key_down?(K_W)
|
75
|
+
smalrubot_v3.left_motor.speed += 10
|
76
|
+
else
|
77
|
+
smalrubot_v3.left_motor.speed -= 10
|
78
|
+
end
|
79
|
+
|
80
|
+
fill(color: 'white')
|
81
|
+
draw_font(string: "左の速度: #{smalrubot_v3.left_motor.speed}%",
|
82
|
+
color: 'black')
|
83
|
+
end
|
84
|
+
|
85
|
+
if Input.key_down?(K_O) || Input.key_down?(K_L)
|
86
|
+
if Input.key_down?(K_O)
|
87
|
+
smalrubot_v3.right_motor.speed += 10
|
88
|
+
else
|
89
|
+
smalrubot_v3.right_motor.speed -= 10
|
90
|
+
end
|
91
|
+
|
92
|
+
fill(color: 'white')
|
93
|
+
draw_font(string: "右の速度: #{smalrubot_v3.right_motor.speed}%",
|
94
|
+
color: 'black')
|
95
|
+
end
|
96
|
+
|
97
|
+
if Input.key_down?(K_SPACE)
|
98
|
+
fill(color: 'white')
|
99
|
+
draw_font(string: '赤色LEDを光らせる', color: 'black')
|
100
|
+
|
101
|
+
smalrubot_v3.red_led.turn_on
|
102
|
+
|
103
|
+
sleep(1)
|
104
|
+
|
105
|
+
smalrubot_v3.red_led.turn_off
|
106
|
+
|
107
|
+
fill(color: 'white')
|
108
|
+
draw_font(string: '緑色LEDを光らせる', color: 'black')
|
109
|
+
|
110
|
+
smalrubot_v3.green_led.turn_on
|
111
|
+
|
112
|
+
sleep(1)
|
113
|
+
|
114
|
+
smalrubot_v3.green_led.turn_off
|
115
|
+
end
|
116
|
+
|
117
|
+
if Input.key_down?(K_B)
|
118
|
+
until !Input.key_down?(K_B)
|
119
|
+
fill(color: 'white')
|
120
|
+
draw_font(string: "光センサーの情報: #{smalrubot_v3.light_sensor.value}",
|
121
|
+
color: 'black')
|
122
|
+
await
|
123
|
+
end
|
124
|
+
fill(color: 'white')
|
125
|
+
end
|
126
|
+
|
127
|
+
if Input.key_down?(K_H)
|
128
|
+
until !Input.key_down?(K_H)
|
129
|
+
fill(color: 'white')
|
130
|
+
msg = 'タッチセンサーの情報: ' +
|
131
|
+
"左 #{smalrubot_v3.left_touch_sensor.on? ? 'ON ' : 'OFF'} " +
|
132
|
+
"右 #{smalrubot_v3.right_touch_sensor.on? ? 'ON ' : 'OFF'}"
|
133
|
+
draw_font(string: msg, color: 'black')
|
134
|
+
await
|
135
|
+
end
|
136
|
+
fill(color: 'white')
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
stage1.on(:key_push, K_A) do
|
142
|
+
loop do
|
143
|
+
fill(color: 'white')
|
144
|
+
draw_font(string: '自動運転', color: 'black')
|
145
|
+
|
146
|
+
if smalrubot_v3.left_touch_sensor.on? && smalrubot_v3.right_touch_sensor.on?
|
147
|
+
fill(color: 'white')
|
148
|
+
draw_font(string: '前方障害物発見!', color: 'black')
|
149
|
+
|
150
|
+
smalrubot_v3.backward(sec: 0.5)
|
151
|
+
if rand(2) == 1
|
152
|
+
smalrubot_v3.turn_left(sec: 0.2)
|
153
|
+
else
|
154
|
+
smalrubot_v3.turn_right(sec: 0.2)
|
155
|
+
end
|
156
|
+
|
157
|
+
next
|
158
|
+
end
|
159
|
+
|
160
|
+
if smalrubot_v3.right_touch_sensor.on?
|
161
|
+
fill(color: 'white')
|
162
|
+
draw_font(string: '右側障害物発見!', color: 'black')
|
163
|
+
|
164
|
+
smalrubot_v3.backward(sec: 0.5)
|
165
|
+
smalrubot_v3.turn_left(sec: 0.2)
|
166
|
+
|
167
|
+
next
|
168
|
+
end
|
169
|
+
|
170
|
+
if smalrubot_v3.left_touch_sensor.on?
|
171
|
+
fill(color: 'white')
|
172
|
+
draw_font(string: '左側障害物発見!', color: 'black')
|
173
|
+
|
174
|
+
smalrubot_v3.backward(sec: 0.5)
|
175
|
+
smalrubot_v3.turn_right(sec: 0.2)
|
176
|
+
|
177
|
+
next
|
178
|
+
end
|
179
|
+
|
180
|
+
smalrubot_v3.forward(sec: 0.5)
|
181
|
+
|
182
|
+
if Input.key_down?(K_Y)
|
183
|
+
fill(color: 'white')
|
184
|
+
break
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
data/samples/hardware_button.rb
CHANGED
@@ -16,19 +16,11 @@ frog1 = Character.new(costume: 'frog1.png', x: 300, y: 200, visible: false)
|
|
16
16
|
stage1.on(:start) do
|
17
17
|
draw_font(string: DESCRIPTION, color: 'black')
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
19
|
+
loop do
|
20
|
+
if button('D3').up?
|
21
|
+
frog1.visible = false
|
22
|
+
else
|
23
|
+
frog1.visible = true
|
24
|
+
end
|
25
25
|
end
|
26
26
|
end
|
27
|
-
|
28
|
-
stage1.on(:button_down, 'D3') do
|
29
|
-
frog1.visible = true
|
30
|
-
end
|
31
|
-
|
32
|
-
stage1.on(:button_up, 'D3') do
|
33
|
-
frog1.visible = false
|
34
|
-
end
|
data/samples/hardware_led.rb
CHANGED
@@ -17,13 +17,13 @@ stage1.on(:start) do
|
|
17
17
|
draw_font(string: DESCRIPTION, color: 'black')
|
18
18
|
|
19
19
|
loop do
|
20
|
-
rgb_led_anode('D3').
|
20
|
+
rgb_led_anode('D3').color = 'red'
|
21
21
|
sleep(1)
|
22
|
-
rgb_led_anode('D3').
|
22
|
+
rgb_led_anode('D3').color = 'green'
|
23
23
|
sleep(1)
|
24
|
-
rgb_led_anode('D3').
|
24
|
+
rgb_led_anode('D3').color = 'blue'
|
25
25
|
sleep(1)
|
26
|
-
rgb_led_anode('D3').
|
26
|
+
rgb_led_anode('D3').turn_off
|
27
27
|
sleep(1)
|
28
28
|
end
|
29
29
|
end
|
@@ -17,13 +17,13 @@ stage1.on(:start) do
|
|
17
17
|
draw_font(string: DESCRIPTION, color: 'black')
|
18
18
|
|
19
19
|
loop do
|
20
|
-
rgb_led_cathode('D3').
|
20
|
+
rgb_led_cathode('D3').color = 'red'
|
21
21
|
sleep(1)
|
22
|
-
rgb_led_cathode('D3').
|
22
|
+
rgb_led_cathode('D3').color = 'green'
|
23
23
|
sleep(1)
|
24
|
-
rgb_led_cathode('D3').
|
24
|
+
rgb_led_cathode('D3').color = 'blue'
|
25
25
|
sleep(1)
|
26
|
-
rgb_led_cathode('D3').
|
26
|
+
rgb_led_cathode('D3').turn_off
|
27
27
|
sleep(1)
|
28
28
|
end
|
29
29
|
end
|
data/samples/hardware_sensor.rb
CHANGED
@@ -6,19 +6,21 @@ init_hardware
|
|
6
6
|
|
7
7
|
stage1 = Stage.new(color: 'white')
|
8
8
|
|
9
|
-
stage1.on(:
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
stage1.on(:start) do
|
10
|
+
loop do
|
11
|
+
v = sensor('A0').value
|
12
|
+
if 0 <= v && v <= 255
|
13
|
+
fill(color: 'red')
|
14
|
+
end
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
if 256 <= v && v <= 511
|
17
|
+
fill(color: 'yellow')
|
18
|
+
end
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
20
|
+
if 512 <= v
|
21
|
+
fill(color: 'blue')
|
22
|
+
end
|
22
23
|
|
23
|
-
|
24
|
+
draw_font(string: "センサーの情報:#{v}", color: 'black')
|
25
|
+
end
|
24
26
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smalruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kouji Takao
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -265,6 +265,7 @@ files:
|
|
265
265
|
- lib/smalruby/hardware/rgb_led_cathode.rb
|
266
266
|
- lib/smalruby/hardware/sensor.rb
|
267
267
|
- lib/smalruby/hardware/servo.rb
|
268
|
+
- lib/smalruby/hardware/smalrubot_v3.rb
|
268
269
|
- lib/smalruby/hardware/two_wheel_drive_car.rb
|
269
270
|
- lib/smalruby/stage.rb
|
270
271
|
- lib/smalruby/util.rb
|
@@ -276,13 +277,13 @@ files:
|
|
276
277
|
- samples/car.rb
|
277
278
|
- samples/cat.rb
|
278
279
|
- samples/check_hardware_motor_driver.rb
|
280
|
+
- samples/check_hardware_smalrubot_v3.rb
|
279
281
|
- samples/console.rb
|
280
282
|
- samples/costume.rb
|
281
283
|
- samples/costumes.rb
|
282
284
|
- samples/extra_car.png
|
283
285
|
- samples/finding_cars.rb
|
284
286
|
- samples/hardware_button.rb
|
285
|
-
- samples/hardware_button_with_pullup.rb
|
286
287
|
- samples/hardware_led.rb
|
287
288
|
- samples/hardware_motor_driver.rb
|
288
289
|
- samples/hardware_rgb_led_anode.rb
|
@@ -1,32 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
|
3
|
-
DESCRIPTION = <<EOS
|
4
|
-
ハードウェアのボタン(プルアップ)を操作します
|
5
|
-
EOS
|
6
|
-
|
7
|
-
# デジタルの3番ピンに直接ボタンを接続してください。
|
8
|
-
|
9
|
-
require 'smalruby'
|
10
|
-
|
11
|
-
init_hardware
|
12
|
-
|
13
|
-
stage1 = Stage.new(color: 'white')
|
14
|
-
frog1 = Character.new(costume: 'frog1.png', x: 300, y: 200, visible: false)
|
15
|
-
|
16
|
-
stage1.on(:start) do
|
17
|
-
draw_font(string: DESCRIPTION, color: 'black')
|
18
|
-
|
19
|
-
if button('D3').up?
|
20
|
-
frog1.visible = false
|
21
|
-
else
|
22
|
-
frog1.visible = true
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
stage1.on(:button_down, 'D3') do
|
27
|
-
frog1.visible = true
|
28
|
-
end
|
29
|
-
|
30
|
-
stage1.on(:button_up, 'D3') do
|
31
|
-
frog1.visible = false
|
32
|
-
end
|