Repetir comando só se outro comando for acionado antes

Fala galera, boa noite! Estou usando um Arduino Leonardo para executar alguns teclas função do windows ao receber comandos externos. Fiz a seguinte programação:

#include <Keyboard.h>

void setup() {
pinMode(9,INPUT_PULLUP);
pinMode(10,INPUT_PULLUP);
pinMode(11,INPUT_PULLUP);
}

void loop() {

Keyboard.begin();

if (digitalRead(9) == 0){
Keyboard.press(0xC2);
delay(200);
Keyboard.releaseAll();}

if (digitalRead(10) == 0){
Keyboard.press(0xC3);
delay(200);
Keyboard.releaseAll();}

if (digitalRead(11) == 0){
Keyboard.press(0xC4);
delay(200);
Keyboard.releaseAll();}

Keyboard.end();
}

O que eu precisava implementar ai é o seguinte, que um dos comandos só fosse executado se outro for executado antes. Pra ser mais didático:

  • acionou pino 9 clicou F5;
  • acionou pino 9 de novo só clica F5 depois que acionar o pino 10;
  • acionou pino 10 clicou F6;
  • acionou pino 10 de novo só clicou F6 depois que acionar o pino 9, ou 11;

Mesmo tendo acionamento varias vezes só se repita o comando depois de acionar outro pino,tipo um rodizio!

E se não for aproveitar muito da bondade, teria como o Arduíno entender que um programa X está na tela do windows ai executar os comandos, se o programa for minimizado por exemplo, mesmo que acionado os pinos, ele não gere o comando?

Será que alguém consegue me dar um help? Sou bem iniciante em programação de Arduíno, desde já agradeço!

Exibições: 44

Responder esta

Respostas a este tópico

Olá Eduardo, tudo bem?

Antes de mais nada, eu recomendo que você poste o código num .ino, ao invés de colocar no post, pois desta forma fica muito ruim.

Quanto a sua questão, inicialmente, o que você quer é criar uma condição para uma condição. Um novo IF com uma chave resolve.

Como não conheço seu projeto, só posso emitir opinião pelo que você informou.

Eduardo, você pode tentar usar flags, por exemplo:
int flag = 0;

f (digitalRead(9) == 0) && flag == 0{
Keyboard.press(0xC2);

flag = 1;
delay(200);
Keyboard.releaseAll();}

if (digitalRead(10) == 0 && flag == 1){
Keyboard.press(0xC3);

flag = 2
delay(200);

................................ Dessa forma você você executa o comando só se executar outro antes, mas acho que o seu programa seria diferente desse que postei, é apenas um exemplo.

Acho que seria mais fácil criar um botão no seu programa para ele não receber os comandos do que apenas minimizar.

RSS

© 2021   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço