¿Puede alguien decirme qué hacen estas dos líneas del código Arduino?

4

Estoy tratando de entrar en robótica, y he encontrado un código de tutorial que estaba disponible en el sitio web de pololu para uno de sus controladores de motor que ahora tengo. ¿Podría alguien con antecedentes en el procesamiento explicar los segmentos resaltados, por favor?

#include <SoftwareSerial.h>
#define rxPin 3  // pin 3 connects to smcSerial TX  (not used in this example, but needed for the smcSerial object)
#define txPin 4  // pin 4 connects to smcSerial RX
SoftwareSerial smcSerial = SoftwareSerial(rxPin, txPin);

// speed should be a number from -3200 to 3200
void setMotorSpeed(int speed)
{
  if (speed < 0)
  {
    smcSerial.write(0x86); 
    speed = -speed;
  }
  else
  {
    smcSerial.write(0x85);       // This Line
  }
  smcSerial.write(speed & 0x1F); // This Line
  smcSerial.write(speed >> 5);   // This Line
}
    
pregunta Monte Carlo

2 respuestas

7

El programa envía 3 bytes a un periférico serial:

1) Lo que parece ser un "comando" o modo hacia adelante o hacia atrás.

2) los 5 bits más bajos del valor de velocidad

3) algunos bits más significativos del valor de la velocidad (probablemente 7 más dado el rango establecido)

La división entre los bytes 2 y 3 se realiza de forma un poco inusual: normalmente se envían los 8 bits inferiores completos y, sin embargo, quedan muchos bits en el siguiente byte. Es posible que se haga de esta manera porque el periférico reserva el (los) bit (s) superior (es) de cada byte para designar comandos o marcos, por lo que no se les permite usarlos para datos (al menos, ese es un esquema que he usado en proyectos) antes).

    
respondido por el Chris Stratton
2

Básicamente, pololu implementó el protocolo en serie en su controlador de motor y usted necesita enviar una serie de comandos para poder decirle al conductor qué hacer.

Del ejemplo anterior, está enviando el comando 0x85 que probablemente es la dirección del dispositivo + algo relacionado con la dirección de rotación deseada, y dos bytes más para la velocidad. Como Chris ya explicó.

Tiene que echar un vistazo a la hoja de datos del controlador para poder averiguar lo que tiene que enviar, para lograr lo que desea ... No existe un protocolo serie universal para robótica. Cada controlador tendrá una interpretación diferente de los bytes que envíes.

    
respondido por el Gossamer

Lea otras preguntas en las etiquetas