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