Galera, sou novo em arduino, já pesquisei muito, e estou tentando desenvolver um código para uma tensão externa entre 0 e 5 volts acionar as portas analogicas do arduino uno R3 emular uma tecla de função ou enter no teclado, porem, com uma variavél, se um dos pinos estiver energizado, não aceita os comandos dos outros pinos. aguem poderia me dar uma ideia de como fazer?

Exibições: 602

Responder esta

Respostas a este tópico

Você tem "botões" ou "teclas" que, ao apertarem, energizam portas do Arduino. (Não há necessidade de uma fonte externa, você pode suar o próprio Arduino para isto.)

Você quer detectar qual tecla foi pressionada e, enquanto ela for mantida pressionada, realizar algo e ignorar caso outra seja pressionada ?

Seria isso ?  Se não, poderia dar um exemplo mais detalhado ?

Tenho "botões" em uma mesa de som que pressionados liberam 5 v (corrente externa) que acende um led, o led fica acesso mas a corrente corta, ai quero fazer o Arduíno ao receber essa corrente, entender que precisa apertar uma tecla (ex: F2, F3). Mas só quero que o Arduino faça isso se houver tensão em outro pino, que vai informar quando ele pode ou não apertar essa tecla.

Nesse seu caso, pode usar as portas digitais, não necessariamente precisa ser as portas analógicas, pois só vai detectar ligado e desligado.

Como vai usar uma fonte de energia externa, mesmo ela sendo 5V eu indico usar optoacopladores para prevenir possíveis problemas.

A questão dele acionar a tecla apenas quando um determinado pino estiver ligado é questão de software, depois é claro de ter todos os pinos de entrada conectados ao arduino através do optoacopladores.

então André, o que acontece é que as tensões variam de acordo com o volume no canal, então o Arduíno teria que ler entre 1 e 5 volts, por isso as usar as portas analógicas. Já a tensão referencia para executar ou não as demais funções, essa sim pode ser usada na porta digital porque ela é constante de 5 volts. Não estou achando o código fazer o Arduíno entender que as portas analógicas receberam tensão e passar isso como uma tecla de teclado de PC.

então André, o que acontece é que as tensões variam de acordo com o volume no canal, então o Arduíno teria que ler entre 1 e 5 volts, por isso as usar as portas analógicas. Já a tensão referencia para executar ou não as demais funções, essa sim pode ser usada na porta digital porque ela é constante de 5 volts. Não estou achando o código fazer o Arduíno entender que as portas analógicas receberam tensão. 

  Entendi. Se você tem certeza que a tensão não ultrapassa os 5V, então pode ligar diretamente na porta analógica do arduino.

  Use como referência o próprio código de exemplo do arduino (AnalogReadSerial), onde ele lê a porta analógica com uma tensão variando de 0 a 5V e retorna um número inteiro de 0 a 1023. Depois é só fazer a correspondência, pode exemplo, para um tensão de 1V, fazendo uma simples regra de três, o número inteiro será aproximadamente 205. Então se a entrada for maior que 205 quer dizer que terá mais de 1V.

  Abaixo um trecho do código, eu excliu a parte de exibir o valor no monitor serial por não ser necessário, mas para começar a usar pode usar o monitor serial como referência para te ajudar nos valores lidos.

void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
}

Essa parte eu entendi André, a duvida agora é traduzir isso para as  teclas do PC? não sei como interligar com a função Keyboard.press();

Bom, nesse caso eu também não sei. Nunca usei essa função.

Como você está se comunicando com o PC? Qual o meio de comunicação que você usa para que a informação saia do Arduino e chegue no PC? Cabo USB-Serial, Wifi, Bluetooth?

Estou querendo usar o cabo USB do arduino, como se o arduino fosse o próprio teclado, e entendesse a tensão de entrada em cada pino analógico como sendo uma tecla pressionada.

tá, mas vamos por partes.... 

1) No Arduino faça o programa que leia a sua(s) entrada(s) analógica(s) e jogue o valor lido na serial do Arduino;

2) No PC, que não tem nada a ver com o Arduino, se eu fosse você faria a comunicação usando Wifi (caso esteja disponível), pois para criar um programa a partir daí já tem muita coisa pronta. Por exemplo com Delphi, tem progrmas prontinhos (eu sei que é uma linguagem pouco usual nos dias de hoje, mas eu ainda uso Delphi pra caramba e consigo fazer de tudo). Claro que você tem C++, C#, Java, Python e mais um montem de outras linguagens, mas você precisa ver o que vai ser mais fácil para você;

3) No Windows, após criado o programa que recebe os dados do Arduíno, procure informações sobre "Windows Messages". Aqui tem uma lista:
https://wiki.winehq.org/List_Of_Windows_Messages
Por meio dessas "mesagens" de baixo nível do Windows você poderá emular o pressionamento de teclas, tal como se o usuário estivesse pressionando mesmo um tecla tal como você disse que queria.

Poste aí os códigos a medida que você for desenvolvendo, pois o pessoal do forum vai te ajudar a concluir. Mas sem nenhum código feito por você, já adianto que vai ser difícil a galera te ajudar.

