Trinket, o menor Arduino-like II
Para testar a nossa plaquinha (depois de rodar o Blink, claro), resolvi acionar um servo.
A lib de servo que vem com o Arduino não rola, porque o ATtiny não tem timer de 16 bits. Para "tocar" um servo precisamos então de uma outra lib, compatível. O povo da Adafruit fez uma, que vc pode baixar daqui. Essa lib tem um pequeno inconveniente: vc tem que chamar a rotina de refresh dela a intervalos de no máximo 20 milissegundos. Vamos analisar cá um exemplo. É o que vem com a lib, simplificado:
Ao rodar o programa, o servo alterna entre as três posições: 0, 90 e 180 graus.
Mole,. não? Nem vou fazer filminho... :)
A ideia foi mostrar que a plaquinha não faz feio mesmo em tarefas de automação. Dá prá controlar pelo menos mais um servo, simultãneamente.
A lib de servo que vem com o Arduino não rola, porque o ATtiny não tem timer de 16 bits. Para "tocar" um servo precisamos então de uma outra lib, compatível. O povo da Adafruit fez uma, que vc pode baixar daqui. Essa lib tem um pequeno inconveniente: vc tem que chamar a rotina de refresh dela a intervalos de no máximo 20 milissegundos. Vamos analisar cá um exemplo. É o que vem com a lib, simplificado:
#include <Adafruit_SoftServo.h>
#define SERVO1PIN 0
Adafruit_SoftServo myServo1;
void setup() {
// Seta a rotina de interrupção (ver depois do loop)
OCR0A = 0xAF;
TIMSK |= _BV(OCIE0A);
myServo1.attach(SERVO1PIN);
}
void loop() {
myServo1.write(0);
delay(2000);
myServo1.write(90);
delay(2000);
myServo1.write(180);
delay(2000);
}
// Essa rotina é chamada de 2 em 2ms, então ajustamos para chamá-la a cada 20ms.
SIGNAL(TIMER0_COMPA_vect) {
counter += 2;
if (counter >= 20) {
counter = 0;
myServo1.refresh();
digitalWrite(1,HIGH);
}
}
Ao rodar o programa, o servo alterna entre as três posições: 0, 90 e 180 graus.
Mole,. não? Nem vou fazer filminho... :)
A ideia foi mostrar que a plaquinha não faz feio mesmo em tarefas de automação. Dá prá controlar pelo menos mais um servo, simultãneamente.
Comentários
Postar um comentário