fbpixel
Etiquetas:, , ,
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

  • Computador
  • Arduino UNO
  • Cabo USB para ligar o Arduino ao computador
  • Botão de pressão

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

  • Crie uma interface minimalista para o seu projeto

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.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?