Controle remoto via bluetooth HC 05 por arduino via serial

Olá pessoal, estou com um projeto de controle remoto via Bluetooth ligando 2 arduinos.

Estou utilizando:

2 Bluetooths HC 05
1 Arduino Uno
1 Arduino Micro

Bem, no arduino Uno estou usando ele como transmissor de dados (No caso o controle remoto) e no arduino Micro estou usando ele como receptor de dados. Ambos possuem um bluetooth pareados e configurados (Bluetooth Mestre no arduino Uno e Bluetooth Escravo no arduino Micro).

No arduino Uno (transmissor) esta assim:

#include <SoftwareSerial.h>

void setup() {

pinMode(6,INPUT_PULLUP);
pinMode(7,INPUT_PULLUP);

Serial.begin(9600);

}

void loop(){

** if(!digitalRead(6)){**

** delay(37);**
** Serial.print("A");**

** }**

** if(!digitalRead(7)) {**

** delay(37);**

** Serial.print("B");**
}

}


No arduino Micro (receptor) esta assim:

#include <SoftwareSerial.h>

void setup(){
Serial1.begin(9600);
Serial.begin(9600);

Keyboard.begin();
}

void loop(){
if (Serial1.available() > 0) {

char myData = Serial1.read();
Keyboard.write(myData);

}
}

Bem, as conexões estão funcionando. Eu consigo enviar para o computador os caracteres A e B (conforme Sketch do arduino transmissor), porém, eu gostaria muito de melhorar o VOID LOOP do meu arduino transmissor.

Apesar de tudo funcionar corretamente, eu preciso que a VELOCIDADE DA TAXA DE ENVIO DE CARACTERES seja exatamente igual a velocidade padrão que temos nos nossos teclados independentemente do sistema operacional. Porém, a velocidade SERIAL do arduino é uma padrão que precisa ser ajustado.

O que já tentei até o momento:

1º Alterar o Delay do transmissor ou retirar o mesmo
2º Já modifiquei as velocidades e tentei todas as velocidades seriais possiveis desde 300,....até 115200
3º Já alterei a velocidade do Bluetooth HC 05 com comandos AT desde 300,...até 115200

Se eu conseguir ajustar a velocidade serial para que se iguale a mesma taxa de repetição de caracteres do windows apenas do arduino transmissor sem precisar conectar com o outro está de ótimo tamanho.

:slight_smile:

O que é o "Keyboard" do receptor?
Os delay do programa do transmissor para que servem?
Qual é a taxa os teclados?
Para que serve a linha:

   Serial.begin(9600);

no programa do receptor?

Não usar a função digitalRead será bastante interessante...
Tirar os delays é boa prática de programação... aliás, não percebo de onde vem o delay(37)...

Como sabes que não é a comunicação bluetooth que está a atrasar tudo?
Já experimentaste tirar os módulos bluetooth e experimentar sem eles para ver o que acontece?

luisilva:
O que é o "Keyboard" do receptor?
Os delay do programa do transmissor para que servem?
Qual é a taxa os teclados?
Para que serve a linha:

   Serial.begin(9600);

no programa do receptor?

O Keyboard serve para digitar o valor A e B no computador. e o Serial.Begin é a velocidade de trasmissão, no caso eu estou usando a velocidade padrão apesar de ter testado com outros valores tbm.

Mas a parte do receptor não importa tando em relação a questão, pois usando o um arduino apenas sem conexões não consigo chegar a mesma taxa de velocidade de repetição de caracteres quando abro o serial monitor.

E a taxa de repetição do teclado é dificil falar o numero, pois é testando no serial monitor para ver se iguala em teste.

bubulindo:
Não usar a função digitalRead será bastante interessante...
Tirar os delays é boa prática de programação... aliás, não percebo de onde vem o delay(37)...

Como sabes que não é a comunicação bluetooth que está a atrasar tudo?
Já experimentaste tirar os módulos bluetooth e experimentar sem eles para ver o que acontece?

Os delays são uns atrasos pequenos para tentar simular a velocidade da taxa de repetição de caracteres, porém sem sucesso, já tentei sem os delays e com os delays . Quando tiro os delays a velocidade fica Hiper rápida e com delay não consigo nem simular a velocidade de transmissão.

Mas já tentei sem os bluetooths sim.

Desculpa, mas se calhar tens de explicar o que pretendes...

Sem delays fica rápido, com delay não funciona... afinal o que pretendes? Podes explicar?

bubulindo:
Desculpa, mas se calhar tens de explicar o que pretendes...

Sem delays fica rápido, com delay não funciona... afinal o que pretendes? Podes explicar?

É uma manete sem fio, consigo enviar a serial, porem nao consigo regular...quando vou jogar não consigo mover ou direcionar perfeitamente como no teclado.

E exactamente o que é que vês que não funciona?

fabio_h:
Debounced buttons with auto-repeat in AVR C++ | Andys Workshop

YouTube

Fabio, muito obrigado, matou a charada. Consegui configurar conferindo essa dica.

Valeu pela ajuda. Obrigado de verdade.