Paso 7: Implementar el código de bosquejo de FirmataPlus
Otra vez, usando su editor de texto, abra FirmataPlus.ino y haga los siguientes cambios:
1. Añadir stepper.h a la lista de "cabecera incluye" cerca de la parte superior del archivo:
#include <Stepper.h>
2. crear un puntero a una instancia de un motor paso a paso y establece en NULL. El paso a paso variable es global, así que la coloque en la sección de Variables globales del archivo.
/*============================================================== GLOBAL VARIABLES ==============================================================*/ // Stepper Motor Stepper *stepper = NULL;
3. Agregue una instrucción case para switch(mode) en setPinModeCallback vacío (pin de byte, int modo) para la espiga paso a paso:
case STEPPER: pinConfig[pin] = STEPPER ; break ; default: Firmata.sendString("Unknown pin mode");
4. Añadir un nuevo caso para anular sysexCallback() para manejar el mando STEPPER_DATA y sus subcomandos.
case STEPPER_DATA: // determine if this a STEPPER_CONFIGURE command or STEPPER_OPERATE command if (argv[0] == STEPPER_CONFIGURE) { int numSteps = argv[1] + (argv[2] << 7); int pin1 = argv[3] ; int pin2 = argv[4] ; if ( argc == 5 ) { // two pin motor stepper = new Stepper(numSteps, pin1, pin2) ; } else if (argc == 7 ) // 4 wire motor { int pin3 = argv[5] ; int pin4 = argv[6] ; stepper = new Stepper(numSteps, pin1, pin2, pin3, pin4) ; } else { Firmata.sendString("STEPPER CONFIG Error: Wrong Number of arguments"); printData("argc = ", argc) ; } } else if ( argv[0] == STEPPER_STEP ) { long speed = (long)argv[1] | ((long)argv[2] << 7) | ((long)argv[3] << 14); int numSteps = argv[4] + (argv[5] << 7); int direction = argv[6] ; if (stepper != NULL ) { stepper->setSpeed(speed) ; if (direction == 0 ) { numSteps *= -1 ; } stepper->step(numSteps) ; } else { Firmata.sendString("STEPPER OPERATE Error: MOTOR NOT CONFIGURED"); } } else if ( argv[0] == STEPPER_LIBRARY_VERSION ) { if ( stepper != NULL ) { int version = stepper->version() ; Firmata.write(START_SYSEX); Firmata.write(STEPPER_DATA); Firmata.write(version & 0x7F); Firmata.write(version >> 7); Firmata.write(END_SYSEX); } else { // did not find a configured stepper Firmata.sendString("STEPPER FIRMWARE VERSION Error: NO MOTORS CONFIGURED"); } break ; } else { Firmata.sendString("STEPPER CONFIG Error: UNKNOWN STEPPER COMMAND"); } break ;
5. en el SystemResetCallback() vacío, agregue el código siguiente para el paso a paso:
// clear stepper pointer stepper = NULL ;
Cierre y guarde el archivo.
Llega a la conclusión todos los cambios de código.