Repetir comando só se outro comando for acionado antes

1. Repetir comando só se outro comando for acionado antes

Luis Eduardo Frigerio
ledufree

(usa Deepin)

Enviado em 24/04/2021 - 23:32h

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!


  


2. Re: Repetir comando só se outro comando for acionado antes

Samuel Leonardo
SamL

(usa XUbuntu)

Enviado em 25/04/2021 - 02:11h

Isso se resolve com uma máquina de estados.
Já to cansado de falar disso e quase ninguém dar atenção ao que eu digo hahaha

Máqunas de estados seria como os tijolos da computação, não apenas programação.
Pelo que eu pude observar, você pode usar uma variável representando o estado do pino (0=desligado, 1=acionado). Então, você cria uma máquina de estados pra fazer cada coisa conforme o estado atual do pino. Eu acho bem simples de fazer, porém, não mexo com arduino. Também não precisa usar máquina de estados pra isso, até um código feioso você consegue fazer isso, basta usar structs como essa abaixo:
struct Pino {int estado;} 


Então, você cria um vetor de pinos e inicia o estado de cada um como 0 (desligado), dai quando um deles fo racionado ou desligado, você atualiza o estado do pino tal. Depois disso, você precisa criar uma função pra executar cada ação conforme o estado dos pinos,exemplo: se pino[9].estado == 1 && pino[10].estado == 0 faça tal coisa.

É apenas um problema de lógica simples. Experimente escrever os passos que você imagina como seriam.


____________________________________________
https://nerdki.blogspot.com/ acessa aí vai lá, é grátis!
Capeta (demo) do meu trabalho:
https://github.com/cpusam



3. Re: Repetir comando só se outro comando for acionado antes

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 25/04/2021 - 17:56h


ledufree escreveu:

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!

Boa tarde,.
Mexi com arduino, somente 1 vez, e, muito rápido, pouco sei sobre a programação do mesmo....
Mas, segue uma dica genérica:

Crie uma variável, exemplo: pinoacionado="000"
Para cada "pino", defina um valor,
Tipo: p09, p10, p11

Ao acionar um pino,
cheque se o "valor do pino" é igual a "pinoacionado"

Simulação:
pinoacionado='"000";
valor_Pino09="p09";
valor_Pino10="p10";
valor_Pino11="p11";
-------------------------
Primeira execução, executa, pinoacionado=000
1º pino acionado:
p10
if(valor_Pino10 != pinoacionado){
pinoacionado=valor_Pino10
executa o código
}else
nao executa
}

Se pressionar p10 novamente....
Código não é executado, pois,
o valor de pinoacionado="p10"

Acionando qquer outro pino,
o código é executado.

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

-----------------------------
Deve funcionar......

______________________________________________________________________
Importante: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p'
Att.: Marcelo Oliver
______________________________________________________________________
Nota de esclarecimento:
O comando: lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p',
faz parte da minha assinatura.
O qual, "filtra" a página: "https://www.vivaolinux.com.br/termos-de-uso/",
Mostrando o seguinte:

Se você sanou sua dúvida ou resolveu um problema a partir de um
tópico criado, é extremamente recomendável que acesse o tópico e
marque-o como "RESOLVIDO". E mais recomendável ainda que você eleja
como melhor resposta a que mais lhe ajudou.


______________________________________________________________________







Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts