Como juntar dois códigos de maneira correta no arduino leonardo?

Boa noite.

Estou montando uma buttonbox e configurando os botões por partes. Agora tentei juntar as duas prograções, mas a segunda faz a primeira parar de funcionar. Separadamente, ambas se executam sem erro. Acredito que eu esteja colocando no lugar errado, mas não sei como resolver. Se puderem me ajudar, agradeço.

A primeira programação:

#include <Keypad.h>
#include <Keyboard.h>

#define linhas 5
#define colunas 4
char mapaTeclas[5][4]={{'a','b','c','d'},{'e','f','h','i'},{'j','k','l','m'},{'n','o','p','q'},{'r','s','t','u'}};
byte pinos_linha[linhas]={2,3,4,5,6};
byte pinos_coluna[colunas]={7,8,9,10};

Keypad teclado=Keypad(makeKeymap(mapaTeclas),pinos_linha,pinos_coluna,linhas,colunas);

void setup() {

Keyboard.begin();
} 

void loop() {

char tecla=teclado.getKey();
if(tecla != NO_KEY){
Keyboard.press(tecla);
delay(100);
Keyboard.release(tecla);
}
}

A segunda programação:

#include <Keyboard.h>
char ctrlKey = KEY_LEFT_SHIFT;

void setup() {

  pinMode(11, INPUT_PULLUP);
  Keyboard.begin();
}

void loop() {
 
while (digitalRead(11) == HIGH) {
  }
  Keyboard.press(KEY_LEFT_SHIFT);
  delay(500);
  Keyboard.press('g');
  delay(100);
  Keyboard.releaseAll();
}

Olá! Bem vindo ao Fórum!

Você não mostrou a sua versão dos dois programas juntos e eu nunca fiz um projeto que usasse teclados matriciais. Mas, eu suponho que a sua intenção seja acrescentar a tecla 'g' ao primeiro programa. Se for isso, você vai precisar reorganizar a matriz das teclas.

Atualmente você tem 5 conjuntos de 4 teclas, que resultam em 20 teclas possíveis. Agora você quer ter 21. Então há duas opções: ou 7 conjuntos de 3 teclas, ou 3 conjuntos de 7 teclas. Essa nova combinação terá que se refletir nessas 5 linhas do seu programa:

Em teoria isso deve funcionar sem precisar mexer no resto do programa.

Obrigado por responder.
No projeto, não é simplesmente acrescentar a letra "g". Eu preciso de um botão à parte da matriz e que simule o pressionar de duas teclas, o atalho SHIFT + G. Minha é se eu coloquei o segundo código no lugar errado ou se não é possível juntar os dois por algum motivo.

Os códigos juntos:

#include <Keypad.h>
#include <Keyboard.h>

#define linhas 5
#define colunas 4
char mapaTeclas[5][4]={{'a','b','c','d'},{'e','f','h','i'},{'j','k','l','m'},{'n','o','p','q'},{'r','s','t','u'}};
byte pinos_linha[linhas]={2,3,4,5,6};
byte pinos_coluna[colunas]={7,8,9,10};

Keypad teclado=Keypad(makeKeymap(mapaTeclas),pinos_linha,pinos_coluna,linhas,colunas);

char ctrlKey = KEY_LEFT_SHIFT;

void setup() {

pinMode(11, INPUT_PULLUP);
Keyboard.begin();
} 

void loop() {

char tecla=teclado.getKey();
if(tecla != NO_KEY){
Keyboard.press(tecla);
delay(100);
Keyboard.release(tecla);
}

while (digitalRead(11) == HIGH) {
  }
  Keyboard.press(KEY_LEFT_SHIFT);
  delay(500);
  Keyboard.press('g');
  delay(100);
  Keyboard.releaseAll();

}

Obs: Esse código é compilado normalmente. Mas a matriz para de funcionar e só o botão do atalho SHIFT + G funciona sem problemas.

Não sei se é só isso, mas seu código tem uma "}" no lugar errado. Veja aqui:

Eu não sei se a sua intenção é usar o while mesmo... a ideia é ficar repetindo o envio dos comandos enquanto o botão estiver apertado ou enviar uma vez quando o botão for apertado?

A ideia é enviar o comando uma vez quando for apertado.
A "}" deveria ficar no final? Depois de Keyboard.releaseAll(); ?

Isso!

Então eu creio que é melhor usar o if() e não o while().

Outra pergunta: Como está conectado esse botão que está ligado no pino 11? Entre o pino e o GND?
Você configurou o pino 11 para o modo INPUT_PULLUP ou seja, o pino vai ler HIGH por padrão e LOW quando apertado (se estiver conectado como eu disse acima). Sendo assim, a lógica do seu programa deveria ser alterada. Veja se funciona assim:


#include <Keypad.h>
#include <Keyboard.h>

#define linhas 5
#define colunas 4
char mapaTeclas[5][4]={{'a','b','c','d'},{'e','f','h','i'},{'j','k','l','m'},{'n','o','p','q'},{'r','s','t','u'}};
byte pinos_linha[linhas]={2,3,4,5,6};
byte pinos_coluna[colunas]={7,8,9,10};

Keypad teclado=Keypad(makeKeymap(mapaTeclas),pinos_linha,pinos_coluna,linhas,colunas);

char ctrlKey = KEY_LEFT_SHIFT;

void setup() {

pinMode(11, INPUT_PULLUP);
Keyboard.begin();
} 

void loop() {

char tecla=teclado.getKey();
if(tecla != NO_KEY){
Keyboard.press(tecla);
delay(100);
Keyboard.release(tecla);
}

if (digitalRead(11) == LOW) {
  Keyboard.press(KEY_LEFT_SHIFT);
  delay(100);
  Keyboard.press('g');
  delay(50);
  Keyboard.releaseAll();
  }
}

Finalmente deu certo, muito obrigado. Eu já estava pra desistir kkkk. Sou novato nisso de arduino, e só quis me aventurar a fazer a buttonbox. Agora que funcionou até acrescentei outro botão com funcionalidade parecida. Novamente, muito obrigado pela atenção e solução.

Fico feliz! Marque o post #6 como solução para o tópico e divirta-se com seus projetos!