Prévia do material em texto
4. Entradas digitais do Arduino Neste capítulo iremos estudar sobre as principais características do pinos configurados como entradas digitais do Hardware do Arduino UNO R3. 4.1 Entradas digitais Como visto no capítulo 1, a Placa Arduino possui pinos de entrada e saídas digitais, assim como pinos de entradas e saídas analógicas. A figura 1 apresenta a pinagem conhecida como o padrão Arduino. Figura 1 – Os portes de I/O da Placa Arduino UNO R3 Para entendermos como tratar um pino como entrada digital, nada mehor do que realizar uma aplicação. Para isso, vamos reconhecer o hardware a ser programado, apresentado na figura 2. Figura 2 – Esquemático de aplicação de portes de entrada digital. No circuito apresentado o LED está conectado ao porte 13 configurado como saída, e o botão ao porte 7, configurado como entrada digital. O resistor em série ao LED é de 330 e em série com o push-button, 1 k ou 10 k. 4.1.1 Programação Básica de Entrada Digital no Arduino UNO R3 Exemplo 1: int ledPin = 13; // LED conectado ao pino 13 int inPin = 7; // bush-button conectado ao pino 7 int val = 0; // variável que lê os valores da entrada void setup() { pinMode(ledPin, OUTPUT); // seta o pino 13 como saída pinMode(inPin, INPUT); // seta o pino 7 como entrada } void loop() { val = !digitalRead(inPin); //lê o pino de entrada invertido digitalWrite(ledPin, val); // escreve na saída o valor da entrada } No programa apresentado, o LED, conectado ao porte 13 assumirá o estado contrário do pino 7, configurado como entrada digital, sendo que neste há um push-button (botão de pressão) que ao ser pressionado, envia o valor “0” a entrada e no seu estado inicial (sem ser pressionado) envia o valor “1”. Exemplo 2: const int ledPin = 13; //constante com o numero do pino LED const int inputPin = 7; //constante com o numero do pino BOTÃO void setup() { pinMode(ledPin, OUTPUT); //declara o pino 13 como saída pinMode(inputPin, INPUT); //declara o pino 7 como entrada } void loop() { int val = digitalRead(inputPin); //lê o valor na entrada if (val == LOW) // se valor está em zero(tecla pressionada) { digitalWrite(ledPin, HIGH); //Liga LED tecla pressionada } else { digitalWrite(ledPin, LOW); //Desliga LED tecla solta } } O exemplo 2 atende ao mesmo propósito do exemplo 1. 4.1.2 Programação de Entrada Digital no Arduino UNO R3 (Lógica E) No próximo circuito de teste, o LED está conectado ao porte 13 configurado como saída, e os botões aos portes 7 e 8, configurados como entrada digital. O resistor em série ao LED é de 330 e em série com os push-buttons, 1 k ou 10 k, conforme apresentado na figura 3. Figura 3 – Esquemático de aplicação de portes de entrada digital. Exemplo 3: int ledPin = 13; //LED conectado ao pino 13 int inPin7 = 7; //bush-button conectado ao pino 7 int inPin8 = 8; //bush-button conectado ao pino 8 int val = 0; // variável que lê os valores da entrada void setup() { pinMode(ledPin, OUTPUT); //seta o pino 13 como saída pinMode(inPin7, INPUT); //seta o pino 7 como entrada pinMode(inPin8, INPUT); //seta o pino 8 como entrada } void loop() { /* aplica a lógica E nas duas entradas (somente quando os dois botões forem pressionados)*/ while(!digitalRead(inPin7)&&!digitalRead(inPin8)) { digitalWrite(ledPin,HIGH); //saída em nível alto } digitalWrite(ledPin,LOW); //saída em nível baixo } No programa apresentado, o LED, conectado ao porte 13 assumirá o estado lógico alto, somente quando os botões conectados aos portes 7 e 8 forem pressionados, aplicando-se assim a lógica E nas duas entradas. 4.1.3 Programação de Entrada Digital no Arduino UNO R3 (Lógica OU) Exemplo 4: int ledPin = 13; //LED conectado ao pino 13 int inPin7 = 7; //bush-button conectado ao pino 7 int inPin8 = 8; //bush-button conectado ao pino 8 int val = 0; // variável que lê os valores da entrada void setup() { pinMode(ledPin, OUTPUT); //seta o pino 13 como saída pinMode(inPin7, INPUT); //seta o pino 7 como entrada pinMode(inPin8, INPUT); //seta o pino 8 como entrada } void loop() { /* aplica a lógica OU nas duas entradas (quando no mínimo um dos botões for pressionado, o LED acende)*/ while(!digitalRead(inPin7)||!digitalRead(inPin8)) { digitalWrite(ledPin,HIGH); //saída em nível alto } digitalWrite(ledPin,LOW); //saída em nível baixo } No programa apresentado, o LED, conectado ao porte 13 assumirá o estado lógico alto, quando um dos botões conectados aos portes 7 ou 8 for pressionado, aplicando-se assim a lógica OU nas duas entradas. Agora é a hora de você testar seus conhecimentos! Primeiramente, teste os programas apresentados, e logo após, você deverá programar o Arduino para fazer com que uma variável seja incrementada (x++), a cada 500 ms, enquanto um botão, conectado ao porte 10, estiver pressionado, com limite de 9 incrementos. A mesma variável deverá ser decrementada (x--) enquanto um botão, conectado ao porte 9, estiver pressionado, devendo parar de decrementar quando a variável chegar a 0. Esta variável deverá ser apresentada num LCD.