# Imprimir Estado da Porta

**URL:** <https://forum.fazedores.com/t/imprimir-estado-da-porta/8379>\
**Category:** Arduino\
**Created:** [Outubro 8, 2021, 3:50pm UTC](https://forum.fazedores.com/t/imprimir-estado-da-porta/8379 "2021-10-08T15:50:30Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![victorboratto](https://avatars.discourse-cdn.com/v4/letter/v/bbce88/32.png) [@victorboratto](https://forum.fazedores.com/u/victorboratto)\
**Post date:** [Outubro 8, 2021, 3:50pm UTC](https://forum.fazedores.com/t/imprimir-estado-da-porta/8379/1 "2021-10-08T15:50:30Z")

</div>

Boa tarde, pessoal. Sou novato nesse mundo e tenho um sistema e queria testar alguns botões digitais e mecânicos que ele possui.  
Meu objetivo é imprimir o estado daqueles botões (0V ou 5V) em um display LCD. Obviamente ele me retornaria o valor de 0 ou 1. Ele chega até mostrar valores de 0 ou 1, porém ao apertar/desapertar o botão o valor nao é alterado.  
O codigo está abaixo. (Ignorem a parte dos LEDS e BUZZER, pois funcionaram ok)  
Obrigado

///////CHAVE FIM DE CURSO //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
const int CFC\_UP\_46 = 46;  
int V\_CFC\_UP\_46 = 0 ;

const int CFC\_DOWN\_47 = 47;  
int V\_CFC\_DOWN\_47 = 0;

const int CFC\_ALT\_48 = 48;  
int V\_CFC\_ALT\_48 = 0;  
///////CHAVE FIM DE CURSO //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////TECLADO DIGITAL PAINEL /////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
const int TDP\_SOBE\_1\_38 = 38; //porta da tecla 1 de SOBE  
boolean V\_TDP\_SOBE\_1\_38 = true; //variavel da porta da tecla 1

const int TDP\_DESCE\_4\_37 = 37; //porta da tecla 4 de DESCE  
boolean V\_TDP\_DESCE\_4\_37 = true; //variavel da porta da tecla 4 de DESCE

const int TDP\_VOLTAGEM\_2\_39 = 39; //porta da tecla 2 VOLTAGEM  
int V\_TDP\_VOLTAGEM\_2\_39 = 0; //variavel da porta da tecla 2

const int TDP\_TEMPO\_5\_40 = 40; //porta da tecla 5 tecla TEMPO  
int V\_TDP\_TEMPO\_5\_40 = 0; //variavel da porta da tecla 5

const int TDP\_AGITACAO\_3\_41 = 41; //porta da tecla 3 AGITACAO  
boolean V\_TDP\_AGITACAO\_3\_41 = true; //variavel da porta da tecla 3

const int TDP\_PAUSA\_6\_42 = 42; //porta da tecla 6 RUNING\_PAUSED\_ENDED\_SETING  
boolean V\_TDP\_PAUSA\_6\_42 = true; //variavel da porta da tecla 6  
///////TECLADO DIGITAL PAINEL /////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////CHAVES MECÂNICAS PAINEL /////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
const int CMP\_UP\_43 = 43; //porta da chave UP  
boolean V\_CMP\_UP\_43 = true; //vairavel da chave UP

const int CMP\_DOWN\_44 = 44; //porta da chave DOWN  
boolean V\_CMP\_DOWN\_44 = true; //vairavel da chave DOWN

const int CMP\_PAUSE\_45 = 45; //porta da chave PAUSE  
boolean V\_CMP\_PAUSE\_45 = true; //variavel da porta da chave PAUSE  
///////CHAVES MECÂNICAS PAINEL /////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////BUZZER\_53 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
const int BUZZER\_53 = 53; //Porta 53 que será utilizada para o SINAL SONORO  
///////BUZZER\_53 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////LEDS /////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
int LED\_RGB\_G\_50 = 50;  
int LED\_RGB\_B\_51 = 51;

int LED\_GREEN\_52 = 52;  
///////////LEDS /////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////RELE MAGNETICO AGITAÇÃO ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
const int RMA\_22 = 22; // ventoinha de agitação magnético  
///////RELE MAGNETICO AGITAÇÃO ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////RELE DO ESTADO SOLIDO //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
const int RES\_49 = 49;  
///////RELE DO ESTADO SOLIDO //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////EASY DRIVER ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
int EASY\_DIRE\_23 = 23;

int EASY\_W\_STEP\_24 = 24;

int EASY\_MS1\_25 = 25;

int EASY\_ENABLE\_26 = 26;

int EASY\_MS2\_27 = 27;  
///////EASY DRIVER ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void setup()

{

///////AVISOS INICIAIS //////////////////////////////////////////////////////////////////////////////////////////////////////////  
///////AVISOS INICIAIS //////////////////////////////////////////////////////////////////////////////////////////////////////////

lcd.begin(16, 2);  
lcd.clear();  
lcd.setCursor(0,0);  
lcd.print(“Ola LAMS! “);  
lcd.setCursor(0,1);  
lcd.print(” Seja bem vindo!”);  
delay(100);  
lcd.setCursor(0,0);  
for (char k=0;k\<26;k++){  
lcd.scrollDisplayLeft();  
delay(50);  
}  
lcd.clear();  
lcd.setCursor(0,0);  
lcd.print(“Vamos extrair?”);  
delay(200);  
lcd.clear();

///////AVISOS INICIAIS //////////////////////////////////////////////////////////////////////////////////////////////////////////  
///////AVISOS INICIAIS //////////////////////////////////////////////////////////////////////////////////////////////////////////

///////EMCO 3 PWM /////////////////////////////////////////////////////////////////////////////////////////////////////////////  
pinMode (EMCO\_3,OUTPUT);  
///////EMCO 3 PWM ////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////CHAVE FIM DE CURSO //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
pinMode (CFC\_UP\_46, INPUT);  
pinMode (CFC\_DOWN\_47, INPUT);  
pinMode (CFC\_ALT\_48, INPUT);  
///////CHAVE FIM DE CURSO //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////TECLADO DIGITAL PAINEL///////////////////////////////////////////////////////////////////  
pinMode(TDP\_SOBE\_1\_38, INPUT);  
pinMode(TDP\_DESCE\_4\_37, INPUT);  
pinMode (TDP\_VOLTAGEM\_2\_39, INPUT);  
pinMode (TDP\_TEMPO\_5\_40, INPUT);  
pinMode (TDP\_AGITACAO\_3\_41, INPUT);  
pinMode (TDP\_PAUSA\_6\_42, INPUT);  
////////////////////////////////TECLADO DIGITAL PAINEL/////////////////////////////////////////////////////////////////////

///////CHAVES MECÂNICAS PAINEL /////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
pinMode(CMP\_UP\_43, INPUT);  
pinMode(CMP\_DOWN\_44, INPUT);  
pinMode(CMP\_PAUSE\_45, INPUT);  
///////CHAVES MECÂNICAS PAINEL /////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////BUZZER\_53 //////////////////////////////////////////////////////////////////////////////////////////////////////////////  
pinMode (BUZZER\_53, OUTPUT);  
///////BUZZER\_53 //////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////LEDS /////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
pinMode(LED\_RGB\_G\_50, OUTPUT);  
pinMode(LED\_RGB\_B\_51, OUTPUT);  
pinMode(LED\_GREEN\_52, OUTPUT);  
///////LEDS /////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////RELE MAGNETICO /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
pinMode (RMA\_22, OUTPUT);  
///////RELE MAGNETICO /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////RELE DO ESTADO SOLIDO //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////  
pinMode (RES\_49, OUTPUT);  
///////RELE DO ESTADO SOLIDO //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////EASY DRIVER ////////////////////////////////////////////////////////////////////////////////////////////////////////////  
pinMode (EASY\_DIRE\_23, OUTPUT);  
pinMode (EASY\_W\_STEP\_24, OUTPUT);  
pinMode (EASY\_MS1\_25, OUTPUT);  
pinMode (EASY\_ENABLE\_26, OUTPUT);  
pinMode (EASY\_MS2\_27, OUTPUT);  
///////EASY DRIVER ////////////////////////////////////////////////////////////////////////////////////////////////////////////

digitalWrite(BUZZER\_53, HIGH);//teste buzzer  
delay(500);  
digitalWrite(BUZZER\_53, LOW);  
delay(500);  
digitalWrite(BUZZER\_53, HIGH);  
delay(500);  
digitalWrite(BUZZER\_53, LOW);//teste buzzer

digitalWrite(LED\_RGB\_G\_50, HIGH);//Teste led rgb verde  
delay(500);  
digitalWrite(LED\_RGB\_G\_50, LOW);  
delay(500);  
digitalWrite(LED\_RGB\_G\_50, HIGH);  
delay(500);  
digitalWrite(LED\_RGB\_G\_50, LOW);//Teste led rgb verde

digitalWrite(LED\_RGB\_B\_51, HIGH);//Teste led rgb azul  
delay(500);  
digitalWrite(LED\_RGB\_B\_51, LOW);  
delay(500);  
digitalWrite(LED\_RGB\_B\_51, HIGH);  
delay(500);  
digitalWrite(LED\_RGB\_B\_51, LOW);//Teste led rgb azul

digitalWrite(LED\_GREEN\_52, HIGH);//Teste led rgb azul  
delay(500);  
digitalWrite(LED\_GREEN\_52, LOW);  
delay(500);  
digitalWrite(LED\_GREEN\_52, HIGH);  
delay(500);  
digitalWrite(LED\_GREEN\_52, LOW);//Teste led rgb azul

}

void loop()  
{  
V\_CFC\_UP\_46 = digitalRead (CFC\_UP\_46);  
//V\_CFC\_UP\_46 == CFC\_UP\_46;  
V\_CFC\_DOWN\_47 = digitalRead (CFC\_DOWN\_47);  
//V\_CFC\_DOWN\_47 == CFC\_DOWN\_47;  
V\_CFC\_ALT\_48 = digitalRead (CFC\_ALT\_48);  
//V\_CFC\_ALT\_48 == CFC\_ALT\_48;

V\_TDP\_SOBE\_1\_38 = digitalRead (TDP\_SOBE\_1\_38);  
//V\_TDP\_SOBE\_1\_38 == TDP\_SOBE\_1\_38;  
V\_TDP\_DESCE\_4\_37 = digitalRead (TDP\_DESCE\_4\_37);  
//V\_TDP\_DESCE\_4\_37 == TDP\_DESCE\_4\_37;  
V\_TDP\_VOLTAGEM\_2\_39 = digitalRead (TDP\_VOLTAGEM\_2\_39);  
//V\_TDP\_VOLTAGEM\_2\_39 == TDP\_VOLTAGEM\_2\_39;  
V\_TDP\_TEMPO\_5\_40 = digitalRead (TDP\_TEMPO\_5\_40);  
//V\_TDP\_TEMPO\_5\_40 == TDP\_TEMPO\_5\_40;  
V\_TDP\_AGITACAO\_3\_41 = digitalRead (TDP\_AGITACAO\_3\_41);  
//V\_TDP\_AGITACAO\_3\_41 = TDP\_AGITACAO\_3\_41;  
V\_TDP\_PAUSA\_6\_42 = digitalRead (TDP\_PAUSA\_6\_42);  
//V\_TDP\_PAUSA\_6\_42 == TDP\_PAUSA\_6\_42;

V\_CMP\_UP\_43 = digitalRead (CMP\_UP\_43);  
//V\_CMP\_UP\_43 == CMP\_UP\_43;  
V\_CMP\_DOWN\_44 = digitalRead (CMP\_DOWN\_44);  
//V\_CMP\_DOWN\_44 == CMP\_DOWN\_44;  
V\_CMP\_PAUSE\_45 = digitalRead (CMP\_PAUSE\_45);  
//V\_CMP\_PAUSE\_45 == CMP\_PAUSE\_45;

lcd.clear();

lcd.setCursor(0,0);//teste chave fim de curso UP  
lcd.print(V\_CFC\_UP\_46);  
lcd.setCursor(0,1);//teste chave fim de curso DOWN  
lcd.print(V\_CFC\_DOWN\_47);  
lcd.setCursor(2,0);//teste chave fim de curso ALT  
lcd.print(V\_CFC\_ALT\_48);

lcd.setCursor(2,1);//teste teclado digital painel SOBE\_1  
lcd.print(V\_TDP\_SOBE\_1\_38);  
lcd.setCursor(4,0);//teste teclado digital painel DESCE\_4  
lcd.print(V\_TDP\_DESCE\_4\_37);  
lcd.setCursor(4,1);//teste teclado digital painel VOLTAGEM\_2  
lcd.print(V\_TDP\_VOLTAGEM\_2\_39);  
lcd.setCursor(6,0);//teste teclado digital painel TEMPO\_5  
lcd.print(V\_TDP\_TEMPO\_5\_40);  
lcd.setCursor(6,1);//teste teclado digital painel AGITACAO\_3  
lcd.print(V\_TDP\_AGITACAO\_3\_41);  
lcd.setCursor(8,0);//teste teclado digital painel PAUSA\_6  
lcd.print(V\_TDP\_PAUSA\_6\_42);

lcd.setCursor(8,1);//teste chave mecanica painel UP  
lcd.print(V\_CMP\_UP\_43);  
lcd.setCursor(10,0);//teste chave mecanica painel DOWN  
lcd.print(V\_CMP\_DOWN\_44);  
lcd.setCursor(10,1);//teste chave mecanica painel PAUSE  
lcd.print(V\_CMP\_PAUSE\_45);

delay (1000);  
}

---

<div class="post-metadata">

**Author:** ![rogerbsp](https://avatars.discourse-cdn.com/v4/letter/r/b782af/32.png) [@rogerbsp](https://forum.fazedores.com/u/rogerbsp)\
**Post date:** [Outubro 13, 2021, 11:18am UTC](https://forum.fazedores.com/t/imprimir-estado-da-porta/8379/2 "2021-10-13T11:18:15Z")

</div>

Pela numeração das portas que vc está usando, presumo que esteja utilizando um Arduino mega.  
Para esse programa funcionar legal vc precisa basicamente de 2 alterações:  
1- Em vez de digitalRead utilize interrupção externa, pois assim evita de perder o exato momento que uma tecla é lida. Na forma que seu código está, ele só vai ler o estado da porta se o programa estiver na linha de leitura no exato momento que uma tecla for acionada, com interrupção externa não tem esse problema.

2- Utilize debounce para verificar se a tecla foi realmente acionada ou se não foi apenas ruído.

Sugiro ainda utilizar lógico negativa para as teclas, ou seja, acionar os pull UP das portas e considerar tecla acionada quando lido nível lógico zero.

Tenta aí depois nos diga como ficou.
