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:

#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

Postagens mais visitadas deste blog

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte III

Controle PID de Potência em Corrente Alternada - Arduino e TRIAC - Parte I

Dividindo um programa (sketch) do Arduino em mais de um arquivo