Site icon AranaCorp

Gerenciar um botão de pressão com o Arduino

0
(0)

Um exemplo muito comum quando se está aprendendo a programar com o Arduino é a gestão de um botão de pressão. De fato, uma das funções mais úteis a se desenvolver é poder interagir com a placa Arduino, e a interface mais minimalista que pode existir é um botão como entrada e o monitor serial como saída. Ademais, as funcionalidades que podem ser desenvolvidas com um botão de pressão podem ser aplicadas a muitos sensores (interruptor, sensor magnético, RFID, etc.). Veremos aqui algumas delas.

Material

Esquema de ligação

Há diferentes maneiras de ligar um botão à placa Arduino. A forma mais simples é ligá-lo entre a terra e uma entrada analógica do Arduino. Para garantir que a pressão do botão seja detectada corretamente, vamos adicionar um resistor pull-up disponível através do código. Assim, o estado será alto (1024) quando o botão for liberado, e baixo (0) quando o botão for pressionado.

Código básico

Neste exemplo, vamos detectar se o botão é pressionado ou não.

//Parameters 
const int btnPin  = A0; 
 
//Variables 
int btnVal  = 0; 

void setup(){ 
//Init Serial USB 
Serial.begin(9600); 
Serial.println(F("Initialize System")); 
//Init btn 
pinMode(btnPin,INPUT_PULLUP); 
} 

void loop() {
  ////Read pushbutton 
  btnVal=analogRead(btnPin); 
  Serial.print(btnVal); 
  Serial.print(F("-->")); 
  if(btnVal<200){ 
    Serial.println(F("Button is pressed")); 
  }else{ 
    Serial.println(F("Button is released")); 
  } 
  delay(100);
}

O código lê constantemente a entrada analógica e escreve “Button is pressed ou “Button is released”. Isso não é muito limpo nem fácil de “desbugar”.

Código para detecção do estado dos botões

Uma forma de melhorar o código é adicionando uma variável que registra o estado do botão. Isto permite que o resultado seja exibido apenas uma vez quando o botão muda de estado.

//Parameters 
const int btnPin  = A0; 
 
//Variables 
int btnVal  = 0; 
bool btnState  = false; 
bool oldbtnState  = false; 
 
void setup(){ 
//Init Serial USB 
Serial.begin(9600); 
Serial.println(F("Initialize System")); 
//Init btn 
pinMode(btnPin,INPUT_PULLUP); 
} 
 
void loop(){ 
testPushBtn(); 
} 
 
void testPushBtn( ){/* function testPushBtn */ 
////Read pushbutton 
btnVal=analogRead(btnPin); 
if(btnVal<200){ 
  btnState=true; 
  if(oldbtnState!=btnState) Serial.print(btnVal);Serial.print(F("-->"));Serial.println(F("Button was pressed")); 
}else{ 
  btnState=false; 
  if(oldbtnState!=btnState) Serial.print(btnVal);Serial.print(F("-->"));Serial.println(F("Button was released")); 
} 
oldbtnState=btnState; 
} 

Código para transformar um botão de pressão num interruptor

Com o estado do botão salvo na memória, é fácil transformar o botão de pressão num interruptor. Neste exemplo, o LED acende quando o botão é pressionado e apaga quando é pressionado novamente.

//Parameters
const int btnPin  = A0;
const int ledPin = 13;

//Variables
int btnVal  = 0;
bool btnState  = false;
bool oldbtnState  = false;
bool ledState  = LOW;


void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init btn
  pinMode(btnPin, INPUT_PULLUP);
  pinMode(ledPin, OUTPUT);
}

void loop() {
  testPushBtn();
}

void testPushBtn( ) { /* function testPushBtn */
  ////Read pushbutton
  btnVal = analogRead(btnPin);
  if (btnVal < 200) {
    btnState = true;
  } else {
    btnState = false;
  }
  
  if (oldbtnState != btnState) {
    if(btnState==true){
      Serial.print(F("Button was pressed")); Serial.print(F("-->")); Serial.print(F("LED "));
      ledState = !ledState;
      Serial.println(ledState);
      digitalWrite(ledPin, ledState);
    }
  }

  oldbtnState = btnState;
}

Combine e modifique esses exemplos para obter a funcionalidade que deseja. Em alguns casos, também é necessário acrescentar funções anti-repique (debounce).

Para um uso mais avançado do botão de pressão, pode usar uma interrupção para detectar o seu estado.

Aplicação

Fontes

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

Exit mobile version