Paso 2: Especificar y diseñar el nuevo PyMata API y reportero método Interfaces
Utilizando la interfaz pública de Stepper.h como guía, podemos empezar a diseñar el motor paso a paso de PyMata API y reportero método interfaces.
En primer lugar, necesitamos un método que le instruirá acerca de la serie biblioteca para crear una instancia de un objeto motor. Vamos a llamar a este método, stepper_config, y similar a los constructores de la biblioteca paso a paso, vamos a permitir que el llamador especifique el número de pasos por revolución, así como proporcionar una lista de pines de control del motor. Esta lista, en la opción de llamadas, contendrá valores de pin 2 para un motor 2 conductor o 4 para un motor de 4 conductores.
Aquí está la firma para el método de API stepper_config.
def stepper_config(self, steps_per_revolution, stepper_pins): """ Configure stepper motor prior to operation. steps_per_revolution: number of steps per motor revolution stepper_pins: a list of control pin numbers - either 4 or 2 """
Refiriéndose a Stepper.h, la biblioteca proporciona distintos métodos para establecer la velocidad del motor y mueva el motor un número determinado de pasos.
Nuestra interfaz de PyMata tendrá que hacer lo mismo, pero vamos a tomar una decisión de diseño y combinar ambas operaciones en un método.
Denominamos este método stepper_step y a continuación se muestra su firma API.
def stepper_step(self, motor_speed, number_of_steps): """ Move a stepper motor for the number of steps at the specified speed motor_speed: 21 bits of data to set motor speed number_of_steps: 14 bits for number of steps & direction positive is forward, negative is reverse """
También tenemos que proporcionar un método para permitir que el usuario solicite la versión de biblioteca Motor paso a paso. Debido a la naturaleza asíncrona de una firmado informes, tenemos distintos métodos para enviar la solicitud de versión a Arduino y para recuperar la respuesta. Ambos de estos métodos son parte de la API pública.
El método de petición tendrá la siguiente firma de API:
def stepper_request_library_version(self): """ Request the stepper library version from the Arduino. To retrieve the version after this command is called, call get_stepper_version(). """
Antes de discutir el método final de API, tenemos que especificar la firma del método al reportero que procesa los datos enviados desde el Arduino al cliente. Estos datos son en forma de dos bytes de 7 bits que necesita reensamblarse para formar el número de versión de biblioteca que será almacenado por el cliente.
def stepper_version_response(self, data): """ This method handles a stepper library version message sent from the Arduino and stores the value until the user requests its value using get_stepper_version() data -Two 7 bit bytes that contain the library version number """
Internamente se almacenará el valor devuelto por el Arduino en el mensaje de stepper_version_response por PyMata. Para recuperar el valor, el usuario llama al método de la API de get_stepper_version. Para permitir la transferencia de datos de Arduino y tiempos de procesamiento, se especifica un parámetro de tiempo de espera máximo. El valor predeterminado para este parámetro es 20 segundos. Si las respuestas antes de que expire el tiempo máximo de Arduino, el valor será devuelto inmediatamente y se cancela el temporizador. La firma de este método es:
def get_stepper_version(self, timeout=20): """ timeout: specify a max time to allow arduino to process and return the version the stepper version number if it was set. """
Una nota importante
Se implementan todos los métodos de "mando" PyMata en pymata.py. Por lo tanto cuando nos stepper_config, stepper_step, stepper_request_library_version y get_stepper_version, código se todos se agregaron a pymata.py.
Todos "reportero los mensajes" origina de Arduino son manejados por pymata_command_handler.py. Por lo tanto la aplicación de stepper_version_response se añadirá a ese archivo.