smalrubot 0.0.5 → 0.0.6
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.
- checksums.yaml +4 -4
- data/LEGAL +16 -0
- data/README.md +18 -1
- data/bin/smalrubot +3 -0
- data/examples/test.rb +31 -2
- data/lib/smalrubot/board.rb +18 -8
- data/lib/smalrubot/version.rb +1 -1
- data/sketch/lib/Adafruit_NeoPixel.cpp +1029 -0
- data/sketch/lib/Adafruit_NeoPixel.h +97 -0
- data/sketch/lib/Smalrubot.cpp +108 -16
- data/sketch/lib/Smalrubot.h +22 -10
- data/sketch/lib/SrStuduino.cpp +3 -1
- data/sketch/lib/SrStuduino.h +1 -1
- data/sketch/sr/sr.ino +7 -1
- data/sketch/sr_studu/sr_studu.ino +6 -1
- metadata +4 -2
@@ -0,0 +1,97 @@
|
|
1
|
+
/*--------------------------------------------------------------------
|
2
|
+
This file is part of the Adafruit NeoPixel library.
|
3
|
+
|
4
|
+
NeoPixel is free software: you can redistribute it and/or modify
|
5
|
+
it under the terms of the GNU Lesser General Public License as
|
6
|
+
published by the Free Software Foundation, either version 3 of
|
7
|
+
the License, or (at your option) any later version.
|
8
|
+
|
9
|
+
NeoPixel is distributed in the hope that it will be useful,
|
10
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
+
GNU Lesser General Public License for more details.
|
13
|
+
|
14
|
+
You should have received a copy of the GNU Lesser General Public
|
15
|
+
License along with NeoPixel. If not, see
|
16
|
+
<http://www.gnu.org/licenses/>.
|
17
|
+
--------------------------------------------------------------------*/
|
18
|
+
|
19
|
+
#ifndef ADAFRUIT_NEOPIXEL_H
|
20
|
+
#define ADAFRUIT_NEOPIXEL_H
|
21
|
+
|
22
|
+
#if (ARDUINO >= 100)
|
23
|
+
#include <Arduino.h>
|
24
|
+
#else
|
25
|
+
#include <WProgram.h>
|
26
|
+
#include <pins_arduino.h>
|
27
|
+
#endif
|
28
|
+
|
29
|
+
// 'type' flags for LED pixels (third parameter to constructor):
|
30
|
+
#define NEO_RGB 0x00 // Wired for RGB data order
|
31
|
+
#define NEO_GRB 0x01 // Wired for GRB data order
|
32
|
+
#define NEO_BRG 0x04
|
33
|
+
|
34
|
+
#define NEO_COLMASK 0x01
|
35
|
+
#define NEO_KHZ800 0x02 // 800 KHz datastream
|
36
|
+
#define NEO_SPDMASK 0x02
|
37
|
+
// Trinket flash space is tight, v1 NeoPixels aren't handled by default.
|
38
|
+
// Remove the ifndef/endif to add support -- but code will be bigger.
|
39
|
+
// Conversely, can comment out the #defines to save space on other MCUs.
|
40
|
+
#ifndef __AVR_ATtiny85__
|
41
|
+
#define NEO_KHZ400 0x00 // 400 KHz datastream
|
42
|
+
#endif
|
43
|
+
|
44
|
+
class Adafruit_NeoPixel {
|
45
|
+
|
46
|
+
public:
|
47
|
+
|
48
|
+
// Constructor: number of LEDs, pin number, LED type
|
49
|
+
Adafruit_NeoPixel(uint16_t n, uint8_t p=6, uint8_t t=NEO_GRB + NEO_KHZ800);
|
50
|
+
~Adafruit_NeoPixel();
|
51
|
+
|
52
|
+
void
|
53
|
+
begin(void),
|
54
|
+
show(void),
|
55
|
+
setPin(uint8_t p),
|
56
|
+
setPixelColor(uint16_t n, uint8_t r, uint8_t g, uint8_t b),
|
57
|
+
setPixelColor(uint16_t n, uint32_t c),
|
58
|
+
setBrightness(uint8_t),
|
59
|
+
clear();
|
60
|
+
uint8_t
|
61
|
+
*getPixels(void) const,
|
62
|
+
getBrightness(void) const;
|
63
|
+
uint16_t
|
64
|
+
numPixels(void) const;
|
65
|
+
static uint32_t
|
66
|
+
Color(uint8_t r, uint8_t g, uint8_t b);
|
67
|
+
uint32_t
|
68
|
+
getPixelColor(uint16_t n) const;
|
69
|
+
inline bool
|
70
|
+
canShow(void) { return (micros() - endTime) >= 50L; }
|
71
|
+
|
72
|
+
private:
|
73
|
+
|
74
|
+
const uint16_t
|
75
|
+
numLEDs, // Number of RGB LEDs in strip
|
76
|
+
numBytes; // Size of 'pixels' buffer below
|
77
|
+
uint8_t
|
78
|
+
pin, // Output pin number
|
79
|
+
brightness,
|
80
|
+
*pixels, // Holds LED color values (3 bytes each)
|
81
|
+
rOffset, // Index of red byte within each 3-byte pixel
|
82
|
+
gOffset, // Index of green byte
|
83
|
+
bOffset; // Index of blue byte
|
84
|
+
const uint8_t
|
85
|
+
type; // Pixel flags (400 vs 800 KHz, RGB vs GRB color)
|
86
|
+
uint32_t
|
87
|
+
endTime; // Latch timing reference
|
88
|
+
#ifdef __AVR__
|
89
|
+
const volatile uint8_t
|
90
|
+
*port; // Output PORT register
|
91
|
+
uint8_t
|
92
|
+
pinMask; // Output PORT bitmask
|
93
|
+
#endif
|
94
|
+
|
95
|
+
};
|
96
|
+
|
97
|
+
#endif // ADAFRUIT_NEOPIXEL_H
|
data/sketch/lib/Smalrubot.cpp
CHANGED
@@ -5,14 +5,41 @@
|
|
5
5
|
#include "Arduino.h"
|
6
6
|
#include "Smalrubot.h"
|
7
7
|
|
8
|
-
Smalrubot::Smalrubot()
|
8
|
+
Smalrubot::Smalrubot(int neo_pixel_num, int neo_pixel_pin) :
|
9
|
+
pixels(neo_pixel_num, neo_pixel_pin, NEO_RGB + NEO_KHZ400)
|
10
|
+
{
|
9
11
|
reset();
|
10
12
|
}
|
11
13
|
|
12
14
|
void Smalrubot::parse(char c) {
|
13
|
-
if (c == '!')
|
14
|
-
|
15
|
-
|
15
|
+
if (c == '!') {
|
16
|
+
index = 0;
|
17
|
+
receivingRequest = true;
|
18
|
+
}
|
19
|
+
else if (receivingRequest) {
|
20
|
+
if (c == '.') {
|
21
|
+
process();
|
22
|
+
receivingRequest = false;
|
23
|
+
}
|
24
|
+
else if (index < MAX_REQUEST_LENGTH) {
|
25
|
+
request[index++] = c;
|
26
|
+
}
|
27
|
+
else {
|
28
|
+
receivingRequest = false;
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
|
34
|
+
int Smalrubot::parseRequestValue(int n) {
|
35
|
+
if (index < 4 + (n + 1) * 3) {
|
36
|
+
return 0;
|
37
|
+
}
|
38
|
+
|
39
|
+
strncpy(valStr, request + 4 + n * 3, 3);
|
40
|
+
valStr[3] = '\0';
|
41
|
+
|
42
|
+
return atoi(valStr);
|
16
43
|
}
|
17
44
|
|
18
45
|
void Smalrubot::process() {
|
@@ -21,10 +48,9 @@ void Smalrubot::process() {
|
|
21
48
|
// Parse the request.
|
22
49
|
strncpy(cmdStr, request, 2); cmdStr[2] = '\0';
|
23
50
|
strncpy(pinStr, request + 2, 2); pinStr[2] = '\0';
|
24
|
-
strncpy(valStr, request + 4, 3); valStr[3] = '\0';
|
25
51
|
cmd = atoi(cmdStr);
|
26
52
|
pin = atoi(pinStr);
|
27
|
-
val =
|
53
|
+
val = parseRequestValue(0);
|
28
54
|
|
29
55
|
#ifdef debug
|
30
56
|
Serial.print("Received request - "); Serial.println(request);
|
@@ -48,21 +74,50 @@ void Smalrubot::process() {
|
|
48
74
|
void Smalrubot::processCommand() {
|
49
75
|
// Call the command.
|
50
76
|
switch(cmd) {
|
51
|
-
case 0:
|
52
|
-
|
53
|
-
|
54
|
-
case
|
55
|
-
|
56
|
-
|
57
|
-
case
|
58
|
-
|
59
|
-
|
77
|
+
case 0:
|
78
|
+
setMode();
|
79
|
+
break;
|
80
|
+
case 1:
|
81
|
+
dWrite();
|
82
|
+
break;
|
83
|
+
case 2:
|
84
|
+
dRead();
|
85
|
+
break;
|
86
|
+
case 3:
|
87
|
+
aWrite();
|
88
|
+
break;
|
89
|
+
case 4:
|
90
|
+
aRead();
|
91
|
+
break;
|
92
|
+
case 8:
|
93
|
+
servoToggle();
|
94
|
+
break;
|
95
|
+
case 9:
|
96
|
+
servoWrite();
|
97
|
+
break;
|
98
|
+
case 10:
|
99
|
+
setNeoPixelPin();
|
100
|
+
break;
|
101
|
+
case 11:
|
102
|
+
setNeoPixelNumPixels();
|
103
|
+
break;
|
104
|
+
case 12:
|
105
|
+
setNeoPixelColor();
|
106
|
+
break;
|
107
|
+
case 13:
|
108
|
+
showNeoPixel();
|
109
|
+
break;
|
110
|
+
case 90:
|
111
|
+
reset();
|
112
|
+
break;
|
113
|
+
default:
|
114
|
+
break;
|
60
115
|
}
|
61
116
|
}
|
62
117
|
|
63
|
-
|
64
118
|
// WRITE CALLBACK
|
65
119
|
void Smalrubot::setupWrite(void (*writeCallback)(char *str)) {
|
120
|
+
pixels.begin();
|
66
121
|
_writeCallback = writeCallback;
|
67
122
|
}
|
68
123
|
void Smalrubot::writeResponse() {
|
@@ -153,10 +208,47 @@ void Smalrubot::servoWrite() {
|
|
153
208
|
servos[pin - SERVO_OFFSET].write(val);
|
154
209
|
}
|
155
210
|
|
211
|
+
// CMD = 10
|
212
|
+
void Smalrubot::setNeoPixelPin() {
|
213
|
+
#ifdef debug
|
214
|
+
Serial.print("set NeoPixel pin "); Serial.println(pin);
|
215
|
+
#endif
|
216
|
+
pixels.setPin(pin);
|
217
|
+
}
|
218
|
+
|
219
|
+
// CMD = 11
|
220
|
+
void Smalrubot::setNeoPixelNumPixels() {
|
221
|
+
#ifdef debug
|
222
|
+
Serial.print("set NeoPixel num pixels "); Serial.println(val);
|
223
|
+
#endif
|
224
|
+
// not support yet
|
225
|
+
// pixels.setNumPixels(val);
|
226
|
+
}
|
227
|
+
|
228
|
+
// CMD = 12
|
229
|
+
void Smalrubot::setNeoPixelColor() {
|
230
|
+
#ifdef debug
|
231
|
+
Serial.print("set NeoPixel color "); Serial.println(val);
|
232
|
+
#endif
|
233
|
+
uint16_t n = pin;
|
234
|
+
uint8_t r = val, g = parseRequestValue(1), b = parseRequestValue(2);
|
235
|
+
|
236
|
+
pixels.setPixelColor(n, pixels.Color(r, g, b));
|
237
|
+
}
|
238
|
+
|
239
|
+
// CMD = 13
|
240
|
+
void Smalrubot::showNeoPixel() {
|
241
|
+
#ifdef debug
|
242
|
+
Serial.println("show NeoPixel");
|
243
|
+
#endif
|
244
|
+
pixels.show();
|
245
|
+
}
|
246
|
+
|
156
247
|
// CMD = 90
|
157
248
|
void Smalrubot::reset() {
|
158
249
|
#ifdef debug
|
159
250
|
Serial.println("Reset the board to defaults.");
|
160
251
|
#endif
|
161
252
|
sprintf(response, "ACK:%02d", A0);
|
253
|
+
receivingRequest = false;
|
162
254
|
}
|
data/sketch/lib/Smalrubot.h
CHANGED
@@ -7,6 +7,8 @@
|
|
7
7
|
|
8
8
|
#include "Arduino.h"
|
9
9
|
#include <Servo.h>
|
10
|
+
#include "Adafruit_NeoPixel.h"
|
11
|
+
#include <avr/power.h>
|
10
12
|
|
11
13
|
// Allocate listener storage based on what board we're running.
|
12
14
|
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
|
@@ -20,17 +22,20 @@
|
|
20
22
|
// Uncomment this line to enable debugging mode.
|
21
23
|
// #define debug true
|
22
24
|
|
25
|
+
#define MAX_REQUEST_LENGTH 20
|
26
|
+
|
23
27
|
class Smalrubot {
|
24
28
|
public:
|
25
|
-
Smalrubot();
|
29
|
+
Smalrubot(int neo_pixel_num, int neo_pixel_pin);
|
26
30
|
void setupWrite(void (*writeCallback)(char *str));
|
27
31
|
void parse(char c);
|
28
32
|
void process();
|
29
33
|
|
30
34
|
protected:
|
31
35
|
// Request storage.
|
32
|
-
char request[
|
36
|
+
char request[MAX_REQUEST_LENGTH];
|
33
37
|
int index;
|
38
|
+
bool receivingRequest;
|
34
39
|
char cmdStr[3];
|
35
40
|
byte cmd;
|
36
41
|
char pinStr[3];
|
@@ -46,17 +51,24 @@ class Smalrubot {
|
|
46
51
|
|
47
52
|
Servo servos[12];
|
48
53
|
|
54
|
+
Adafruit_NeoPixel pixels;
|
55
|
+
|
49
56
|
virtual void processCommand();
|
57
|
+
int parseRequestValue(int n);
|
50
58
|
|
51
59
|
// API-accessible functions.
|
52
|
-
void setMode
|
53
|
-
void dWrite
|
54
|
-
void dRead
|
55
|
-
void aWrite
|
56
|
-
void aRead
|
57
|
-
void servoToggle
|
58
|
-
void servoWrite
|
59
|
-
void
|
60
|
+
void setMode();
|
61
|
+
void dWrite();
|
62
|
+
void dRead();
|
63
|
+
void aWrite();
|
64
|
+
void aRead();
|
65
|
+
void servoToggle();
|
66
|
+
void servoWrite();
|
67
|
+
void setNeoPixelPin();
|
68
|
+
void setNeoPixelNumPixels();
|
69
|
+
void setNeoPixelColor();
|
70
|
+
void showNeoPixel();
|
71
|
+
void reset();
|
60
72
|
};
|
61
73
|
|
62
74
|
#endif
|
data/sketch/lib/SrStuduino.cpp
CHANGED
data/sketch/lib/SrStuduino.h
CHANGED
data/sketch/sr/sr.ino
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
#include "Smalrubot.h"
|
2
2
|
#include <Servo.h>
|
3
|
-
|
3
|
+
#include "Adafruit_NeoPixel.h"
|
4
|
+
#include <avr/power.h>
|
5
|
+
|
6
|
+
#define DEFAULT_NEO_PIXEL_NUM 16
|
7
|
+
#define DEFAULT_NEO_PIXEL_PIN 5
|
8
|
+
|
9
|
+
Smalrubot smalrubot(DEFAULT_NEO_PIXEL_NUM, DEFAULT_NEO_PIXEL_PIN);
|
4
10
|
|
5
11
|
// Smalrubot.h doesn't handle TXRX. Setup a function to tell it to write to Serial.
|
6
12
|
void writeResponse(char *response) { Serial.println(response); }
|
@@ -1,10 +1,15 @@
|
|
1
1
|
#include "SrStuduino.h"
|
2
2
|
#include <Servo.h>
|
3
|
+
#include "Adafruit_NeoPixel.h"
|
4
|
+
#include <avr/power.h>
|
3
5
|
#include <Wire.h>
|
4
6
|
#include <MMA8653.h>
|
5
7
|
#include "Studuino.h"
|
6
8
|
|
7
|
-
|
9
|
+
#define DEFAULT_NEO_PIXEL_NUM 16
|
10
|
+
#define DEFAULT_NEO_PIXEL_PIN 5
|
11
|
+
|
12
|
+
SrStuduino smalrubot(DEFAULT_NEO_PIXEL_NUM, DEFAULT_NEO_PIXEL_PIN);
|
8
13
|
|
9
14
|
// Smalrubot.h doesn't handle TXRX. Setup a function to tell it to write to Serial.
|
10
15
|
void writeResponse(char *response) { Serial.println(response); }
|
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.6
|
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-
|
11
|
+
date: 2015-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubyserial
|
@@ -95,6 +95,8 @@ files:
|
|
95
95
|
- lib/smalrubot/tx_rx/base.rb
|
96
96
|
- lib/smalrubot/tx_rx/serial.rb
|
97
97
|
- lib/smalrubot/version.rb
|
98
|
+
- sketch/lib/Adafruit_NeoPixel.cpp
|
99
|
+
- sketch/lib/Adafruit_NeoPixel.h
|
98
100
|
- sketch/lib/Smalrubot.cpp
|
99
101
|
- sketch/lib/Smalrubot.h
|
100
102
|
- sketch/lib/SrStuduino.cpp
|