smalrubot 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/bin/smalrubot +18 -6
- data/examples/test.rb +1 -1
- data/lib/smalrubot/board/studuino.rb +33 -0
- data/lib/smalrubot/board.rb +12 -1
- data/lib/smalrubot/tx_rx/serial.rb +4 -2
- data/lib/smalrubot/version.rb +1 -1
- data/lib/smalrubot.rb +1 -0
- data/sketch/lib/Smalrubot.cpp +13 -9
- data/sketch/lib/Smalrubot.h +3 -1
- data/sketch/lib/SrStuduino.cpp +183 -0
- data/sketch/lib/SrStuduino.h +31 -0
- data/sketch/sr/sr.ino +1 -1
- data/sketch/sr_studu/sr_studu.ino +22 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 642c4e0694f576d6a69d08cec9b88262e6b29da0
|
4
|
+
data.tar.gz: 424fcb96c73280e5910923462386932739104b29
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1dd5f9fdef4308f4dc800f838d232283ca95a128a4e348e56b26f073e6f16d1da85557355989cc0be54bffb39deb5580a6d089a02983b882b7fe1449ebe56f07
|
7
|
+
data.tar.gz: c40522501b506db212fb971db73f3b622fe70e15e32cd9106b3cc262ad131843d79bb7029a3156f7c27a3e04127dbf1c9ba1a6661ecc0690a1ab30ae66f7f271
|
data/.gitignore
CHANGED
data/bin/smalrubot
CHANGED
@@ -14,7 +14,11 @@ def usage
|
|
14
14
|
$stderr.puts "Usage: #{File.basename($0)} COMMAND [command-specific-options]"
|
15
15
|
$stderr.puts
|
16
16
|
$stderr.puts "Commands:"
|
17
|
-
$stderr.puts " generate-sketch [options]"
|
17
|
+
$stderr.puts " generate-sketch SKETCH [options]"
|
18
|
+
$stderr.puts
|
19
|
+
$stderr.puts " Sketches:"
|
20
|
+
$stderr.puts " sr"
|
21
|
+
$stderr.puts " sr_studu"
|
18
22
|
$stderr.puts
|
19
23
|
$stderr.puts " Options:"
|
20
24
|
$stderr.puts " --baud BAUD"
|
@@ -25,11 +29,15 @@ end
|
|
25
29
|
|
26
30
|
# Command must be the first argument.
|
27
31
|
$options[:command] = ARGV.shift
|
28
|
-
usage if $options[:command].match
|
32
|
+
usage if !$options[:command] || $options[:command].match(/help/)
|
29
33
|
|
30
34
|
# Parse the rest loosely.
|
31
35
|
loop do
|
32
36
|
case ARGV[0]
|
37
|
+
when 'sr'
|
38
|
+
$options[:sketch_names] << ARGV.shift
|
39
|
+
when 'sr_studu'
|
40
|
+
$options[:sketch_names] << ARGV.shift
|
33
41
|
when '--baud'
|
34
42
|
ARGV.shift; $options[:baud] = ARGV.shift
|
35
43
|
when '--debug'
|
@@ -40,12 +48,10 @@ loop do
|
|
40
48
|
end
|
41
49
|
end
|
42
50
|
|
43
|
-
$options[:sketch_names] = ['sr']
|
44
|
-
|
45
51
|
error "Invalid command '#{$options[:command]}'" unless $options[:command] == "generate-sketch"
|
46
52
|
error "No sketches or invalid sketches specified" if $options[:sketch_names].empty?
|
47
53
|
|
48
|
-
$options[:sketch_names].each do |sketch_name|
|
54
|
+
$options[:sketch_names].uniq.each do |sketch_name|
|
49
55
|
# Define the sources.
|
50
56
|
sketch_dir = sketch_name
|
51
57
|
sketch_file = sketch_name + ".ino"
|
@@ -61,7 +67,7 @@ $options[:sketch_names].each do |sketch_name|
|
|
61
67
|
|
62
68
|
# Modify them based on the arguments.
|
63
69
|
if $options[:baud]
|
64
|
-
sketch.gsub! "
|
70
|
+
sketch.gsub! "19200", $options[:baud]
|
65
71
|
end
|
66
72
|
if $options[:debug]
|
67
73
|
header.gsub! "// #define debug true", "#define debug true"
|
@@ -79,4 +85,10 @@ $options[:sketch_names].each do |sketch_name|
|
|
79
85
|
File.open(dest_header, 'w') { |f| f.write header }
|
80
86
|
File.open(dest_implementation, 'w') { |f| f.write implementation }
|
81
87
|
File.open(dest_sketch, 'w') { |f| f.write sketch }
|
88
|
+
|
89
|
+
if sketch_name == 'sr_studu'
|
90
|
+
%w(SrStuduino.cpp SrStuduino.h).each do |name|
|
91
|
+
FileUtils.cp(File.join(src_dir, 'lib', name), File.join(dest_dir, name))
|
92
|
+
end
|
93
|
+
end
|
82
94
|
end
|
data/examples/test.rb
CHANGED
@@ -0,0 +1,33 @@
|
|
1
|
+
module Smalrubot
|
2
|
+
class Board
|
3
|
+
# namespace for Studuino
|
4
|
+
module Studuino
|
5
|
+
PORT_M1 = 0
|
6
|
+
PORT_M2 = 1
|
7
|
+
|
8
|
+
PORT_A0 = 0
|
9
|
+
PORT_A1 = 1
|
10
|
+
PORT_A2 = 2
|
11
|
+
PORT_A3 = 3
|
12
|
+
PORT_A4 = 4
|
13
|
+
PORT_A5 = 5
|
14
|
+
PORT_A6 = 6
|
15
|
+
PORT_A7 = 7
|
16
|
+
|
17
|
+
PIDOPEN = 0
|
18
|
+
PIDLED = 1
|
19
|
+
PIDBUZZER = 2
|
20
|
+
PIDLIGHTSENSOR = 3
|
21
|
+
PIDSOUNDSENSOR = 4
|
22
|
+
PIDIRPHOTOREFLECTOR = 5
|
23
|
+
PIDACCELEROMETER = 6
|
24
|
+
PIDTOUCHSENSOR = 7
|
25
|
+
PIDPUSHSWITCH = 8
|
26
|
+
|
27
|
+
NORMAL = 0
|
28
|
+
REVERSE = 1
|
29
|
+
BRAKE = 2
|
30
|
+
COAST = 3
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/smalrubot/board.rb
CHANGED
@@ -38,7 +38,14 @@ module Smalrubot
|
|
38
38
|
digital_write: '01',
|
39
39
|
analog_write: '03',
|
40
40
|
servo_toggle: '08',
|
41
|
-
servo_write: '09'
|
41
|
+
servo_write: '09',
|
42
|
+
|
43
|
+
set_dc_motor_calibration: '20',
|
44
|
+
init_dc_motor_port: '22',
|
45
|
+
init_sensor_port: '25',
|
46
|
+
|
47
|
+
dc_motor_power: '42',
|
48
|
+
dc_motor_control: '43',
|
42
49
|
}
|
43
50
|
|
44
51
|
WRITE_COMMANDS.each_key do |command|
|
@@ -51,6 +58,10 @@ module Smalrubot
|
|
51
58
|
READ_COMMANDS = {
|
52
59
|
digital_read: '02',
|
53
60
|
analog_read: '04',
|
61
|
+
|
62
|
+
get_touch_sensor_value: '61',
|
63
|
+
get_light_sensor_value: '62',
|
64
|
+
get_ir_photoreflector_value: '64',
|
54
65
|
}
|
55
66
|
|
56
67
|
READ_COMMANDS.each_key do |command|
|
@@ -3,7 +3,7 @@ require 'rubyserial'
|
|
3
3
|
module Smalrubot
|
4
4
|
module TxRx
|
5
5
|
class Serial < Base
|
6
|
-
BAUD =
|
6
|
+
BAUD = 19_200
|
7
7
|
|
8
8
|
def initialize(options={})
|
9
9
|
@device = options[:device]
|
@@ -25,7 +25,9 @@ module Smalrubot
|
|
25
25
|
return super
|
26
26
|
rescue BoardNotFound
|
27
27
|
@tty_devices.shift
|
28
|
-
@io
|
28
|
+
if @io
|
29
|
+
@io.close
|
30
|
+
end
|
29
31
|
@io = nil
|
30
32
|
end
|
31
33
|
end
|
data/lib/smalrubot/version.rb
CHANGED
data/lib/smalrubot.rb
CHANGED
data/sketch/lib/Smalrubot.cpp
CHANGED
@@ -33,6 +33,19 @@ void Smalrubot::process() {
|
|
33
33
|
Serial.print("Value - "); Serial.println(valStr);
|
34
34
|
#endif
|
35
35
|
|
36
|
+
processCommand();
|
37
|
+
|
38
|
+
// Write the response.
|
39
|
+
if (response[0] != '\0') writeResponse();
|
40
|
+
|
41
|
+
#ifdef debug
|
42
|
+
Serial.print("Responded with - "); Serial.println(response);
|
43
|
+
Serial.println();
|
44
|
+
#endif
|
45
|
+
}
|
46
|
+
|
47
|
+
|
48
|
+
void Smalrubot::processCommand() {
|
36
49
|
// Call the command.
|
37
50
|
switch(cmd) {
|
38
51
|
case 0: setMode (); break;
|
@@ -45,18 +58,9 @@ void Smalrubot::process() {
|
|
45
58
|
case 90: reset (); break;
|
46
59
|
default: break;
|
47
60
|
}
|
48
|
-
|
49
|
-
// Write the response.
|
50
|
-
if (response[0] != '\0') writeResponse();
|
51
|
-
|
52
|
-
#ifdef debug
|
53
|
-
Serial.print("Responded with - "); Serial.println(response);
|
54
|
-
Serial.println();
|
55
|
-
#endif
|
56
61
|
}
|
57
62
|
|
58
63
|
|
59
|
-
|
60
64
|
// WRITE CALLBACK
|
61
65
|
void Smalrubot::setupWrite(void (*writeCallback)(char *str)) {
|
62
66
|
_writeCallback = writeCallback;
|
data/sketch/lib/Smalrubot.h
CHANGED
@@ -27,7 +27,7 @@ class Smalrubot {
|
|
27
27
|
void parse(char c);
|
28
28
|
void process();
|
29
29
|
|
30
|
-
|
30
|
+
protected:
|
31
31
|
// Request storage.
|
32
32
|
char request[8];
|
33
33
|
int index;
|
@@ -46,6 +46,8 @@ class Smalrubot {
|
|
46
46
|
|
47
47
|
Servo servos[12];
|
48
48
|
|
49
|
+
virtual void processCommand();
|
50
|
+
|
49
51
|
// API-accessible functions.
|
50
52
|
void setMode ();
|
51
53
|
void dWrite ();
|
@@ -0,0 +1,183 @@
|
|
1
|
+
#include "SrStuduino.h"
|
2
|
+
|
3
|
+
typedef Smalrubot base;
|
4
|
+
|
5
|
+
SrStuduino::SrStuduino() {
|
6
|
+
}
|
7
|
+
|
8
|
+
/*
|
9
|
+
* 20-39: Initialize
|
10
|
+
* 40-59: Actuatuator
|
11
|
+
* 60-79: Sensor
|
12
|
+
**/
|
13
|
+
void SrStuduino::processCommand() {
|
14
|
+
switch(cmd) {
|
15
|
+
case 20:
|
16
|
+
setDcMotorCalibration();
|
17
|
+
break;
|
18
|
+
case 22:
|
19
|
+
initDcMotorPort();
|
20
|
+
break;
|
21
|
+
case 25:
|
22
|
+
initSensorPort();
|
23
|
+
break;
|
24
|
+
|
25
|
+
case 42:
|
26
|
+
dcMotorPower();
|
27
|
+
break;
|
28
|
+
case 43:
|
29
|
+
dcMotorControl();
|
30
|
+
break;
|
31
|
+
|
32
|
+
case 61:
|
33
|
+
getTouchSensorValue();
|
34
|
+
break;
|
35
|
+
case 62:
|
36
|
+
getLightSensorValue();
|
37
|
+
break;
|
38
|
+
case 64:
|
39
|
+
getIrPhotoreflectorValue();
|
40
|
+
break;
|
41
|
+
|
42
|
+
default:
|
43
|
+
base::processCommand();
|
44
|
+
break;
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
byte motorPorts[] = {
|
49
|
+
PORT_M1,
|
50
|
+
PORT_M2
|
51
|
+
};
|
52
|
+
byte analogPorts[] = {
|
53
|
+
PORT_A0,
|
54
|
+
PORT_A1,
|
55
|
+
PORT_A2,
|
56
|
+
PORT_A3,
|
57
|
+
PORT_A4,
|
58
|
+
PORT_A5,
|
59
|
+
PORT_A6,
|
60
|
+
PORT_A7
|
61
|
+
};
|
62
|
+
byte pids[] = {
|
63
|
+
PIDOPEN,
|
64
|
+
PIDLED,
|
65
|
+
PIDBUZZER,
|
66
|
+
PIDLIGHTSENSOR,
|
67
|
+
PIDSOUNDSENSOR,
|
68
|
+
PIDIRPHOTOREFLECTOR,
|
69
|
+
PIDACCELEROMETER,
|
70
|
+
PIDTOUCHSENSOR,
|
71
|
+
PIDPUSHSWITCH
|
72
|
+
};
|
73
|
+
|
74
|
+
/**
|
75
|
+
* !20<motor_index><rate>.
|
76
|
+
*
|
77
|
+
* motor_index(2): 0-1 => PORT_M1-PORT_M2
|
78
|
+
* rate(3): 0-100
|
79
|
+
**/
|
80
|
+
void SrStuduino::setDcMotorCalibration() {
|
81
|
+
byte calib[] = { 100, 100 };
|
82
|
+
|
83
|
+
calib[pin] = val;
|
84
|
+
studuino.SetDCMotorCalibration(calib);
|
85
|
+
}
|
86
|
+
|
87
|
+
/**
|
88
|
+
* !22<motor_index>.
|
89
|
+
*
|
90
|
+
* motor_index(2): 0-1 => PORT_M1-PORT_M2
|
91
|
+
**/
|
92
|
+
void SrStuduino::initDcMotorPort() {
|
93
|
+
studuino.InitDCMotorPort(motorPorts[pin]);
|
94
|
+
}
|
95
|
+
|
96
|
+
/**
|
97
|
+
* !25<sensor_index><pid_index>.
|
98
|
+
*
|
99
|
+
* sensor_index(2): 0-7 => PORT_A0-PORT_A7
|
100
|
+
* pid_index(3): 0 => PIDOPEN or
|
101
|
+
* 1 => PIDLED or
|
102
|
+
* 2 => PIDBUZZER or
|
103
|
+
* 3 => PIDLIGHTSENSOR or
|
104
|
+
* 4 => PIDSOUNDSENSOR or
|
105
|
+
* 5 => PIDRPHOTOREFLECTOR or
|
106
|
+
* 6 => PIDACCELEROMETER or
|
107
|
+
* 7 => PIDTOUCHSENSOR or
|
108
|
+
* 8 => PIDPUSHSWITCH
|
109
|
+
**/
|
110
|
+
void SrStuduino::initSensorPort() {
|
111
|
+
studuino.InitSensorPort(analogPorts[pin], pids[val]);
|
112
|
+
}
|
113
|
+
|
114
|
+
/**
|
115
|
+
* !42<motor_index><pace>.
|
116
|
+
*
|
117
|
+
* motor_index(2): 0-1 => PORT_M1-PORT_M2
|
118
|
+
* pace(3): 0-255
|
119
|
+
**/
|
120
|
+
void SrStuduino::dcMotorPower() {
|
121
|
+
studuino.DCMotorPower(motorPorts[pin], val);
|
122
|
+
}
|
123
|
+
|
124
|
+
/**
|
125
|
+
* !43<motor_index><rotation>.
|
126
|
+
*
|
127
|
+
* motor_index(2): 0-1 => PORT_M1-PORT_M2
|
128
|
+
* rotation_index(3): 0 => NORMAL or
|
129
|
+
* 1 => REVERSE or
|
130
|
+
* 2 => BRAKE or
|
131
|
+
* 3 => COAST
|
132
|
+
**/
|
133
|
+
void SrStuduino::dcMotorControl() {
|
134
|
+
byte rotations[] = { NORMAL, REVERSE, BRAKE, COAST };
|
135
|
+
|
136
|
+
studuino.DCMotorControl(motorPorts[pin], rotations[val]);
|
137
|
+
}
|
138
|
+
|
139
|
+
/**
|
140
|
+
* !61<sensor_index>.
|
141
|
+
*
|
142
|
+
* sensor_index(2): 0-7 => PORT_A0-PORT_A7
|
143
|
+
*
|
144
|
+
* return: <sensor_index><res>
|
145
|
+
*
|
146
|
+
* res: 0 => pressed or
|
147
|
+
* 1 => released
|
148
|
+
**/
|
149
|
+
void SrStuduino::getTouchSensorValue() {
|
150
|
+
byte res = studuino.GetTouchSensorValue(analogPorts[pin]);
|
151
|
+
|
152
|
+
sprintf(response, "%02d:%01d", pin, res);
|
153
|
+
}
|
154
|
+
|
155
|
+
/**
|
156
|
+
* !62<sensor_index>.
|
157
|
+
*
|
158
|
+
* sensor_index(2): 0-7 => PORT_A0-PORT_A7
|
159
|
+
*
|
160
|
+
* return: <sensor_index><res>
|
161
|
+
*
|
162
|
+
* res: 0-1023
|
163
|
+
**/
|
164
|
+
void SrStuduino::getLightSensorValue() {
|
165
|
+
int res = studuino.GetLightSensorValue(analogPorts[pin]);
|
166
|
+
|
167
|
+
sprintf(response, "%02d:%04d", pin, res);
|
168
|
+
}
|
169
|
+
|
170
|
+
/**
|
171
|
+
* !64<sensor_index>.
|
172
|
+
*
|
173
|
+
* sensor_index(2): 0-7 => PORT_A0-PORT_A7
|
174
|
+
*
|
175
|
+
* return: <sensor_index><res>
|
176
|
+
*
|
177
|
+
* res: 0-1023
|
178
|
+
**/
|
179
|
+
void SrStuduino::getIrPhotoreflectorValue() {
|
180
|
+
int res = studuino.GetIRPhotoreflectorValue(analogPorts[pin]);
|
181
|
+
|
182
|
+
sprintf(response, "%02d:%04d", pin, res);
|
183
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
/*
|
2
|
+
Library for smalrubot ruby gem.
|
3
|
+
*/
|
4
|
+
|
5
|
+
#ifndef SrStuduino_h
|
6
|
+
#define SrStuduino_h
|
7
|
+
|
8
|
+
#include "Smalrubot.h"
|
9
|
+
#include "Studuino.h"
|
10
|
+
|
11
|
+
class SrStuduino : public Smalrubot {
|
12
|
+
public:
|
13
|
+
SrStuduino();
|
14
|
+
|
15
|
+
protected:
|
16
|
+
Studuino studuino;
|
17
|
+
|
18
|
+
virtual void processCommand();
|
19
|
+
|
20
|
+
void setDcMotorCalibration();
|
21
|
+
void initDcMotorPort();
|
22
|
+
void initSensorPort();
|
23
|
+
void dcMotorPower();
|
24
|
+
void dcMotorControl();
|
25
|
+
void getTouchSensorValue();
|
26
|
+
void getLightSensorValue();
|
27
|
+
void getIrPhotoreflectorValue();
|
28
|
+
};
|
29
|
+
|
30
|
+
|
31
|
+
#endif
|
data/sketch/sr/sr.ino
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
#include "SrStuduino.h"
|
2
|
+
#include <Servo.h>
|
3
|
+
#include <Wire.h>
|
4
|
+
#include <MMA8653.h>
|
5
|
+
#include "Studuino.h"
|
6
|
+
|
7
|
+
SrStuduino smalrubot;
|
8
|
+
|
9
|
+
// Smalrubot.h doesn't handle TXRX. Setup a function to tell it to write to Serial.
|
10
|
+
void writeResponse(char *response) { Serial.println(response); }
|
11
|
+
void (*writeCallback)(char *str) = writeResponse;
|
12
|
+
|
13
|
+
void setup() {
|
14
|
+
Serial.begin(19200);
|
15
|
+
smalrubot.setupWrite(writeCallback);
|
16
|
+
}
|
17
|
+
|
18
|
+
void loop() {
|
19
|
+
while(Serial.available() > 0) smalrubot.parse(Serial.read());
|
20
|
+
Serial.flush();
|
21
|
+
}
|
22
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smalrubot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
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-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyserial
|
@@ -85,6 +85,7 @@ files:
|
|
85
85
|
- examples/test.rb
|
86
86
|
- lib/smalrubot.rb
|
87
87
|
- lib/smalrubot/board.rb
|
88
|
+
- lib/smalrubot/board/studuino.rb
|
88
89
|
- lib/smalrubot/board_not_found.rb
|
89
90
|
- lib/smalrubot/components.rb
|
90
91
|
- lib/smalrubot/components/base_component.rb
|
@@ -96,7 +97,10 @@ files:
|
|
96
97
|
- lib/smalrubot/version.rb
|
97
98
|
- sketch/lib/Smalrubot.cpp
|
98
99
|
- sketch/lib/Smalrubot.h
|
100
|
+
- sketch/lib/SrStuduino.cpp
|
101
|
+
- sketch/lib/SrStuduino.h
|
99
102
|
- sketch/sr/sr.ino
|
103
|
+
- sketch/sr_studu/sr_studu.ino
|
100
104
|
- smalrubot.gemspec
|
101
105
|
- spec/lib/board_not_found_spec.rb
|
102
106
|
- spec/lib/board_spec.rb
|