rad 0.2.2 → 0.2.9
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.
- data/History.txt +34 -0
- data/Manifest.txt +113 -7
- data/{README.txt → README.rdoc} +17 -5
- data/Rakefile +3 -0
- data/bin/rad +106 -1
- data/lib/examples/add_hysteresis.rb +13 -0
- data/lib/examples/basic_blink.rb +10 -0
- data/lib/examples/blink_m_address_assignment.rb +104 -0
- data/lib/examples/blink_m_hello.rb +14 -0
- data/lib/examples/blink_m_multi.rb +61 -0
- data/lib/examples/blink_with_serial.rb +16 -0
- data/lib/examples/configure_pa_lcd_boot.rb +91 -0
- data/lib/examples/debounce_methods.rb +49 -0
- data/lib/examples/external_variable_fu.rb +26 -0
- data/lib/examples/external_variables.rb +32 -0
- data/lib/examples/first_sound.rb +23 -0
- data/lib/examples/frequency_generator.rb +30 -0
- data/lib/examples/hello_array.rb +48 -0
- data/lib/examples/hello_array2.rb +79 -0
- data/lib/examples/hello_array_eeprom.rb +59 -0
- data/lib/examples/hello_clock.rb +84 -0
- data/lib/examples/hello_eeprom.rb +51 -0
- data/lib/examples/hello_eeprom_lcdpa.rb +81 -0
- data/lib/examples/hello_format_print.rb +94 -0
- data/lib/examples/hello_lcd_charset.rb +75 -0
- data/lib/examples/hello_pa_lcd.rb +59 -0
- data/lib/examples/hello_servos.rb +88 -0
- data/lib/examples/hello_spectra_sound.rb +38 -0
- data/lib/examples/hello_world.rb +11 -0
- data/lib/examples/hello_xbee.rb +12 -0
- data/lib/examples/hysteresis_duel.rb +39 -0
- data/lib/examples/i2c_with_clock_chip.rb +124 -0
- data/lib/examples/midi_beat_box.rb +86 -0
- data/lib/examples/midi_scales.rb +94 -0
- data/lib/examples/motor_knob.rb +30 -0
- data/lib/examples/servo_buttons.rb +23 -0
- data/lib/examples/servo_calibrate_continuous.rb +92 -0
- data/lib/examples/servo_throttle.rb +40 -0
- data/lib/examples/sparkfun_lcd.rb +48 -0
- data/lib/examples/spectra_soft_pot.rb +34 -0
- data/lib/examples/times_method.rb +8 -0
- data/lib/examples/toggle.rb +10 -0
- data/lib/examples/twitter.rb +57 -0
- data/lib/examples/two_wire.rb +14 -0
- data/lib/libraries/AFSoftSerial/AFSoftSerial.cpp +321 -0
- data/lib/libraries/AFSoftSerial/AFSoftSerial.h +61 -0
- data/lib/libraries/AFSoftSerial/keywords.txt +18 -0
- data/lib/libraries/AF_XPort/AF_XPort.cpp +166 -0
- data/lib/libraries/AF_XPort/AF_XPort.h +48 -0
- data/lib/libraries/DS1307/DS1307.cpp +162 -0
- data/lib/libraries/DS1307/DS1307.h +66 -0
- data/lib/libraries/{SWSerLCDpa → DS1307}/keywords.txt +1 -1
- data/lib/libraries/FrequencyTimer2/FrequencyTimer2.cpp +144 -0
- data/lib/libraries/FrequencyTimer2/FrequencyTimer2.h +42 -0
- data/lib/libraries/FrequencyTimer2/keywords.txt +22 -0
- data/lib/libraries/I2CEEPROM/I2CEEPROM.cpp +120 -0
- data/lib/libraries/I2CEEPROM/I2CEEPROM.h +70 -0
- data/lib/libraries/I2CEEPROM/keywords.txt +21 -0
- data/lib/libraries/LoopTimer/LoopTimer.cpp +35 -0
- data/lib/libraries/LoopTimer/LoopTimer.h +34 -0
- data/lib/libraries/LoopTimer/keywords.txt +27 -0
- data/lib/libraries/OneWire/OneWire.cpp +194 -0
- data/lib/libraries/OneWire/OneWire.h +63 -0
- data/lib/libraries/OneWire/keywords.txt +35 -0
- data/lib/libraries/OneWire/readme.txt +13 -0
- data/lib/libraries/SWSerLCDpa/SWSerLCDpa.cpp +93 -47
- data/lib/libraries/SWSerLCDpa/SWSerLCDpa.h +16 -9
- data/lib/libraries/SWSerLCDsf/SWSerLCDsf.cpp +311 -0
- data/lib/libraries/SWSerLCDsf/SWSerLCDsf.h +67 -0
- data/lib/libraries/Servo/Servo.cpp +192 -0
- data/lib/libraries/Servo/Servo.h +61 -0
- data/lib/libraries/Stepper/Stepper.cpp +220 -0
- data/lib/libraries/Stepper/Stepper.h +86 -0
- data/lib/libraries/Stepper/keywords.txt +28 -0
- data/lib/libraries/Wire/Wire.cpp +262 -0
- data/lib/libraries/Wire/Wire.h +67 -0
- data/lib/libraries/Wire/keywords.txt +31 -0
- data/lib/libraries/Wire/twi.h +57 -0
- data/lib/libraries/Wire/utility/twi.c +449 -0
- data/lib/libraries/Wire/utility/twi.h +57 -0
- data/lib/plugins/bitwise_ops.rb +54 -0
- data/lib/plugins/blink.rb +25 -0
- data/lib/plugins/blink_m.rb +356 -0
- data/lib/plugins/debounce.rb +138 -0
- data/lib/plugins/debug_output_to_lcd.rb +71 -0
- data/lib/plugins/hysteresis.rb +52 -0
- data/lib/plugins/input_output_state.rb +84 -0
- data/lib/plugins/lcd_padding.rb +58 -0
- data/lib/plugins/mem_test.rb +37 -0
- data/lib/plugins/midi.rb +60 -0
- data/lib/plugins/parallax_ping.rb +50 -0
- data/lib/plugins/servo_pulse.rb +31 -0
- data/lib/plugins/servo_setup.rb +86 -0
- data/lib/plugins/smoother.rb +54 -0
- data/lib/plugins/spark_fun_serial_lcd.rb +100 -0
- data/lib/plugins/spectra_symbol.rb +79 -0
- data/lib/plugins/twitter_connect.rb +145 -0
- data/lib/rad/README.rdoc +5 -0
- data/lib/rad/arduino_plugin.rb +246 -0
- data/lib/rad/arduino_sketch.rb +351 -257
- data/lib/rad/generators/makefile/makefile.erb +1 -1
- data/lib/rad/generators/makefile/makefile.rb +9 -10
- data/lib/rad/hardware_library.rb +813 -0
- data/lib/rad/init.rb +3 -1
- data/lib/rad/rad_processor.rb +128 -0
- data/lib/rad/rad_rewriter.rb +94 -0
- data/lib/rad/rad_type_checker.rb +26 -0
- data/lib/rad/sim/arduino_sketch.rb +57 -0
- data/lib/rad/sketch_compiler.rb +47 -0
- data/lib/rad/tasks/build_and_make.rake +146 -24
- data/lib/rad/variable_processing.rb +153 -0
- data/lib/rad/version.rb +1 -1
- data/spec/examples/hello_world.rb +11 -0
- data/spec/examples/serial_motor.rb +12 -0
- data/spec/models/sketch_compiler_spec.rb +96 -0
- data/spec/sim/hello_world_spec.rb +42 -0
- data/test/test_array_processing.rb +179 -0
- data/test/test_plugin_loading.rb +151 -0
- data/test/test_translation_post_processing.rb +185 -0
- data/test/test_variable_processing.rb +238 -0
- data/website/index.html +22 -7
- data/website/stylesheets/screen.css +32 -1
- metadata +130 -13
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/*
|
|
2
|
+
twi.h - TWI/I2C library for Wiring & Arduino
|
|
3
|
+
Copyright (c) 2006 Nicholas Zambetti. All right reserved.
|
|
4
|
+
|
|
5
|
+
This library is free software; you can redistribute it and/or
|
|
6
|
+
modify it under the terms of the GNU Lesser General Public
|
|
7
|
+
License as published by the Free Software Foundation; either
|
|
8
|
+
version 2.1 of the License, or (at your option) any later version.
|
|
9
|
+
|
|
10
|
+
This library is distributed in the hope that it will be useful,
|
|
11
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
12
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
13
|
+
Lesser General Public License for more details.
|
|
14
|
+
|
|
15
|
+
You should have received a copy of the GNU Lesser General Public
|
|
16
|
+
License along with this library; if not, write to the Free Software
|
|
17
|
+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
#ifndef twi_h
|
|
21
|
+
#define twi_h
|
|
22
|
+
|
|
23
|
+
#include <inttypes.h>
|
|
24
|
+
|
|
25
|
+
//#define ATMEGA8
|
|
26
|
+
|
|
27
|
+
#ifndef CPU_FREQ
|
|
28
|
+
#define CPU_FREQ 16000000L
|
|
29
|
+
#endif
|
|
30
|
+
|
|
31
|
+
#ifndef TWI_FREQ
|
|
32
|
+
#define TWI_FREQ 100000L
|
|
33
|
+
#endif
|
|
34
|
+
|
|
35
|
+
#ifndef TWI_BUFFER_LENGTH
|
|
36
|
+
#define TWI_BUFFER_LENGTH 32
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
#define TWI_READY 0
|
|
40
|
+
#define TWI_MRX 1
|
|
41
|
+
#define TWI_MTX 2
|
|
42
|
+
#define TWI_SRX 3
|
|
43
|
+
#define TWI_STX 4
|
|
44
|
+
|
|
45
|
+
void twi_init(void);
|
|
46
|
+
void twi_setAddress(uint8_t);
|
|
47
|
+
uint8_t twi_readFrom(uint8_t, uint8_t*, uint8_t);
|
|
48
|
+
uint8_t twi_writeTo(uint8_t, uint8_t*, uint8_t, uint8_t);
|
|
49
|
+
uint8_t twi_transmit(uint8_t*, uint8_t);
|
|
50
|
+
void twi_attachSlaveRxEvent( void (*)(uint8_t*, int) );
|
|
51
|
+
void twi_attachSlaveTxEvent( void (*)(void) );
|
|
52
|
+
void twi_reply(uint8_t);
|
|
53
|
+
void twi_stop(void);
|
|
54
|
+
void twi_releaseBus(void);
|
|
55
|
+
|
|
56
|
+
#endif
|
|
57
|
+
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
class BitwiseOps < ArduinoPlugin
|
|
2
|
+
|
|
3
|
+
# RAD plugins are c methods, directives, external variables and assignments and calls
|
|
4
|
+
# that may be added to the main setup method
|
|
5
|
+
# function prototypes not needed since we generate them automatically
|
|
6
|
+
|
|
7
|
+
# directives, external variables and setup assignments and calls can be added rails style (not c style)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# add to directives
|
|
11
|
+
|
|
12
|
+
# add to external variables
|
|
13
|
+
|
|
14
|
+
# add the following to the setup method
|
|
15
|
+
# add_to_setup
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
int build_int(int hibyte, int lobyte) {
|
|
19
|
+
return((hibyte << 8) + lobyte);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
int i_shiftleft(int val, int shift) {
|
|
23
|
+
return(val << shift);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
int i_shiftright(int val, int shift) {
|
|
27
|
+
return(val >> shift);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
byte b_shiftleft(byte val, byte shift) {
|
|
31
|
+
return(val << shift);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
byte b_shiftright(byte val, byte shift) {
|
|
35
|
+
return(val >> shift);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
int bit_and(int val, int mask) {
|
|
39
|
+
return(val & mask);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
int bit_or(int val, int mask) {
|
|
43
|
+
return(val | mask);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
int bit_xor(int val, int mask) {
|
|
47
|
+
return(val ^ mask);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
int twos_comp(int val) {
|
|
51
|
+
return((val ^ 0xffff) + 1);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
class Blink < ArduinoPlugin
|
|
2
|
+
|
|
3
|
+
# RAD plugins are c methods, directives, external variables and assignments and calls
|
|
4
|
+
# that may be added to the main setup method
|
|
5
|
+
# function prototypes not needed since we generate them automatically
|
|
6
|
+
|
|
7
|
+
# directives, external variables and setup assignments and calls can be added rails style (not c style)
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
# add to directives
|
|
11
|
+
|
|
12
|
+
# add to external variables
|
|
13
|
+
|
|
14
|
+
# add the following to the setup method
|
|
15
|
+
# add_to_setup
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
void blink(int pin, int ms) {
|
|
19
|
+
digitalWrite( pin, HIGH );
|
|
20
|
+
delay( ms );
|
|
21
|
+
digitalWrite( pin, LOW );
|
|
22
|
+
delay( ms );
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
end
|
|
@@ -0,0 +1,356 @@
|
|
|
1
|
+
class BlinkM < ArduinoPlugin
|
|
2
|
+
|
|
3
|
+
#
|
|
4
|
+
#
|
|
5
|
+
# BlinkM_funcs.h -- Arduino library to control BlinkM
|
|
6
|
+
# --------------
|
|
7
|
+
#
|
|
8
|
+
#
|
|
9
|
+
# Note: original version of this file lives with the BlinkMTester sketch
|
|
10
|
+
#
|
|
11
|
+
# 2007, Tod E. Kurt, ThingM, http://thingm.com/
|
|
12
|
+
#
|
|
13
|
+
# version: 20080203
|
|
14
|
+
#
|
|
15
|
+
# history:
|
|
16
|
+
# 20080101 - initial release
|
|
17
|
+
# 20080203 - added setStartupParam(), bugfix receiveBytes() from Dan Julio
|
|
18
|
+
# 20080727 - ported to rad jd barnhart
|
|
19
|
+
#
|
|
20
|
+
# first step, declare output pin 19 as i2c
|
|
21
|
+
## output_pin 19, :as => :wire, :device => :i2c, :enable => :true # reminder, true issues wire.begin
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
include_wire
|
|
25
|
+
|
|
26
|
+
add_blink_m_struct
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# Not needed when pin is declared with :enable => :true
|
|
31
|
+
# In fact, declaring it twice causes nothing but problems
|
|
32
|
+
|
|
33
|
+
static void BlinkM_begin()
|
|
34
|
+
{
|
|
35
|
+
Wire.begin(); // join i2c bus (address optional for master)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
// General version of BlinkM_beginWithPower().
|
|
40
|
+
|
|
41
|
+
static void BlinkM_beginWithPowerPins(byte pwrpin, byte gndpin)
|
|
42
|
+
{
|
|
43
|
+
DDRC |= _BV(pwrpin) | _BV(gndpin); // make outputs
|
|
44
|
+
PORTC &=~ _BV(gndpin);
|
|
45
|
+
PORTC |= _BV(pwrpin);
|
|
46
|
+
delay(100); // wait for things to stabilize
|
|
47
|
+
|
|
48
|
+
Wire.begin();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Call this first when BlinkM is plugged directly into Arduino
|
|
52
|
+
// The BlinkMs PWR (power) pins should line up with pins 2 and 3 of the connector,
|
|
53
|
+
// while the I2C (communications) pins should line up with pins 4 and 5.
|
|
54
|
+
|
|
55
|
+
static void BlinkM_beginWithPower()
|
|
56
|
+
{
|
|
57
|
+
BlinkM_beginWithPowerPins( PC3, PC2 );
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// sends a generic command
|
|
61
|
+
|
|
62
|
+
static void BlinkM_sendCmd(byte addr, byte* cmd, int cmdlen)
|
|
63
|
+
{
|
|
64
|
+
Wire.beginTransmission(addr);
|
|
65
|
+
for( byte i=0; i<cmdlen; i++)
|
|
66
|
+
Wire.send(cmd[i]);
|
|
67
|
+
Wire.endTransmission();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// receives generic data
|
|
71
|
+
// returns 0 on success, and -1 if no data available
|
|
72
|
+
// note: responsiblity of caller to know how many bytes to expect
|
|
73
|
+
|
|
74
|
+
static int BlinkM_receiveBytes(byte addr, byte* resp, byte len)
|
|
75
|
+
{
|
|
76
|
+
Wire.requestFrom(addr, len);
|
|
77
|
+
if( Wire.available() ) {
|
|
78
|
+
for( int i=0; i<len; i++)
|
|
79
|
+
resp[i] = Wire.receive();
|
|
80
|
+
return 0;
|
|
81
|
+
}
|
|
82
|
+
return -1;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Sets the I2C address of the BlinkM(s)
|
|
86
|
+
// Typically used to setup BlinkM addresses
|
|
87
|
+
// Connect one and call this with an address like 10,
|
|
88
|
+
// then 11 for the next and so on and so forth
|
|
89
|
+
// Uses "general call" broadcast address
|
|
90
|
+
|
|
91
|
+
static void BlinkM_setAddress(byte newaddress)
|
|
92
|
+
{
|
|
93
|
+
Wire.beginTransmission(0x00); // general call (broadcast address)
|
|
94
|
+
Wire.send('A');
|
|
95
|
+
Wire.send(newaddress);
|
|
96
|
+
Wire.send(0xD0);
|
|
97
|
+
Wire.send(0x0D); // dood!
|
|
98
|
+
Wire.send(newaddress);
|
|
99
|
+
Wire.endTransmission();
|
|
100
|
+
delay(50); // just in case
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
|
|
104
|
+
// Gets the I2C addrss of the BlinkM
|
|
105
|
+
// Kind of redundant when sent to a specific address
|
|
106
|
+
// but uses to verify BlinkM communication
|
|
107
|
+
|
|
108
|
+
static int BlinkM_getAddress(byte addr)
|
|
109
|
+
{
|
|
110
|
+
Wire.beginTransmission(addr);
|
|
111
|
+
Wire.send('a');
|
|
112
|
+
Wire.endTransmission();
|
|
113
|
+
Wire.requestFrom(addr, (byte)1);
|
|
114
|
+
if( Wire.available() ) {
|
|
115
|
+
byte b = Wire.receive();
|
|
116
|
+
return b;
|
|
117
|
+
}
|
|
118
|
+
return -1;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// Gets the BlinkM firmware version
|
|
122
|
+
|
|
123
|
+
static int BlinkM_getVersion(byte addr)
|
|
124
|
+
{
|
|
125
|
+
Wire.beginTransmission(addr);
|
|
126
|
+
Wire.send('Z');
|
|
127
|
+
Wire.endTransmission();
|
|
128
|
+
Wire.requestFrom(addr, (byte)2);
|
|
129
|
+
if( Wire.available() ) {
|
|
130
|
+
byte major_ver = Wire.receive();
|
|
131
|
+
byte minor_ver = Wire.receive();
|
|
132
|
+
return (major_ver<<8) + minor_ver;
|
|
133
|
+
}
|
|
134
|
+
return -1;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// Demonstrates how to verify you-re talking to a BlinkM
|
|
138
|
+
// and that you know its address -- message version
|
|
139
|
+
|
|
140
|
+
static char* blink_m_check_address_message(byte addr) // :as => :optional
|
|
141
|
+
{
|
|
142
|
+
char message[50];
|
|
143
|
+
char status[5];
|
|
144
|
+
strcpy(message, "received 0x");
|
|
145
|
+
//Serial.print("Checking BlinkM address...");
|
|
146
|
+
int b = BlinkM_getAddress(addr);
|
|
147
|
+
if( b==-1 ) {
|
|
148
|
+
//Serial.println("No response, that's not good");
|
|
149
|
+
return "No response, that's not good"; // no response
|
|
150
|
+
}
|
|
151
|
+
itoa(b, status ,16);
|
|
152
|
+
|
|
153
|
+
//Serial.print("received addr: 0x");
|
|
154
|
+
//Serial.print(b,HEX);
|
|
155
|
+
if( b != addr )
|
|
156
|
+
return "error, mismatch"; // error, addr mismatch
|
|
157
|
+
else
|
|
158
|
+
return strcat(message, status); // match, everything okay
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Demonstrates how to verify you-re talking to a BlinkM
|
|
162
|
+
// and that you know its address -- digital version
|
|
163
|
+
|
|
164
|
+
static int BlinkM_checkAddress(byte addr)
|
|
165
|
+
{
|
|
166
|
+
//Serial.print("Checking BlinkM address...");
|
|
167
|
+
int b = BlinkM_getAddress(addr);
|
|
168
|
+
if( b==-1 ) {
|
|
169
|
+
//Serial.println("No response, that's not good");
|
|
170
|
+
return -1; // no response
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
//Serial.print("received addr: 0x");
|
|
174
|
+
//Serial.print(b,HEX);
|
|
175
|
+
if( b != addr )
|
|
176
|
+
return 1; // error, addr mismatch
|
|
177
|
+
else
|
|
178
|
+
return 0; // match, everything okay
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Sets the speed of fading between colors.
|
|
182
|
+
// Higher numbers means faster fading, 255 == instantaneous fading
|
|
183
|
+
|
|
184
|
+
static void BlinkM_setFadeSpeed(byte addr, byte fadespeed)
|
|
185
|
+
{
|
|
186
|
+
Wire.beginTransmission(addr);
|
|
187
|
+
Wire.send('f');
|
|
188
|
+
Wire.send(fadespeed);
|
|
189
|
+
Wire.endTransmission();
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// Sets the light script playback time adjust
|
|
193
|
+
// The timeadj argument is signed, and is an additive value to all
|
|
194
|
+
// durations in a light script. Set to zero to turn off time adjust.
|
|
195
|
+
|
|
196
|
+
static void BlinkM_setTimeAdj(byte addr, byte timeadj)
|
|
197
|
+
{
|
|
198
|
+
Wire.beginTransmission(addr);
|
|
199
|
+
Wire.send('t');
|
|
200
|
+
Wire.send(timeadj);
|
|
201
|
+
Wire.endTransmission();
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Fades to an RGB color
|
|
205
|
+
|
|
206
|
+
static void BlinkM_fadeToRGB(byte addr, byte red, byte grn, byte blu)
|
|
207
|
+
{
|
|
208
|
+
Wire.beginTransmission(addr);
|
|
209
|
+
Wire.send('c');
|
|
210
|
+
Wire.send(red);
|
|
211
|
+
Wire.send(grn);
|
|
212
|
+
Wire.send(blu);
|
|
213
|
+
Wire.endTransmission();
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Fades to an HSB color
|
|
217
|
+
|
|
218
|
+
static void BlinkM_fadeToHSB(byte addr, byte hue, byte saturation, byte brightness)
|
|
219
|
+
{
|
|
220
|
+
Wire.beginTransmission(addr);
|
|
221
|
+
Wire.send('h');
|
|
222
|
+
Wire.send(hue);
|
|
223
|
+
Wire.send(saturation);
|
|
224
|
+
Wire.send(brightness);
|
|
225
|
+
Wire.endTransmission();
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
// Sets an RGB color immediately
|
|
229
|
+
|
|
230
|
+
static void BlinkM_setRGB(byte addr, byte red, byte grn, byte blu)
|
|
231
|
+
{
|
|
232
|
+
Wire.beginTransmission(addr);
|
|
233
|
+
Wire.send('n');
|
|
234
|
+
Wire.send(red);
|
|
235
|
+
Wire.send(grn);
|
|
236
|
+
Wire.send(blu);
|
|
237
|
+
Wire.endTransmission();
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// Fades to a random RGB color
|
|
241
|
+
|
|
242
|
+
static void BlinkM_fadeToRandomRGB(byte addr, byte rrnd, byte grnd, byte brnd)
|
|
243
|
+
{
|
|
244
|
+
Wire.beginTransmission(addr);
|
|
245
|
+
Wire.send('C');
|
|
246
|
+
Wire.send(rrnd);
|
|
247
|
+
Wire.send(grnd);
|
|
248
|
+
Wire.send(brnd);
|
|
249
|
+
Wire.endTransmission();
|
|
250
|
+
}
|
|
251
|
+
// Fades to a random HSB color
|
|
252
|
+
|
|
253
|
+
static void BlinkM_fadeToRandomHSB(byte addr, byte hrnd, byte srnd, byte brnd)
|
|
254
|
+
{
|
|
255
|
+
Wire.beginTransmission(addr);
|
|
256
|
+
Wire.send('H');
|
|
257
|
+
Wire.send(hrnd);
|
|
258
|
+
Wire.send(srnd);
|
|
259
|
+
Wire.send(brnd);
|
|
260
|
+
Wire.endTransmission();
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
static void BlinkM_getRGBColor(byte addr, byte* r, byte* g, byte* b)
|
|
264
|
+
{
|
|
265
|
+
Wire.beginTransmission(addr);
|
|
266
|
+
Wire.send('g');
|
|
267
|
+
Wire.endTransmission();
|
|
268
|
+
Wire.requestFrom(addr, (byte)3);
|
|
269
|
+
if( Wire.available() ) {
|
|
270
|
+
*r = Wire.receive();
|
|
271
|
+
*g = Wire.receive();
|
|
272
|
+
*b = Wire.receive();
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
static void BlinkM_playScript(byte addr, byte script_id, byte reps, byte pos)
|
|
277
|
+
{
|
|
278
|
+
Wire.beginTransmission(addr);
|
|
279
|
+
Wire.send('p');
|
|
280
|
+
Wire.send(script_id);
|
|
281
|
+
Wire.send(reps);
|
|
282
|
+
Wire.send(pos);
|
|
283
|
+
Wire.endTransmission();
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
static void BlinkM_stopScript(byte addr)
|
|
287
|
+
{
|
|
288
|
+
Wire.beginTransmission(addr);
|
|
289
|
+
Wire.send('o');
|
|
290
|
+
Wire.endTransmission();
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
static void BlinkM_setScriptLengthReps(byte addr, byte script_id,
|
|
294
|
+
byte len, byte reps)
|
|
295
|
+
{
|
|
296
|
+
Wire.beginTransmission(addr);
|
|
297
|
+
Wire.send('L');
|
|
298
|
+
Wire.send(script_id);
|
|
299
|
+
Wire.send(len);
|
|
300
|
+
Wire.send(reps);
|
|
301
|
+
Wire.endTransmission();
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
static void BlinkM_writeScriptLine(byte addr, byte script_id,
|
|
305
|
+
byte pos, byte dur,
|
|
306
|
+
byte cmd, byte arg1, byte arg2, byte arg3)
|
|
307
|
+
{
|
|
308
|
+
#ifdef BLINKM_FUNCS_DEBUG
|
|
309
|
+
Serial.print("writing line:"); Serial.print(pos,DEC);
|
|
310
|
+
Serial.print(" with cmd:"); Serial.print(cmd);
|
|
311
|
+
Serial.print(" arg1:"); Serial.println(arg1,HEX);
|
|
312
|
+
#endif
|
|
313
|
+
Wire.beginTransmission(addr);
|
|
314
|
+
Wire.send('W');
|
|
315
|
+
Wire.send(script_id);
|
|
316
|
+
Wire.send(pos);
|
|
317
|
+
Wire.send(dur);
|
|
318
|
+
Wire.send(cmd);
|
|
319
|
+
Wire.send(arg1);
|
|
320
|
+
Wire.send(arg2);
|
|
321
|
+
Wire.send(arg3);
|
|
322
|
+
Wire.endTransmission();
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
static void BlinkM_writeScript(byte addr, byte script_id,
|
|
326
|
+
byte len, byte reps,
|
|
327
|
+
blinkm_script_line* lines)
|
|
328
|
+
{
|
|
329
|
+
#ifdef BLINKM_FUNCS_DEBUG
|
|
330
|
+
Serial.print("writing script to addr:"); Serial.print(addr,DEC);
|
|
331
|
+
Serial.print(", script_id:"); Serial.println(script_id,DEC);
|
|
332
|
+
#endif
|
|
333
|
+
for(byte i=0; i < len; i++) {
|
|
334
|
+
blinkm_script_line l = lines[i];
|
|
335
|
+
BlinkM_writeScriptLine( addr, script_id, i, l.dur,
|
|
336
|
+
l.cmd[0], l.cmd[1], l.cmd[2], l.cmd[3]);
|
|
337
|
+
}
|
|
338
|
+
BlinkM_setScriptLengthReps(addr, script_id, len, reps);
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
|
|
342
|
+
static void BlinkM_setStartupParams(byte addr, byte mode, byte script_id,
|
|
343
|
+
byte reps, byte fadespeed, byte timeadj)
|
|
344
|
+
{
|
|
345
|
+
Wire.beginTransmission(addr);
|
|
346
|
+
Wire.send('B');
|
|
347
|
+
Wire.send(mode);
|
|
348
|
+
Wire.send(script_id);
|
|
349
|
+
Wire.send(reps);
|
|
350
|
+
Wire.send(fadespeed);
|
|
351
|
+
Wire.send(timeadj);
|
|
352
|
+
Wire.endTransmission();
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
|
|
356
|
+
end
|