diff --git a/Firmata.h b/Firmata.h index 377784d2..1953b0b3 100644 --- a/Firmata.h +++ b/Firmata.h @@ -56,6 +56,7 @@ #define ANALOG_MAPPING_RESPONSE 0x6A // reply with mapping info #define REPORT_FIRMWARE 0x79 // report name and version of the firmware #define SAMPLING_INTERVAL 0x7A // set the poll rate of the main loop +#define CONFIG_EXT 0x7C // further arduino configuration not covered by pin_mode #define SYSEX_NON_REALTIME 0x7E // MIDI Reserved for non-realtime messages #define SYSEX_REALTIME 0x7F // MIDI Reserved for realtime messages // these are DEPRECATED to make the naming more consistent diff --git a/examples/StandardFirmata/StandardFirmata.ino b/examples/StandardFirmata/StandardFirmata.ino index 974fbdca..57d6aa42 100644 --- a/examples/StandardFirmata/StandardFirmata.ino +++ b/examples/StandardFirmata/StandardFirmata.ino @@ -450,6 +450,45 @@ void sysexCallback(byte command, byte argc, byte *argv) //Firmata.sendString("Not enough data"); } break; + case CONFIG_EXT: + if (argc > 1) { + switch (argv[0]) { + case 0: // analogReference request + switch (argv[0]) { + case 0: // analogReference request + switch (argv[1]) { + case 0: + analogReference(DEFAULT); + break; + case 1: + analogReference(INTERNAL); + break; +#ifdef INTERNAL1V1 + case 2: + analogReference(INTERNAL1V1); + break; +#endif +#ifdef INTERNAL2V56 + case 3: + analogReference(INTERNAL2V56); + break; +#endif + case 4: + analogReference(EXTERNAL); + break; + } + break; +#if ARDUINO >= 150 + case 1: // analogWriteResolution request + analogReadResolution(arg[1]); + break; + case 2: // analogWriteResolution request + analogWriteResolution(arg[1]); + break; +#endif + } + } + } case EXTENDED_ANALOG: if (argc > 1) { int val = argv[1];