Paso 4: Programando el microcontrolador
La baratija es un lindo poco empaquetado para microcontrolador ATiny85 que equipo de Ladyada batida para arriba y encaja perfectamente en este proyecto debido a su diminuto tamaño y servo apoyo de biblioteca.
Hay algunas instrucciones especiales para configurar el Abalorio para programación que puedes encontrar en Ladyada'.
La importante biblioteca de baratija Servo también se puede encontrar en Ladyada'.
El código que estoy usando actualmente es muy sencillo, cuando el pin de baratija DIO #1 va alto acciona vueltas 20 degees las agujas del reloj y cuando DIO #1 pin bajo va el servo va 20 grados hacia la izquierda.
Código se deriva de Adafruit código de ejemplo:
/*******************************************************************
SoftServo boceto de baratija de Adafruit.Es necesaria la librería Adafruit_SoftServo
disponible en https://github.com/adafruit/Adafruit_SoftServo
La biblioteca de servo estándar IDE de Arduino no funciona con 8 bits
Microcontroladores AVR como baratija y Gemma debido a las diferencias
en temporizador hardware y programación. Nosotros simplemente actualizar
por piggy-backing en el timer0 millis() contadorComo escrito, esto es específicamente para la baratija aunque debe
ser Gemma u otros tableros (Arduino Uno, etc.) con asignaciones de pin correctoBaratija: USB + Gnd Pin Pin #0 #2 A1
Conexión: Servo + - limpiador Servo1 potenciómetro*******************************************************************/
#include / / SoftwareServo (obras pines PWM no)
#define SERVO1PIN 0 / / Servo control de línea (naranja) en baratija Pin #0
MyServo1 de Adafruit_SoftServo; crear objeto servo
void setup() {}
Configurar la interrupción que refrescará el servo para nosotros automágicamente
pinMode (1, entrada);
OCR0A = 0XAF; cualquier número de
TIMSK | = _BV(OCIE0A); Encienda la interrupción compara (abajo!)myServo1.attach(SERVO1PIN); Conecte el servo para pin 0 en la baratija
myServo1.write(150); Dile servo para ir a la posición por capricho
Delay(15); Espera 15ms para el servo a la posición
}void loop() {}
Si (digitalRead(1) == 1)
{
myServo1.write(170); Dile el servo a la posición
}
otra cosa
{
myServo1.write(150);
}\
Delay(15); espera 15ms para el servo a la posición
}Tomaremos ventaja de la construcción en millis() temporizador que apaga
para hacer un seguimiento de tiempo y refrescar el servo cada 20 milisegundos
La función SIGNAL(TIMER0_COMPA_vect) es la interrupción que se
Llamado por el microcontrolador cada 2 milisegundos
volátiles uint8_t contador = 0;
{Signal(TIMER0_COMPA_vect)}
Esto se llama cada 2 milisegundos
contador += 2;
cada 20 milisegundos, actualizar los servos!
Si (contador > = 20) {}
Contador = 0;
myServo1.refresh();
}
}