diff options
Diffstat (limited to 'arduino/Laserharfe')
-rw-r--r-- | arduino/Laserharfe/Laserharfe.ino | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/arduino/Laserharfe/Laserharfe.ino b/arduino/Laserharfe/Laserharfe.ino index 107dffb..1d7adeb 100644 --- a/arduino/Laserharfe/Laserharfe.ino +++ b/arduino/Laserharfe/Laserharfe.ino | |||
@@ -9,8 +9,8 @@ | |||
9 | int led = 13; | 9 | int led = 13; |
10 | int g_reading_config = 0; | 10 | int g_reading_config = 0; |
11 | int g_writing_config = 0; | 11 | int g_writing_config = 0; |
12 | ConfigSource g_config_source = source_none; | ||
13 | //Sd2Card card; | 12 | //Sd2Card card; |
13 | char g_revision; | ||
14 | 14 | ||
15 | enum { | 15 | enum { |
16 | MODE_STANDALONE = 0, | 16 | MODE_STANDALONE = 0, |
@@ -81,7 +81,8 @@ static void set_cam_register(uint8_t r, uint8_t v) { | |||
81 | } | 81 | } |
82 | 82 | ||
83 | static void setup_cam() { | 83 | static void setup_cam() { |
84 | digitalWrite(19, HIGH); // turn the LED on (HIGH is the voltage level) | 84 | digitalWrite(g_revision == 2 ? 16 : 19, HIGH); // Alte Harfe: port 19/A5/PB02/Pin 47 |
85 | // Neue Harfe: port 16/A2/PB09/Pin 8 | ||
85 | set_cam_register(0x30, 0x01); | 86 | set_cam_register(0x30, 0x01); |
86 | set_cam_register(0x06, 0x90); | 87 | set_cam_register(0x06, 0x90); |
87 | set_cam_register(0x08, 0xc0); | 88 | set_cam_register(0x08, 0xc0); |
@@ -128,16 +129,20 @@ void read_config() { | |||
128 | } | 129 | } |
129 | 130 | ||
130 | void write_config() { | 131 | void write_config() { |
132 | Serial.println("- removing config file"); | ||
131 | SD.remove("laserhar.cfg"); | 133 | SD.remove("laserhar.cfg"); |
134 | Serial.println("- ... done, open new config file"); | ||
132 | File configfile = SD.open("laserhar.cfg", FILE_WRITE); | 135 | File configfile = SD.open("laserhar.cfg", FILE_WRITE); |
133 | if (!configfile) { | 136 | if (!configfile) { |
134 | Serial.println("opening config failed"); | 137 | Serial.println("- opening config failed"); |
135 | return; | 138 | return; |
136 | } | 139 | } |
140 | Serial.println("- ... done, writing globals"); | ||
137 | 141 | ||
138 | char text[256]; | 142 | char text[256]; |
139 | size_t len = config_dumpglobals(text, sizeof(text)); | 143 | size_t len = config_dumpglobals(text, sizeof(text)); |
140 | configfile.write(text, len); | 144 | configfile.write(text, len); |
145 | Serial.println("- ... done, writing globals"); | ||
141 | for (int i=0; i< g_string_count; ++i) { | 146 | for (int i=0; i< g_string_count; ++i) { |
142 | len = config_dumpstring(i, text, sizeof(text)); | 147 | len = config_dumpstring(i, text, sizeof(text)); |
143 | configfile.write(text, len); | 148 | configfile.write(text, len); |
@@ -156,6 +161,11 @@ void flashy_death() { | |||
156 | } | 161 | } |
157 | 162 | ||
158 | void setup() { | 163 | void setup() { |
164 | pinMode(5, INPUT_PULLUP); | ||
165 | delay(10); | ||
166 | g_revision = digitalRead(5) == LOW ? 2 : 1; | ||
167 | |||
168 | Serial.begin(115200); | ||
159 | pinMode(led, OUTPUT); | 169 | pinMode(led, OUTPUT); |
160 | 170 | ||
161 | Wire.begin(); | 171 | Wire.begin(); |
@@ -165,8 +175,7 @@ void setup() { | |||
165 | // Let PWM settle for a bit | 175 | // Let PWM settle for a bit |
166 | delay(100); | 176 | delay(100); |
167 | setup_cam(); | 177 | setup_cam(); |
168 | Serial.begin(115200); | 178 | delay(1000); |
169 | delay(5000); | ||
170 | read_config(); | 179 | read_config(); |
171 | digitalWrite(led, LOW); // turn the LED on (HIGH is the voltage level) | 180 | digitalWrite(led, LOW); // turn the LED on (HIGH is the voltage level) |
172 | } | 181 | } |
@@ -227,6 +236,7 @@ void handle_wire() { | |||
227 | if (p4.x!=1023) | 236 | if (p4.x!=1023) |
228 | Serial.write(text, sprintf(text, "%04d:%04d ", p4.x, p4.y)); | 237 | Serial.write(text, sprintf(text, "%04d:%04d ", p4.x, p4.y)); |
229 | Serial.println(""); | 238 | Serial.println(""); |
239 | delay(5); | ||
230 | } | 240 | } |
231 | 241 | ||
232 | /* Do a fast nibble to hex representation conversion */ | 242 | /* Do a fast nibble to hex representation conversion */ |
@@ -278,11 +288,13 @@ void handle_command(char *command) { | |||
278 | // Serial.write( text, sprintf(text, "- %s\n", command)); | 288 | // Serial.write( text, sprintf(text, "- %s\n", command)); |
279 | 289 | ||
280 | if (g_reading_config ) { | 290 | if (g_reading_config ) { |
281 | if ( !strcmp(command, "-- DONE")) { | 291 | if ( !memcmp(command, "-- DONE", 7)) { |
292 | Serial.println("- finished import"); | ||
282 | g_reading_config = 0; | 293 | g_reading_config = 0; |
283 | return; | 294 | return; |
284 | } | 295 | } |
285 | config_handle_line(command); | 296 | config_handle_line(command); |
297 | delay(10); | ||
286 | return; | 298 | return; |
287 | } | 299 | } |
288 | 300 | ||
@@ -302,12 +314,15 @@ void handle_command(char *command) { | |||
302 | g_mode = MODE_REPORTPOINTS; | 314 | g_mode = MODE_REPORTPOINTS; |
303 | break; | 315 | break; |
304 | } | 316 | } |
317 | Serial.println(g_revision == 2 ? "revision 2" : "revision 1"); | ||
305 | break; | 318 | break; |
306 | case 'C': /* Import a single config line from host */ | 319 | case 'C': /* Import a single config line from host */ |
307 | config_handle_line(command+1); | 320 | config_handle_line(command+1); |
308 | break; | 321 | break; |
309 | case 'E': /* Export config from host, import here */ | 322 | case 'E': /* Export config from host, import here */ |
310 | config_reset(); | 323 | config_reset(); |
324 | Serial.println("- export from host triggered"); | ||
325 | delay(100); | ||
311 | g_reading_config = true; | 326 | g_reading_config = true; |
312 | break; | 327 | break; |
313 | case 'I': /* Import config at host */ | 328 | case 'I': /* Import config at host */ |