Paso 3: Seleccionar y especificar el comando SysEx y Pin Mode
Una firmado fue diseñada para ser usuario extensible. El mecanismo que proporciona esta extensibilidad es la tem Sys Exexclusivo (SysEx) protocolo de mensajería.
El formato de un mensaje SysEx según lo definido por el protocolo de una firmado, se muestra en la ilustración anterior. Comienza con un byte de la START_SYSEX con un valor fijo de 0xF0 hexadecimal y es seguido por un único byte de comando de SysEx. El valor del byte de comando debe estar en la gama de hexadecimal 0 x 00-0x7F. El byte de comando es seguido por un número no especificado de bytes de datos de 7 bits y por último, el mensaje termina con un byte de la END_SYSEX, que tiene un valor fijo de 0xF7 hexadecimal.
Después de recibir un comando completo de SysEx de un cliente, el servidor envía el comando a la función de sysexCallback() de Sketch, donde es procesada.
// Excerpt From FirmataPlus.ino /*================================================================= * SYSEX-BASED commands *================================================================*/ void sysexCallback(byte command, byte argc, byte *argv){ byte mode; byte slaveAddress; byte slaveRegister; byte data; unsigned int delayTime; byte pin ;// used for tone int frequency ; int duration ; switch (command) { case STEPPER_DATA: // Process the command ....
Para apoyar un nuevo dispositivo, es necesario especificar un nuevo comando de SysEx, para ser utilizado por el cliente una firmado y el servidor. También puede que necesitemos especificar un nuevo modo de pin.
Agregar el nuevo comando de SysEx y modo Pin a FirmataPlus.h
Usando su editor de texto favorito, Abra FirmataPlus.h en el cuaderno de bocetos de Arduino. En mi sistema, este archivo se encuentra en:
~/Arduino/libraries/FirmataPlus
Busque la sección de Usuario define los comandos del archivo. Valor hexadecimal 0x72 aún no se ha asignado, por lo que asignaremos este valor a nuestro comando nuevo. Para ser consecuente con una firmado convenciones de nomenclatura, el nombre del nuevo comando de SysEx será STEPPER_DATA.
Escriba el comando nuevo en el archivo como se muestra a continuación:
/* user defined commands */ #define ENCODER_CONFIG 0x20 // create and enable encoder object #define ENCODER_DATA 0x21 // current encoder data #define TONE_DATA 0x5F // request a tone be played #define SONAR_CONFIG 0x60 // configure a sonar distance // sensor for operation #define SONAR_DATA 0x61 // Data returned from sonar // distance sensor /* New Command for stepper motor #define STEPPER_DATA 0x72 // stepper motor command */
También tenemos que añadir un nuevo modo de pin para el paso a paso y ajustar la cuenta de pin en este archivo. Hay 13 modos de pin como entrada y salida.
// pin modes //#define INPUT 0x00 // defined in wiring.h //#define OUTPUT 0x01 // defined in wiring.h #define ANALOG 0x02 // analog pin in analogInput mode #define PWM 0x03 // digital pin in PWM output mode #define SERVO 0x04 // digital pin in Servo output mode #define SHIFT 0x05 // shiftIn/shiftOut mode #define I2C 0x06 // pin included in I2C setup #define ONEWIRE 0x07 // New Pin Mode #define STEPPER 0x08 // Any pin in Stepper mode // #define TONE 0x09 // Any pin in TONE mode #define ENCODER 0x0a #define SONAR 0x0b // Any pin in Ping mode #define IGNORE 0x7f #define TOTAL_PIN_MODES 13
FirmataPlus.h edición está ahora completa. Guarde y cierre el archivo
Agregar el comando de SysEx para pymata_command_handler.py
Ahora vamos a agregar el SysEx nuevo comando (0x72) para PyMata.
Usando su editor favorito, Abra pymata_command_handler.py ubicado en el directorio de PyMata-master/PyMata o en el directorio donde descomprimió los archivos de PyMata .
Busque la sección de comandos una firmado sysex y agregar el nuevo comando.
# Firmata sysex commands SERVO_CONFIG = 0x70 # set servo pin and max and min angles STRING_DATA = 0x71 # a string message with 14-bits per char ### New command STEPPER_DATA = 0x72 # Stepper motor command ### I2C_REQUEST = 0x76 # send an I2C read/write request I2C_REPLY = 0x77 # a reply to an I2C read request I2C_CONFIG = 0x78 # config I2C settings such as delay times REPORT_FIRMWARE = 0x79 # report name and version of the firmware SAMPLING_INTERVAL = 0x7A # modify the sampling interval
Guarde y cierre este archivo.
Agregar el modo Pin a pymata.py
Por último, tenemos que añadir el modo pin pymata.py.
Usando su editor favorito, abra pymata.py y agregue el nuevo modo de pin.
# pin modes INPUT = 0x00 # pin set as input OUTPUT = 0x01 # pin set as output ANALOG = 0x02 # analog pin in analogInput mode PWM = 0x03 # digital pin in PWM output mode SERVO = 0x04 # digital pin in Servo output mode I2C = 0x06 # pin included in I2C setup ONEWIRE = 0x07 # possible future feature ### New Pin Mode STEPPER = 0x08 # any pin in stepper mode ### TONE = 0x09 # Any pin in TONE mode ENCODER = 0x0a SONAR = 0x0b # Any pin in SONAR mode IGNORE = 0x7f
PyMata no utiliza TOTAL_PIN_MODES, y allí no se agrega a este archivo. Guarde y cierre este archivo.
Nota: Actualmente sólo tipos de modo de entrada de pin realmente están siendo utilizados por el código de PyMata, pero estamos agregando ambos tipos de perno de modo pin de entrada y salida para que sea coherente con el código FirmataPlus.