boa noite Luis.

      Você mencionou o uso da função "Keyboard.press". O uso desta função (e de outras da LIB correspondente) é muito simples, e facilmente vc traduziria suas "teclas analógicas" (vou chamar assim o hardware que vc descreveu), para acionamento direto no PC (provavelmente Windows).

      No entanto pode haver um grande obstáculo: isto só é possível em versões específicas do Arduino, como por exemplo o Arduino Leonardo, que tomarei como referência para explicar o porquê.

      Para que um dispositivo USB apareça para o PC como um Teclado (ou mesmo um Mouse), ele deve implementar uma Interface HID da Especificação USB. Quando vc conecta um dispositivo USB, ele informa ao HOST (PC, Android, MAC, etc), quem ele é e quais Interfaces ele implementa (um dispositivo pode implementar diversas Interfaces, inclusive simultaneamente). No caso, quando um dispositivo implementa uma Interface HID, ele pode se apresentar como da classe "USB Input Device", e neste caso poderá funcionar exatamente como um teclado, enviando para o HOST, eventuais acionamentos de teclas. Observe que isto é completamente independente do Arduino, e tem a ver única e exclusivamente com a Especificação USB.

      Ocorre que uma coisa a mais ainda é necessária para que um dispositivo funcione como um Teclado USB:  ele deve carregar um "Driver" no HOST, exatamente como qualquer Hardware faz (por exemplo o Driver de uma Impressora). É este "Driver" que se comunica com o Hardware do Teclado via USB, através de comandos específicos da Interface HID, e quando recebe a informação do acionamento de uma tecla, este "Driver" direciona isto ao Sistema Operacional (por exemplo Windows), o que por sua vez direciona a informação ao Aplicativo executando atualmente (por exemplo Word, Google Chrome, etc). Um Fabricante de teclado USB, poderia fazer seu próprio "Driver", e assim acrescentar "features" que ele ache conveniente, e isso é relativamente comum (como ocorre com "Teclados Gamers" os quais sempre tem um "Driver" próprio).

      Mas a maioria dos teclados existentes no mercado, acabam usando um "Driver padrão", já existente no próprio Sistema Operacional. Isto é extremamente vantajoso, já que unifica o mundo dos teclados, e facilita tanto a vida do Fabricante como do próprio usuário final.

      Agora vamos ao Arduino, e tomemos o "UNO" como referência. Ora, ele tem um conector USB, através do qual conectamos ao PC, e através do qual também fazemos toda a programação do próprio Arduino. Pois é aí que os problemas começam para seu caso Luis, pois para que o Arduino possa ser acessado e programado como todo mundo faz, ele aparece ao HOST (o PC), como uma Interface Serial (a famosa "Porta COM"), ou seja uma "Interface Serial Assíncrona clássica", que tem propósito muito mais geral que um Teclado. E obviamente vc já deve ter sacado: quando vc conecta o Arduino no HOST, este último carrega o "Driver" de uma Interface Serial ("Porta COM"), e é este "Driver" que faz a comunicação com o Arduino (permitindo vc fazer tudo que faz no PC e Arduino conectados um ao outro via USB).

      Ou seja Luis: quando o UNO é conectado ao PC, não é o "Driver" de um "Teclado USB" que é carregado, mas sim o "Driver" de uma "Porta COM" USB. E as duas coisas são completamente diferentes. E conforme a Especificação USB determina, somente um "Driver" pode ser carregado no HOST para fazer a Interface com o dispositivo USB.

      Aqui é onde entram algumas versões "especiais"  do Arduino: além da Interface Serial clássica (a "Porta COM"), elas implementam também a Interface HID para um Teclado USB (ou Mouse), e assim podem fazer as duas coisas: permitir que um Programa (Sketch) seja carregado no Arduino, e também "emular" um Teclado ou Mouse USB. Obviamente que é preciso um "Driver" específico, que permita ao Arduino funcionar com essas duas "facetas", e claro, se vc tiver a IDE do Arduino instalada no seu PC, então ela já proverá este "Driver" automaticamente (que é instalado quando se instalou a IDE do Arduino). Você pode ver no log do Windows após instalado o Arduino Leonardo, e confirmar a instalação de um "Driver" capaz de emular tanto a "Porta COM" (a Serial do Arduino) como a Interface do Teclado (chamada no USB de "Input Device"), mostrado na figura a seguir (marquei em verde e rosa na figura):

      Logo se vc está usando por exemplo o Arduino Leonardo, então terá como usar o "Keyboard.press", o qual permitirá vc enviar códigos de acionamento de teclas (assim como outras funções também disponíveis, veja: Arduino Keyboard) diretamente ao Sistema Operacional (Windows, por exemplo) , via o próprio USB onde o Arduino está conectado.

      Como eu disse antes, o mapeamento do seu "teclado analógico" para o envio do acionamento de uma tecla, através do "Keyboard.press", é quase direto,  bastando simplesmente escrever uma função (muito simples também) para isto.

      Eu não perguntei no início Luis, qual Arduino vc está usando. Se estiver usando algo como o Leonardo, então será tranquilo vc implementar seu Sistema.

      Uma coisa interessante: poderíamos forçar no Windows, o uso do Driver do Leonardo, para um Arduino UNO. Porém devido às diferenças de Hardware entre as placas do UNO e Leonardo, haveria problemas de funcionamento (inclusive também devido às diferenças de mapeamento de memória no código).

      Espero ter colaborado de alguma forma.

      Abrçs,

      Elcids

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço