diff options
| -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 */ |
