Paso 10: P.3, código: hablando con un Servo
Iniciar serie de comunicaciones en la función setup() de Arduino en 9600 baudios (bits por segundo):
Serial.Begin(9600);
Suele imprimir un mensaje en el final de la función setup() para confirmar que el Arduino está trabajando y listo para empezar a recibir la entrada en serie:
Serial.println ("trabajo!");
Ahora, en el bucle principal, queremos esperar a que se han recibido 3 caracteres (bytes), la función Serial.available() nos dice cuántos bytes son en el buffer, por lo que sondear hasta el valor 3:
Si (Serial.available() == 3) {}
... algo de código...
}
Para leer bytes de la memoria intermedia, se utiliza Serial.read(), que también borra el byte leído fuera del búfer. Estamos recibiendo 3 bytes, esto quiere decir 3 llamadas a Serial.read(). Cada byte representa un dígito codificado en ASCII. Echa un vistazo a este sitio web: http://www.asciitable.com/
Nada acerca de dónde 0, 1, 2... ¿son? Eso es! Comienzan en la 48, 49, 50...! Eso significa que necesita restar 48 el valor ASCII de la cifra de transmisión. (Agradecemos nosotros, porque estábamos confundidos para un día, hasta que scolton lo explicó)
El buffer es FIFO (primero en primero hacia fuera), así podemos leer los cientos dígitos primero, las decenas segundo y los últimos (el mismo orden como fueron transmitidos):
ángulo = (Serial.read() - 48) * 100;
ángulo += (Serial.read() - 48) * 10;
ángulo += (Serial.read() - 48);
Ahora, queremos escribir ese ángulo a un servo - importar la librería servo:
#include < Servo.h >
Declarar un objeto servo antes que el método de instalación (esto es también donde declaras el ángulo, que debe ser un entero, o un volátil if corto eres pedante = P):
Servo myServo;
Por último, escriba el ángulo recibido dentro de la instrucción if de Serial.available() :
myServo.write(angle);
Si usted siguió a lo largo de la última etapa (o había compilado el ejemplo), debe tener un controlador servo basada en consola listo para ir!
Aquí está un video de nosotros todo el sistema de prueba. El alcance está controlando la forma de onda PWM de servo, Tim es introducir los números entre 0 y 176 en la consola de Mac y el Arduino es ajustar el ángulo de un servo:
Descripción del vídeo de YouTube:
"Una línea de comandos herramienta escrita en Objective-C para controlar la posición de un servomotor con interfaz serial y un Arduino Mega 2560 - el primer paso en mi proyecto del brazo robótico".
He conectado una copia del código Arduino-lado así que usted puede probar el transmisor y el receptor. El hardware es bastante sencillo, conectar el cable de señal del servo al pin de Arduino Mega 50 (usted puede cambiar esto), conecte el conector de tierra a masa de Arduino y conectar + 5V a una fuente de alimentación externo con, su tierra también conectado a Arduino de tierra. Es imprescindible que uses una fuente externa como las corrientes dibujadas por un servo pueden causar el Arduino a una baja de voltaje o se comportan erráticamente.