O placa Arduino Leonardo é mais uma da (grande) família Arduino. Neste post, vamos usar a placa Arduino Leonardo para emular um teclado e um mouse, ou seja, você poderá controlar e enviar comandos para o seu computador usando este projeto.

O Arduino Leonardo funciona da mesma maneira que as outras placas Arduino, mas tem uma funcionalidade adicional que vamos abordar nesse post, que é a possibilidade de utilizá-lo como se fosse um mouse ou um teclado.
A placa Arduino Leonardo
A placa utiliza o microcontrolador ATmega32u4 com comunicação USB embutida, o que dispensa o uso de circuitos auxiliares para comunicação. Essa placa possui 20 pinos de entrada/saída, sendo que 7 podem ser usados como saídas PWM, e 12 como portas analógicas. O clock é de 16 Mhz.
Fisicamente, o Arduino Leonardo tem as mesmas dimensões que o Arduino Uno, e os conectores também estão dispostos de forma semelhante: na parte de cima, as portas digitais de 0 a 13, e os pinos GND, AREF, SDA e SCL. Na parte de baixo, as portas analógicas de 0 a 5 e os pinos de RESET, GND, 5v e 3.3v:
Para conexão ao computador é utilizado um cabo micro-usb e a instalação no Windows não exigiu a utilização de nenhum driver específico. Ao conectar o cabo, foram detectados três dispositivos: o Arduino Leonardo na porta serial COM13, o USB Composite Device e o USB Input Device:
Finalizada a instalação da placa, a utilização é igual à de outras placas Arduino: carregue a IDE, e no menu Ferramentas => Placas selecione Arduino Leonardo. Em Ferramentas => Porta Serial, selecione a porta serial detectada no momento da instalação da placa (no nosso caso, COM13).
Para demonstrar a capacidade do Leonardo em ser utilizado como um teclado e um mouse, vamos montar um circuito composto por um push-button (será o nosso teclado), que vai enviar uma sequência de caracteres para o computador, e também um módulo joystick (o nosso mouse), que vai determinar o movimento do cursor na tela do computador:
No programa que vai controlar tudo isso (baseado no programa original do site oficial do Arduino), veremos novos comandos como o Keyboard.begin() e o Mouse.begin().
Programa Arduino Leonardo teclado e mouse
O Keyboard.begin() é o comando que inicia a emulação do teclado no Leonardo, ou seja, diz para a placa que a partir daquele momento ela pode se comportar como um teclado e enviar caracteres ao computador.
O Mouse.begin() faz a mesma coisa, mas com as funções de mouse. No programa, vamos ler as informações recebidas do joystick pelas portas A1 (eixo X) e A2 (eixo Y), e movimentar o cursor na tela do computador.
O push-button ligado à porta 7, cada vez que é acionado, executa o comando
Keyboard.println(“Arduino e Cia !”)
e envia a sequência de caracteres para o computador como se fosse um teclado. Você pode testar isso utilizando qualquer programa de edição de texto, como por exemplo o Bloco de Notas (notepad).
//Programa: Teclado e Mouse com o Arduino Leonardo
//Alteracoes e adaptacoes: Arduino e Cia
//Pino do push-button
int botao_msg = 7;
//Armazena estado do push-button
int previousButtonState = HIGH;
const int xAxis = A1; //Pino entrada eixo X
const int yAxis = A2; //Pino entrada eixo Y
int range = 2; // output range of X or Y movement
int responseDelay = 2; // response delay of the mouse, in ms
int threshold = range/4; // resting threshold
int center = range/2; // resting position value
int minima[] = {
1023, 1023}; // actual analogRead minima for {x, y}
int maxima[] = {
0,0}; // actual analogRead maxima for {x, y}
int axis[] = {
xAxis, yAxis}; // pin numbers for {x, y}
int mouseReading[2]; // final mouse readings for {x, y}
void setup()
{
pinMode(botao_msg, INPUT);
//Inicializa teclado
Keyboard.begin();
//Inicializa mouse
Mouse.begin();
}
void loop()
{
//Checa se o push-button foi pressionado
int valor = digitalRead(botao_msg);
if ((valor != previousButtonState) && (valor == LOW))
{
Keyboard.println("Arduino e Cia !");
}
//Salva o estado do botao para comparacao no proximo loop
previousButtonState = valor;
// read and scale the two axes:
int xReading = readAxis(0);
int yReading = readAxis(1);
// move the mouse:
Mouse.move(xReading, yReading, 0);
delay(responseDelay);
}
/*
reads an axis (0 or 1 for x or y) and scales the
analog input range to a range from 0 to <range>
*/
int readAxis(int axisNumber)
{
int distance = 0; // distance from center of the output range
// read the analog input:
int reading = analogRead(axis[axisNumber]);
// of the current reading exceeds the max or min for this axis,
// reset the max or min:
if (reading < minima[axisNumber]) {
minima[axisNumber] = reading;
}
if (reading > maxima[axisNumber]) {
maxima[axisNumber] = reading;
}
// map the reading from the analog input range to the output range:
reading = map(reading, minima[axisNumber], maxima[axisNumber], 0, range);
// if the output reading is outside from the
// rest position threshold, use it:
if (abs(reading - center) > threshold) {
distance = (reading - center);
}
// the Y axis needs to be inverted in order to
// map the movemment correctly:
if (axisNumber == 1) {
distance = -distance;
}
// return the distance for this axis:
return distance;
}
Uma relação completa dos comandos de teclado e mouse que você pode utilizar no Arduino Leonardo estão na página oficial do Arduino. Acesse esta página com os comandos do teclado e esta página com os comandos do mouse.
Abaixo você confere um vídeo do circuito em funcionamento:
Por último, uma observação sobre as funcionalidades de teclado e mouse do Arduino Leonardo. Funções como Mouse.move() e Keyboard.print() enviarão comandos diretamente para o seu computador, e isso pode dificultar um pouco a operação se por acaso algum comando errado for executado. O cursor do seu mouse, por exemplo, pode ficar em algum canto da tela, ou se mover de forma estranha.
Para evitar isso, é recomendável incluir no programa algum tipo de chave para que você possa ligar e desligar essas funções, utilizando-se dos comandos Mouse.begin(), Mouse.end() e Keyboard.begin() e Keyboard.end().
Gostou? Confira também este outro post onde ensino a usar o Arduino Leonardo para controlar o microfone do Google Meet!