Mudanças entre as edições de "MCO018703 2021 2 AULA06"
(Criou página com '=Funções para Controle de Fluxo - Repetição= ;Objetivo: *Aprender sobre o comando de repetição ''while'' controlado por condição; *Saber usar o comando ''while'' e '...') |
|||
(2 revisões intermediárias pelo mesmo usuário não estão sendo mostradas) | |||
Linha 1: | Linha 1: | ||
− | = | + | =Mapa das Entradas e Saídas do Arduino= |
;Objetivo: | ;Objetivo: | ||
− | * | + | * Apresentar o mapa das entradas e saídas do Arduino; |
− | *Saber | + | * Saber utilizar as funções na linguagem do Arduino. |
− | |||
− | |||
− | < | + | [[imagem:Fig041_MCO018703.jpg|600px|center]] |
− | + | <center> | |
− | + | Figura 1 - Mapa das Entradas e Saídas do Arduino. | |
− | + | </center> | |
− | + | ||
+ | ;Pinos Digitais: São usados para detecção ou transmissão de controles digitais. | ||
+ | |||
+ | :Funções em C: | ||
+ | ::pinMode( ) | ||
+ | ::digitalRead( ) | ||
+ | ::digitalWrite( ) | ||
+ | ::analogWrite( ) | ||
+ | ::attachInterrupt( ) | ||
+ | ::pulseIn( ) | ||
+ | |||
+ | |||
+ | ;Pinos analógicos: São usados para leitura de sinais de sensores análogicos. | ||
+ | |||
+ | :Funções em C: | ||
+ | ::analogRead( ) | ||
+ | |||
+ | |||
+ | ;Porta USB: É usada para comunicação serial com um computador. | ||
+ | |||
+ | :Funções em C: | ||
+ | ::begin( ) | ||
+ | ::end( ) | ||
+ | ::available( ) | ||
+ | ::read( ) | ||
+ | ::print( ) | ||
+ | ::println( ) | ||
+ | |||
+ | ;Pinos de Alimentação: São usados para alimentação de circuitos externos e ''reset'' do Arduino. | ||
+ | |||
+ | ==Portas de E/S do Arduino e suas Funções== | ||
+ | |||
+ | ;Pinos Digitais | ||
− | + | São 14 pinos marcados com o nome DIGITAL logo abaixo de duas barras de 8 pinos. São numerados de 0 a 13 da direita para a esquerda e podem ser configurados pela função | |
+ | '''pinMode( )''' para detetarem ou transmitirem níveis lógicos digitais (verdadeiro/falso, 1/0 ou HIGH/LOW). A Figura 2 mostra o mapa de pinos Digitais do Arduino. | ||
− | [[imagem: | + | [[imagem:Fig042_MCO018703.jpg|600px|center]] |
<center> | <center> | ||
− | Figura | + | Figura 2 - Mapa dos Pinos Digitais do Arduino. |
</center> | </center> | ||
− | |||
− | O exemplo | + | {| class="wikitable" |
+ | ! style="background:#A0522D; color:white; font-weight:bold;" | Função | ||
+ | ! style="background:#A0522D; color:white; font-weight:bold;" | Exemplo | ||
+ | ! style="background:#A0522D; color:white;font-weight:bold;" | Notas | ||
+ | |- | ||
+ | | '''pinMode(pino,modo)''' | ||
+ | Serve para estabelecer a direção do | ||
+ | fluxo de informações em qualquer dos 14 | ||
+ | pinos digitais. Dois parâmetros devem | ||
+ | ser passados à função: o primeiro indica | ||
+ | qual pino vai ser usado; o segundo, se | ||
+ | esse pino vai ser entrada ou se vai ser | ||
+ | saída dessas informações. | ||
+ | | '''pinMode(2,OUTPUT);''' | ||
+ | Aqui o pino 2 é selecionado para | ||
+ | transmitir informações do Arduino | ||
+ | para um circuito externo qualquer. | ||
+ | Para configurar esse pino como | ||
+ | entrada, o segundo parâmetro dessa | ||
+ | função deve ser INPUT. | ||
+ | | Essa função é sempre | ||
+ | escrita dentro da | ||
+ | função | ||
+ | setup( ). | ||
+ | |- | ||
+ | |'''digitalRead(pino) ''' | ||
+ | Uma vez configurado um certo pino | ||
+ | como entrada com a função | ||
+ | pinMode( ), a informação presente | ||
+ | nesse pino pode ser lida com a função | ||
+ | digitalRead( ) e armazenada | ||
+ | numa variável qualquer. | ||
+ | | '''int chave = digitalRead(3);''' | ||
+ | Nesse exemplo a variável inteira | ||
+ | ‘chave’ vai guardar o estado lógico | ||
+ | (verdadeiro/falso) presente no | ||
+ | pino digital 3. | ||
+ | | | ||
+ | |- | ||
+ | | '''digitalWrite(pino,valor) ''' | ||
+ | Para enviar um nível lógico para qualquer | ||
+ | pino digital do Arduino utiliza-se essa | ||
+ | função. Dois parâmetros são requeri | ||
+ | dos: o número do pino e o estado lógico | ||
+ | (HIGH/LOW ) em que esse pino deve | ||
+ | permanecer. | ||
+ | | '''digitalWrite(2,HIGH);''' | ||
+ | Aqui uma tensão de 5 volts é colo | ||
+ | cada no pino 2. Para enviar terra | ||
+ | para esse pino o segundo parâmetro | ||
+ | deverá ser LOW. | ||
+ | | É necessário configurar previamente o | ||
+ | pino como saída com a função | ||
+ | pinMode( ). | ||
+ | |- | ||
+ | | '''analogWrite(pino,valor)''' | ||
+ | O Arduino pode gerar tensões analógicas | ||
+ | em 6 de seus 14 pinos digitais com a função | ||
+ | '''analogWrite( )'''. Dois parâmetros devem | ||
+ | ser passados à função: o primeiro indica em | ||
+ | qual pino será gerada a tensão; o segundo | ||
+ | determina a amplitude dessa tensão, e | ||
+ | deve ter valores entre 0 (para 0 volt) e | ||
+ | 255 (para 5 volts). | ||
+ | | '''analogWrite(10,128);''' | ||
+ | Com esses parâmetros uma | ||
+ | tensão analógica de 2,5 volts | ||
+ | vai aparecer no pino 10. Não é | ||
+ | necessário configurar um pino | ||
+ | PWM como saída com a função | ||
+ | '''pinMode( )''' quando se chama | ||
+ | função '''analogWrite( )'''. | ||
+ | | Modulação por Largura de Pulsos, ou | ||
+ | PWM (Pulse Width Modulation) na | ||
+ | língua inglesa, é uma técnica usada | ||
+ | para gerar tensões analógicas a partir | ||
+ | de uma sequência de pulsos digitais. | ||
+ | |- | ||
+ | | '''attachInterrupt(pino,função,modo)''' | ||
+ | Essa função é uma rotina de serviço de | ||
+ | interrupção, ou ISR (Interrupt Service | ||
+ | Routine) em inglês. Toda vez que ocorrer | ||
+ | uma interrupção por hardware no pino digi | ||
+ | tal 2 ou no 3 do Arduino uma outra função, | ||
+ | criada pelo programador, vai ser chamada. | ||
+ | O terceiro parâmetro, modo, informa | ||
+ | como a interrupção vai ser disparada, se | ||
+ | na borda de subida do pulso detetado no | ||
+ | pino do Arduino, se na borda de descida, se | ||
+ | quando o pulso for baixo ou se na mudança | ||
+ | de nível desse pulso. | ||
+ | | '''attachInterrupt(0,contador,RISING);''' | ||
+ | Nesse exemplo a função | ||
+ | ‘contador’ vai ser chamada | ||
+ | quando o Arduino detetar uma | ||
+ | mudança do nível LOW para | ||
+ | o nível HIGH em seu pino 2. | ||
+ | Nessa ISR o parâmetro 0 | ||
+ | monitora o pino 2, o parâmetro 1 | ||
+ | monitora o pino 3. | ||
+ | | LOW - dispara a interrupção quando | ||
+ | o pino está em 0; | ||
+ | CHANGE - dispara sempre que o | ||
+ | pino muda de estado (de 0 para 1, | ||
+ | ou vice-versa); | ||
+ | RISING - somente quando o pino | ||
+ | muda de 0 para 1; | ||
+ | FALLING - somente quando o pino | ||
+ | muda de 1 para 0. | ||
+ | |- | ||
+ | | '''pulseIn(pino,valor,espera)''' | ||
+ | Essa função mede a largura em microssegundos | ||
+ | de um pulso em qualquer pino digital. | ||
+ | O parâmetro ‘valor’ diz à função que | ||
+ | tipo de pulso deve ser medido, se HIGH | ||
+ | ou LOW. O parâmetro ‘espera’ (time out) é | ||
+ | opcional e se passado à função faz com que | ||
+ | a medida do pulso só comece após o tempo | ||
+ | em microssegundos ali especificado. | ||
+ | | '''pulseIn(4,HIGH);''' | ||
+ | Aqui essa função vai monitorar | ||
+ | o pino 4, e quando o nível | ||
+ | nesse pino mudar de LOW | ||
+ | para HIGH a sua largura vai | ||
+ | ser medida até que seu nível | ||
+ | volte para LOW. Se, por | ||
+ | exemplo, for passado o valor 100 | ||
+ | como terceiro parâmetro, a | ||
+ | medida da largura do pulso só | ||
+ | será disparada após 100 uS. | ||
+ | | Uma aplicação interessante para | ||
+ | essas duas últimas funções seria | ||
+ | o de montar um contador de dois dígitos | ||
+ | com mostradores de 7-segmentos. | ||
+ | |} | ||
+ | |||
+ | ;Exemplo | ||
+ | |||
+ | |||
+ | No programa abaixo essas três funções: pinMode(), digitalRead() e digitalWrite() são utilizadas para acender um LED no pino 2 toda vez que | ||
+ | uma chave normalmente aberta no pino 3 for pressionada. | ||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
− | + | void setup() | |
− | void setup( ) | ||
{ | { | ||
− | + | pinMode(11,OUTPUT); | |
+ | // led no pino 11 como saída | ||
+ | pinMode(5,INPUT); // Pode-se definir um resistor interno de pull-up com INPUT_PULLUP | ||
+ | // chave no pino 5 como entrada | ||
} | } | ||
− | void loop( ) | + | void loop() |
{ | { | ||
− | + | int chave = digitalRead(5); | |
− | + | // variável ‘chave’ guarda estado do pino 5 | |
− | + | if (chave==HIGH) | |
− | + | digitalWrite(11,LOW); | |
− | + | else | |
− | + | digitalWrite(11,HIGH); | |
− | + | // estado de ‘chave’ é passado para pino 11 | |
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | A Figura 3 mostra como ficaria as ligações para acender o LED toda vez que a chave for pressionada. | |
+ | |||
+ | [[imagem:Fig043_MCO018703.jpg|400px|center]] | ||
+ | <center> | ||
+ | Figura 3 - Fios vermelhos são 5V, fios pretos GND e fios verdes conexões com os Pinos de E/S. | ||
+ | </center> | ||
+ | |||
+ | O botão ''push-button'' também é chamado micro ''switch''. A Figura 4 ilustra o seu funcionamento. | ||
+ | |||
+ | [[imagem:Fig013_MCO18703.png|500px|center]] | ||
+ | <center> | ||
+ | Figura 4 - ''Push-button'' de pólo simples com 2 ou 4 pinos de contato. | ||
+ | </center> | ||
+ | |||
+ | LED, ou ''Light Emitter Diode'' é um diodo emissor de luz que, quando alimentado corretamente, permite o fluxo de energia apenas em um sentido. É um componente polarizado (com pólos positivo e negativo) e deve ser corretamente conectado para funcionar. Note que o polo positivo possui uma perna maior (terminal maior) que a outra (veja a figura abaixo). Já o polo negativo possui a menor perna (terminal menor). | ||
+ | |||
+ | [[imagem:Fig004_MCO18703.jpg|500px|center]] | ||
+ | <center> | ||
+ | Figura 5 - ''Diodo emissor de luz. | ||
+ | </center> | ||
+ | |||
+ | <blockquote style="background: #E0FFFF; border: 2px solid #6A5ACD; margin-left: 0px; margin-right: 0px; padding: 1em;"> | ||
+ | Nota: Alguns LED's apresentam o polo negativo chanfrado (plano) no seu exterior. | ||
+ | </blockquote> | ||
− | + | ==Enviando estado de chave para Monitor Serial== | |
− | + | ;EXEMPLO 3: | |
− | + | ||
− | + | Neste teste, o estado de uma chave externa será lido e enviado pro Monitor Serial. | |
− | |||
− | |||
− | |||
− | + | ;Esquemático: | |
− | + | [[imagem:Fig022_MCO18703.png|500px|center]] | |
− | + | ;Código fonte: | |
− | |||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
− | int | + | int pushButton=2; |
− | void setup( ) | + | |
+ | void setup() | ||
{ | { | ||
− | Serial.begin(9600); | + | Serial.begin(9600); |
+ | pinMode(pushButton, INPUT); | ||
} | } | ||
− | void loop( ) | + | |
+ | void loop() | ||
{ | { | ||
− | + | int buttonState=digitalRead(pushButton); | |
− | + | ||
− | + | Serial.println(buttonState); | |
− | + | delay(1); | |
− | |||
− | |||
− | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | ;No protoshield do laboratório: | |
+ | |||
+ | [[imagem:Fig023_MCO18703.jpg|400px|center]] | ||
− | + | ;Quando pressiona a chave, efeito no Monitor Serial: | |
− | + | [[imagem:Fig024_MCO18703.png|500px|center]] | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | ==Pushbutton como interruptor liga/desliga== | |
− | + | Criar um circuito para atribuir duas funções em um único botão (pushbutton). O botão servirá como um interruptor para ligar e desligar um componente eletrônico. Neste exemplo vamos ligar e desligar um led utilizando o pushbutton como interruptor. | |
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
− | void setup( ) | + | const int buttonPin = 6; |
− | + | const int ledPin = 13; | |
− | + | ||
+ | int estado = 0; // variável para leitura do pushbutton | ||
+ | int guarda_estado = LOW; // variável para armazenar valores do pushbutton | ||
+ | |||
+ | void setup() { | ||
+ | pinMode(ledPin, OUTPUT); | ||
+ | pinMode(buttonPin, INPUT); // resistor de pullup -> pinMode(buttonPin, INPUT_PULLUP); | ||
} | } | ||
− | void loop( ) | + | |
− | { | + | void loop(){ |
− | + | estado = digitalRead(buttonPin); | |
− | + | ||
− | + | if (estado == HIGH) { // para pullup (estado==LOW) | |
− | + | guarda_estado = !guarda_estado; // inverte valor da variável variable_buttonEstado | |
+ | delay(500); //esperera o tempo de 500ms para evitar que haja várias vezes alterações | ||
+ | } | ||
+ | if (guarda_estado == HIGH) { | ||
+ | digitalWrite(ledPin, HIGH); | ||
+ | } | ||
+ | else { | ||
+ | digitalWrite(ledPin, LOW); | ||
+ | } | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | =Exercícios= | |
− | + | :1. Altere o programa Button para trocar o estado do LED quando o botão é pressionado. | |
+ | :2. Explique e implemente o código abaixo: | ||
<syntaxhighlight lang=c> | <syntaxhighlight lang=c> | ||
− | + | #define BOTAO 6 | |
+ | #define LED 13 | ||
+ | void setup() { | ||
+ | pinMode(LED, OUTPUT); | ||
+ | pinMode(BOTAO, INPUT); | ||
+ | } | ||
− | void | + | void loop() { |
− | { | + | digitalWrite(LED, !digitalRead(BOTAO)); |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
+ | |||
+ | ;Nota: O operador !, em linguagem C, significa negação ('''not''') e tem como finalidade complementar a expressão que segue à sua direita. | ||
=Referências= | =Referências= | ||
− | [1] http:// | + | [1] http://ordemnatural.com.br/pdf-files/CartilhadoArduino_ed1.pdf |
+ | |||
+ | [2] https://www.tinkercad.com/circuits | ||
+ | |||
----- | ----- | ||
− | [[Imagem:icone_voltar.png|link= | + | [[Imagem:icone_voltar.png|link=MCO018703_2021_2_AULA05]] |
[[Imagem:icone_menu.png|link=MCO018703_2021_2#Aulas]] | [[Imagem:icone_menu.png|link=MCO018703_2021_2#Aulas]] | ||
− | [[Imagem:icone_prox.png|link= | + | [[Imagem:icone_prox.png|link=MCO018703_2021_2_AULA07]] |
Edição atual tal como às 09h39min de 18 de outubro de 2021
Mapa das Entradas e Saídas do Arduino
- Objetivo
- Apresentar o mapa das entradas e saídas do Arduino;
- Saber utilizar as funções na linguagem do Arduino.
Figura 1 - Mapa das Entradas e Saídas do Arduino.
- Pinos Digitais
- São usados para detecção ou transmissão de controles digitais.
- Funções em C:
- pinMode( )
- digitalRead( )
- digitalWrite( )
- analogWrite( )
- attachInterrupt( )
- pulseIn( )
- Pinos analógicos
- São usados para leitura de sinais de sensores análogicos.
- Funções em C:
- analogRead( )
- Porta USB
- É usada para comunicação serial com um computador.
- Funções em C:
- begin( )
- end( )
- available( )
- read( )
- print( )
- println( )
- Pinos de Alimentação
- São usados para alimentação de circuitos externos e reset do Arduino.
Portas de E/S do Arduino e suas Funções
- Pinos Digitais
São 14 pinos marcados com o nome DIGITAL logo abaixo de duas barras de 8 pinos. São numerados de 0 a 13 da direita para a esquerda e podem ser configurados pela função pinMode( ) para detetarem ou transmitirem níveis lógicos digitais (verdadeiro/falso, 1/0 ou HIGH/LOW). A Figura 2 mostra o mapa de pinos Digitais do Arduino.
Figura 2 - Mapa dos Pinos Digitais do Arduino.
Função | Exemplo | Notas |
---|---|---|
pinMode(pino,modo)
Serve para estabelecer a direção do fluxo de informações em qualquer dos 14 pinos digitais. Dois parâmetros devem ser passados à função: o primeiro indica qual pino vai ser usado; o segundo, se esse pino vai ser entrada ou se vai ser saída dessas informações. |
pinMode(2,OUTPUT);
Aqui o pino 2 é selecionado para transmitir informações do Arduino para um circuito externo qualquer. Para configurar esse pino como entrada, o segundo parâmetro dessa função deve ser INPUT. |
Essa função é sempre
escrita dentro da função setup( ). |
digitalRead(pino)
Uma vez configurado um certo pino como entrada com a função pinMode( ), a informação presente nesse pino pode ser lida com a função digitalRead( ) e armazenada numa variável qualquer. |
int chave = digitalRead(3);
Nesse exemplo a variável inteira ‘chave’ vai guardar o estado lógico (verdadeiro/falso) presente no pino digital 3. |
|
digitalWrite(pino,valor)
Para enviar um nível lógico para qualquer pino digital do Arduino utiliza-se essa função. Dois parâmetros são requeri dos: o número do pino e o estado lógico (HIGH/LOW ) em que esse pino deve permanecer. |
digitalWrite(2,HIGH);
Aqui uma tensão de 5 volts é colo cada no pino 2. Para enviar terra para esse pino o segundo parâmetro deverá ser LOW. |
É necessário configurar previamente o
pino como saída com a função pinMode( ). |
analogWrite(pino,valor)
O Arduino pode gerar tensões analógicas em 6 de seus 14 pinos digitais com a função analogWrite( ). Dois parâmetros devem ser passados à função: o primeiro indica em qual pino será gerada a tensão; o segundo determina a amplitude dessa tensão, e deve ter valores entre 0 (para 0 volt) e 255 (para 5 volts). |
analogWrite(10,128);
Com esses parâmetros uma tensão analógica de 2,5 volts vai aparecer no pino 10. Não é necessário configurar um pino PWM como saída com a função pinMode( ) quando se chama função analogWrite( ). |
Modulação por Largura de Pulsos, ou
PWM (Pulse Width Modulation) na língua inglesa, é uma técnica usada para gerar tensões analógicas a partir de uma sequência de pulsos digitais. |
attachInterrupt(pino,função,modo)
Essa função é uma rotina de serviço de interrupção, ou ISR (Interrupt Service Routine) em inglês. Toda vez que ocorrer uma interrupção por hardware no pino digi tal 2 ou no 3 do Arduino uma outra função, criada pelo programador, vai ser chamada. O terceiro parâmetro, modo, informa como a interrupção vai ser disparada, se na borda de subida do pulso detetado no pino do Arduino, se na borda de descida, se quando o pulso for baixo ou se na mudança de nível desse pulso. |
attachInterrupt(0,contador,RISING);
Nesse exemplo a função ‘contador’ vai ser chamada quando o Arduino detetar uma mudança do nível LOW para o nível HIGH em seu pino 2. Nessa ISR o parâmetro 0 monitora o pino 2, o parâmetro 1 monitora o pino 3. |
LOW - dispara a interrupção quando
o pino está em 0; CHANGE - dispara sempre que o pino muda de estado (de 0 para 1, ou vice-versa); RISING - somente quando o pino muda de 0 para 1; FALLING - somente quando o pino muda de 1 para 0. |
pulseIn(pino,valor,espera)
Essa função mede a largura em microssegundos de um pulso em qualquer pino digital. O parâmetro ‘valor’ diz à função que tipo de pulso deve ser medido, se HIGH ou LOW. O parâmetro ‘espera’ (time out) é opcional e se passado à função faz com que a medida do pulso só comece após o tempo em microssegundos ali especificado. |
pulseIn(4,HIGH);
Aqui essa função vai monitorar o pino 4, e quando o nível nesse pino mudar de LOW para HIGH a sua largura vai ser medida até que seu nível volte para LOW. Se, por exemplo, for passado o valor 100 como terceiro parâmetro, a medida da largura do pulso só será disparada após 100 uS. |
Uma aplicação interessante para
essas duas últimas funções seria o de montar um contador de dois dígitos com mostradores de 7-segmentos. |
- Exemplo
No programa abaixo essas três funções: pinMode(), digitalRead() e digitalWrite() são utilizadas para acender um LED no pino 2 toda vez que
uma chave normalmente aberta no pino 3 for pressionada.
void setup()
{
pinMode(11,OUTPUT);
// led no pino 11 como saída
pinMode(5,INPUT); // Pode-se definir um resistor interno de pull-up com INPUT_PULLUP
// chave no pino 5 como entrada
}
void loop()
{
int chave = digitalRead(5);
// variável ‘chave’ guarda estado do pino 5
if (chave==HIGH)
digitalWrite(11,LOW);
else
digitalWrite(11,HIGH);
// estado de ‘chave’ é passado para pino 11
}
A Figura 3 mostra como ficaria as ligações para acender o LED toda vez que a chave for pressionada.
Figura 3 - Fios vermelhos são 5V, fios pretos GND e fios verdes conexões com os Pinos de E/S.
O botão push-button também é chamado micro switch. A Figura 4 ilustra o seu funcionamento.
Figura 4 - Push-button de pólo simples com 2 ou 4 pinos de contato.
LED, ou Light Emitter Diode é um diodo emissor de luz que, quando alimentado corretamente, permite o fluxo de energia apenas em um sentido. É um componente polarizado (com pólos positivo e negativo) e deve ser corretamente conectado para funcionar. Note que o polo positivo possui uma perna maior (terminal maior) que a outra (veja a figura abaixo). Já o polo negativo possui a menor perna (terminal menor).
Figura 5 - Diodo emissor de luz.
Nota: Alguns LED's apresentam o polo negativo chanfrado (plano) no seu exterior.
Enviando estado de chave para Monitor Serial
- EXEMPLO 3
Neste teste, o estado de uma chave externa será lido e enviado pro Monitor Serial.
- Esquemático
- Código fonte
int pushButton=2;
void setup()
{
Serial.begin(9600);
pinMode(pushButton, INPUT);
}
void loop()
{
int buttonState=digitalRead(pushButton);
Serial.println(buttonState);
delay(1);
}
- No protoshield do laboratório
- Quando pressiona a chave, efeito no Monitor Serial
Pushbutton como interruptor liga/desliga
Criar um circuito para atribuir duas funções em um único botão (pushbutton). O botão servirá como um interruptor para ligar e desligar um componente eletrônico. Neste exemplo vamos ligar e desligar um led utilizando o pushbutton como interruptor.
const int buttonPin = 6;
const int ledPin = 13;
int estado = 0; // variável para leitura do pushbutton
int guarda_estado = LOW; // variável para armazenar valores do pushbutton
void setup() {
pinMode(ledPin, OUTPUT);
pinMode(buttonPin, INPUT); // resistor de pullup -> pinMode(buttonPin, INPUT_PULLUP);
}
void loop(){
estado = digitalRead(buttonPin);
if (estado == HIGH) { // para pullup (estado==LOW)
guarda_estado = !guarda_estado; // inverte valor da variável variable_buttonEstado
delay(500); //esperera o tempo de 500ms para evitar que haja várias vezes alterações
}
if (guarda_estado == HIGH) {
digitalWrite(ledPin, HIGH);
}
else {
digitalWrite(ledPin, LOW);
}
}
Exercícios
- 1. Altere o programa Button para trocar o estado do LED quando o botão é pressionado.
- 2. Explique e implemente o código abaixo:
#define BOTAO 6
#define LED 13
void setup() {
pinMode(LED, OUTPUT);
pinMode(BOTAO, INPUT);
}
void loop() {
digitalWrite(LED, !digitalRead(BOTAO));
}
- Nota
- O operador !, em linguagem C, significa negação (not) e tem como finalidade complementar a expressão que segue à sua direita.
Referências
[1] http://ordemnatural.com.br/pdf-files/CartilhadoArduino_ed1.pdf
[2] https://www.tinkercad.com/circuits