Schritt 7: Umsetzung des FirmataPlus Skizze-Code
Wieder mit Ihrem Text-Editor, öffnen Sie FirmataPlus.ino und nehmen Sie folgende Änderungen:
1. Fügen Sie stepper.h zur Liste der "enthält Header" am oberen Rand der Datei:
#include <Stepper.h>
2. erstellen Sie einen Zeiger auf eine Instanz von einem Schrittmotor und auf NULL festgelegt. Die Schrittmotor-Variable ist global, so legen Sie sie in den globalen Variablen Abschnitt der Datei.
/*============================================================== GLOBAL VARIABLES ==============================================================*/ // Stepper Motor Stepper *stepper = NULL;
3. switch(mode) in void SetPinModeCallback (Byte-Pin, Int-Modus) für den Schrittmotor-Stift eine Case-Anweisung hinzufügen:
case STEPPER: pinConfig[pin] = STEPPER ; break ; default: Firmata.sendString("Unknown pin mode");
4. Fügen Sie eine neue Anfrage, um sysexCallback() zu den STEPPER_DATA-Befehl und seine Unterbefehle Griff zum Erlöschen.
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) in leere SystemResetCallback() fügen Sie den folgenden Code für Stepper:
// clear stepper pointer stepper = NULL ;
Schließen Sie und speichern Sie die Datei.
Damit sind alle Änderungen am Code.