diff options
author | erdgeist <erdgeist@bauklotz.fritz.box> | 2017-04-08 14:21:36 +0200 |
---|---|---|
committer | erdgeist <erdgeist@bauklotz.fritz.box> | 2017-04-08 14:21:36 +0200 |
commit | f2683a4b707cd714b7f540ebf6482563df83d51e (patch) | |
tree | de4941add99f0eb1642aa57c6af180b4ee70119a /arduino/Laserharfe | |
parent | 78d309a97b782bd6ab2716fa7595bb3f409479e3 (diff) |
Near complete rewrite.
Diffstat (limited to 'arduino/Laserharfe')
-rw-r--r-- | arduino/Laserharfe/Laserharfe.ino | 105 |
1 files changed, 80 insertions, 25 deletions
diff --git a/arduino/Laserharfe/Laserharfe.ino b/arduino/Laserharfe/Laserharfe.ino index a0e8d07..107dffb 100644 --- a/arduino/Laserharfe/Laserharfe.ino +++ b/arduino/Laserharfe/Laserharfe.ino | |||
@@ -1,11 +1,3 @@ | |||
1 | /* | ||
2 | * MIDIUSB_test.ino | ||
3 | * | ||
4 | * Created: 4/6/2015 10:47:08 AM | ||
5 | * Author: gurbrinder grewal | ||
6 | * Modified by Arduino LLC (2015) | ||
7 | */ | ||
8 | |||
9 | #include "MIDIUSB.h" | 1 | #include "MIDIUSB.h" |
10 | #include <SD.h> | 2 | #include <SD.h> |
11 | #include <Wire.h> | 3 | #include <Wire.h> |
@@ -15,12 +7,16 @@ | |||
15 | #include "engine.h" | 7 | #include "engine.h" |
16 | 8 | ||
17 | int led = 13; | 9 | int led = 13; |
10 | int g_reading_config = 0; | ||
11 | int g_writing_config = 0; | ||
12 | ConfigSource g_config_source = source_none; | ||
13 | //Sd2Card card; | ||
18 | 14 | ||
19 | enum { | 15 | enum { |
20 | MODE_STANDALONE = 0, | 16 | MODE_STANDALONE = 0, |
21 | MODE_REPORTPOINTS = 1, | 17 | MODE_REPORTPOINTS = 1, |
22 | MODE_REPORTPOINTS_PLAY = 2, | 18 | MODE_REPORTPOINTS_PLAY = 2 |
23 | } g_mode = MODE_REPORTPOINTS_PLAY; | 19 | } g_mode = MODE_STANDALONE; |
24 | 20 | ||
25 | uint32_t now() { | 21 | uint32_t now() { |
26 | return millis(); | 22 | return millis(); |
@@ -85,6 +81,7 @@ static void set_cam_register(uint8_t r, uint8_t v) { | |||
85 | } | 81 | } |
86 | 82 | ||
87 | static void setup_cam() { | 83 | static void setup_cam() { |
84 | digitalWrite(19, HIGH); // turn the LED on (HIGH is the voltage level) | ||
88 | set_cam_register(0x30, 0x01); | 85 | set_cam_register(0x30, 0x01); |
89 | set_cam_register(0x06, 0x90); | 86 | set_cam_register(0x06, 0x90); |
90 | set_cam_register(0x08, 0xc0); | 87 | set_cam_register(0x08, 0xc0); |
@@ -99,7 +96,6 @@ void read_config() { | |||
99 | Serial.println("initialization failed!"); | 96 | Serial.println("initialization failed!"); |
100 | return; | 97 | return; |
101 | } | 98 | } |
102 | |||
103 | File configfile = SD.open("laserhar.cfg", FILE_READ); | 99 | File configfile = SD.open("laserhar.cfg", FILE_READ); |
104 | if (!configfile) { | 100 | if (!configfile) { |
105 | Serial.println("opening config failed"); | 101 | Serial.println("opening config failed"); |
@@ -107,14 +103,15 @@ void read_config() { | |||
107 | } | 103 | } |
108 | 104 | ||
109 | char command[256]; | 105 | char command[256]; |
110 | int command_len; | 106 | int command_len = 0; |
111 | int skip_command; | 107 | int skip_command = 0; |
112 | 108 | ||
113 | while (configfile.available()) { | 109 | while (configfile.available()) { |
114 | char c = command[command_len++] = configfile.read(); | 110 | char c = command[command_len++] = configfile.read(); |
115 | if (c=='\n') { | 111 | if (c=='\n') { |
116 | if (!skip_command) { | 112 | if (!skip_command) { |
117 | command[command_len] = 0; | 113 | command[command_len] = 0; |
114 | // Serial.write(command); | ||
118 | config_handle_line(command); | 115 | config_handle_line(command); |
119 | } | 116 | } |
120 | skip_command = 0; | 117 | skip_command = 0; |
@@ -126,9 +123,38 @@ void read_config() { | |||
126 | command_len = 0; | 123 | command_len = 0; |
127 | } | 124 | } |
128 | } | 125 | } |
126 | |||
127 | configfile.close(); | ||
128 | } | ||
129 | |||
130 | void write_config() { | ||
131 | SD.remove("laserhar.cfg"); | ||
132 | File configfile = SD.open("laserhar.cfg", FILE_WRITE); | ||
133 | if (!configfile) { | ||
134 | Serial.println("opening config failed"); | ||
135 | return; | ||
136 | } | ||
137 | |||
138 | char text[256]; | ||
139 | size_t len = config_dumpglobals(text, sizeof(text)); | ||
140 | configfile.write(text, len); | ||
141 | for (int i=0; i< g_string_count; ++i) { | ||
142 | len = config_dumpstring(i, text, sizeof(text)); | ||
143 | configfile.write(text, len); | ||
144 | } | ||
145 | Serial.println("-- DONE"); | ||
129 | configfile.close(); | 146 | configfile.close(); |
130 | } | 147 | } |
131 | 148 | ||
149 | void flashy_death() { | ||
150 | while(1) { | ||
151 | digitalWrite(led, LOW); // turn the LED on (HIGH is the voltage level) | ||
152 | delay(500); | ||
153 | digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level) | ||
154 | delay(500); | ||
155 | } | ||
156 | } | ||
157 | |||
132 | void setup() { | 158 | void setup() { |
133 | pinMode(led, OUTPUT); | 159 | pinMode(led, OUTPUT); |
134 | 160 | ||
@@ -139,8 +165,8 @@ void setup() { | |||
139 | // Let PWM settle for a bit | 165 | // Let PWM settle for a bit |
140 | delay(100); | 166 | delay(100); |
141 | setup_cam(); | 167 | setup_cam(); |
142 | |||
143 | Serial.begin(115200); | 168 | Serial.begin(115200); |
169 | delay(5000); | ||
144 | read_config(); | 170 | read_config(); |
145 | digitalWrite(led, LOW); // turn the LED on (HIGH is the voltage level) | 171 | digitalWrite(led, LOW); // turn the LED on (HIGH is the voltage level) |
146 | } | 172 | } |
@@ -220,10 +246,10 @@ void handle_midi(char *command) { | |||
220 | return; | 246 | return; |
221 | if (command[6] != '\n') | 247 | if (command[6] != '\n') |
222 | return; | 248 | return; |
223 | |||
224 | midiEventPacket_t p = { m[0], (m[0]<<4) | m[1], (m[2]<<4) | m[3], (m[4]<<4) | m[5] }; | 249 | midiEventPacket_t p = { m[0], (m[0]<<4) | m[1], (m[2]<<4) | m[3], (m[4]<<4) | m[5] }; |
225 | MidiUSB.sendMIDI(p); | 250 | MidiUSB.sendMIDI(p); |
226 | // MidiUSB.flush(); | 251 | MidiUSB.flush(); |
252 | Serial.println("- MIDI SENT"); | ||
227 | } | 253 | } |
228 | 254 | ||
229 | void midi_playnote(int channel, int note, int octave_offset ) { | 255 | void midi_playnote(int channel, int note, int octave_offset ) { |
@@ -246,11 +272,20 @@ void midi_pitchbend( int channel, int pitch ) { | |||
246 | MidiUSB.sendMIDI(p); | 272 | MidiUSB.sendMIDI(p); |
247 | } | 273 | } |
248 | 274 | ||
249 | void handle_configure(char *command) { | 275 | void handle_command(char *command) { |
276 | char text[512]; | ||
277 | size_t len; | ||
278 | // Serial.write( text, sprintf(text, "- %s\n", command)); | ||
250 | 279 | ||
251 | } | 280 | if (g_reading_config ) { |
281 | if ( !strcmp(command, "-- DONE")) { | ||
282 | g_reading_config = 0; | ||
283 | return; | ||
284 | } | ||
285 | config_handle_line(command); | ||
286 | return; | ||
287 | } | ||
252 | 288 | ||
253 | void handle_command(char *command) { | ||
254 | switch (*command) { | 289 | switch (*command) { |
255 | case 'M': /* Getting MIDI instruction */ | 290 | case 'M': /* Getting MIDI instruction */ |
256 | handle_midi(command+1); | 291 | handle_midi(command+1); |
@@ -266,12 +301,32 @@ void handle_command(char *command) { | |||
266 | case '3': | 301 | case '3': |
267 | g_mode = MODE_REPORTPOINTS; | 302 | g_mode = MODE_REPORTPOINTS; |
268 | break; | 303 | break; |
269 | default: | ||
270 | break; | ||
271 | } | 304 | } |
272 | break; | 305 | break; |
273 | case 'C': /* Getting configure command */ | 306 | case 'C': /* Import a single config line from host */ |
274 | handle_configure(command+1); | 307 | config_handle_line(command+1); |
308 | break; | ||
309 | case 'E': /* Export config from host, import here */ | ||
310 | config_reset(); | ||
311 | g_reading_config = true; | ||
312 | break; | ||
313 | case 'I': /* Import config at host */ | ||
314 | delay(1000); | ||
315 | len = config_dumpglobals(text, sizeof(text)); | ||
316 | Serial.write(text, len); | ||
317 | for (int i=0; i< g_string_count; ++i) { | ||
318 | len = config_dumpstring(i, text, sizeof(text)); | ||
319 | delay(100); | ||
320 | Serial.write(text, len); | ||
321 | } | ||
322 | delay(100); | ||
323 | Serial.println("-- DONE"); | ||
324 | break; | ||
325 | case 'R': /* Re-read config */ | ||
326 | read_config(); | ||
327 | break; | ||
328 | case 'W': /* Write local config */ | ||
329 | write_config(); | ||
275 | break; | 330 | break; |
276 | default: | 331 | default: |
277 | break; | 332 | break; |
@@ -279,7 +334,7 @@ void handle_command(char *command) { | |||
279 | } | 334 | } |
280 | 335 | ||
281 | void handle_serial() { | 336 | void handle_serial() { |
282 | static char command[128]; | 337 | static char command[512]; |
283 | static int command_len; | 338 | static int command_len; |
284 | static int skip_command; | 339 | static int skip_command; |
285 | 340 | ||
@@ -323,6 +378,6 @@ void loop() { | |||
323 | */ | 378 | */ |
324 | 379 | ||
325 | engine_checksilence(millis()); | 380 | engine_checksilence(millis()); |
326 | digitalWrite(led, ++led_state & 1 ? HIGH : LOW); // turn the LED on (HIGH is the voltage level) | 381 | digitalWrite(led, ++led_state & 0xff < 0x7f ? HIGH : LOW); // turn the LED on (HIGH is the voltage level) |
327 | } | 382 | } |
328 | 383 | ||