Esta barra, indica o nível de dificuldade encontrado para cada experiência realizada.
sendo:
"VERDE", indicação de nível 1 a 5 (Fácil);
"AMARELO", indicação de nível 6 a 8 (Médio);
VERMELHO, indicação de nível 9 e 10 (Difícil);
Esta experiência, têm como objetivo, mostrar o uso e como fazer a leitura de dados provenientes de botões.Ou seja:
Os modos de ligação de um botão no Arduino; como identificar se um botão foi pressionado; como usar essa informação para interagir em seu programa.
Vamos também aprender como monitorar a informação através da comunicação USB entre o Arduino e o computador, ou seja, fazer a leitura do botão e mostrar no PC os dados obtidos.
O Hardware Requerido:
Uma placa Arduino UNO, ou equivalente;
Um botão de contato momentâneo, o chamado "botão datilar";
Um Resistor de 10K ohm;
Uma Matriz de Contatos "Breadboard";
Fios.
O circuito:
Circuito 1: Caso o botão esteja pressionado, o pino de controle do Arduino terá nível baixo;
Caso o botão não esteja pressionado, o pino de controle do Arduino terá nível alto.
Ligar uma ponta do Botão ao negativo da alimentação, a outra ponta a um resistor de 10K ohm; o outro terminal do resistor, ligar ao positivo da alimentação. O pino 2 de controle no Arduino deve ser ligado no terminal de junção do botão com o resistor.
Circuito 2: Caso o botão esteja pressionado, o pino de controle do Arduino terá nível alto;
Caso o botão não esteja pressionado, o pino de controle do Arduino terá nível baixo.
Ligar uma ponta do Botão ao positivo da alimentação, a outra ponta a um resistor de 10K ohm; o outro terminal do resistor, ligar ao negativo da alimentação. O pino 2 de controle no Arduino deve ser ligado no terminal de junção do botão com o resistor.
O Código:
Primeiramente, deve-se inicializar a comunicação serial a 9600 bps, entre o arduino e computador;
Serial.begin(9600);
Em seguida inicialize o pino 2 do Arduino, que fará a leitura da informação do botão, como sendo um pino de entrada de informação.
pinMode(2, INPUT);
Este é um pino digital e irá variar de 0V (LOW) a 5V (HIGH) somente, sem nenhum estado intermediário.
A leitura no programa será então "0" ou "1", "Desligado" ou "Ligado", "não Pressionado" ou "Pressionado", etc...
Definir uma variável para conter o valor lido no botão. Efetuando a leitura digital deste botão que foi definido no pino 2.
int sensorValue = digitalRead(2);
Uma vez lido e armazenado o valor, é possível enviar esse dado para a porta serial e imprimir no PC (em decimal).
Serial.println(sensorValue, DEC);
Agora sim vejamos o código completo:
Conclusão:
Nenhuma dificuldade com esta experiência de nível básico
Como observação vale lembrar que existe o problema de instabilidade no pressionamento de botões, ou seja, quando pressionado e tem um período de variação de transições entre "0" e "1" (o chamado "Bouncing", que ocorre durante um pequeno intervalo de tempo antes de estabilizar) um ruído que pode fazer o Arduino entender errado um pressionamento do botão ou entender que o botão foi pressionado mais de uma vez quando não o foi.
O "Debouncing" pode ser feito por hardware, colocando-se um capacitor em paralelo com o botão, ou pode ser feito por software, esperando 20 ms depois de pressionado o botão para certificar que o botão foi realmente pressionado e passar o período de transições "Bouncing".
...
if(botao = 1)
{
delay(20);
if(botão = 1)
{
// Rotina para botão acionado.
}
else if(botão = 1)
{
// não esperou tempo suficiente
}
}
...
Isto tudo será estudado mais detalhadamente em um outro post.
Vídeo:
Agora, vejamos o vídeo desta experiência.
Visite, para maiores informações:
http://arduino.cc/en/Tutorial/DigitalReadSerial
Até o próximo Post.
ola
ResponderExcluircomo faço para que o botão ligue e desligue uma carga e durante um intervalo de tempo?
exemplo no programa eu pretendo fazer assim:
quando o botão for pressionado ele liga o led por 30 segundos mas durante esses 30 segundos se eu pressionar o botão ele desliga o led.
Olá, Abaixo um programa de Liga/Desliga de um LED com um único botão de acionamento.
ResponderExcluirFacilmente modificável para o seu propósito.
Você tem que fazer uma rotina para ficar contando os 30 segundos com a função millis() e ficar checando a cada vez que o programa inicia o loop principal, se passou 30000 ms e o estado não alterou, então altera devido ao estouro do tempo.
Tente fazer, e me diga o resultado
O Programa abaixo é o esqueleto, nele você pode montar sua rotina.
Divulgue o blog, divulgue o conhecimento, Hardware e Software Livre é nosso objetivo!
/*
#####################################################################################
# Arquivo: Botao_liga_Desliga_Debounce_OK.pde
# Micro-processador: Arduino UNO ou Teensy++ 2.0
# Linguagem: Wiring / C /Processing /Fritzing / Arduino IDE
#
# Objetivo: Botão Liga/Desliga
#
# Funcionamento: Um LED conectado ao pino 8 pode ser ligado e desligado
# com um toque em um único botão
# Com Debounce para evitar que ruídos acionem o sistema
# repique durante o acionamento normal
#
#
#
# Autor: Marcelo Moraes
# Data: 25/09/12
# Local: Sorocaba - SP
#
#####################################################################################
Este projeto contém código de domínio público.
A modificação é premitida sem aviso prévio.
*/
int pinBotao = 7; // pino do botão
int pinLED = 8; // pino do LED
int estado = HIGH; // estado corrente do pino de saída
int leitura; // a leitura corrente no pino do botão
int anterior = LOW; // estado anterior do pino do botão
// variáveis tipo long pois vai guardar milisegundos
long tempo = 0; // o último momento que a saída foi mudada
long debounce = 200; // tempo de Debounce
// executado na inicilaização do Arduino
void setup()
{
pinMode(pinBotao, INPUT); // pino do botão como entrada
pinMode(pinLED, OUTPUT); // pino do LED como saída
}
// loop principal do programa
void loop()
{
leitura = digitalRead(pinBotao);
// se a entrada foi para LOW e HIGH e foi esperado tempo suficiente apertado
// para ignorar ruídos no circuito, muda o pino de saída e guarda o tempo
if (leitura == HIGH && anterior == LOW && millis() - tempo > debounce) {
if (estado == HIGH)
estado = LOW; // se estado alto, então muda para baixo
else
estado = HIGH; // se estado baixo, então muda para alto
tempo = millis(); // tempo atual
}
digitalWrite(pinLED, estado); // escreve estado no LED
anterior = leitura; // faz estado anterior igual ao estado corrente
}
// FIM DA COMPILAÇÃO
Nessas linhas:
Excluir...
int estado = HIGH; // estado corrente do pino de saída
int leitura; // a leitura corrente no pino do botão
int anterior = LOW; // estado anterior do pino do botão
...
Poderia declarar as 3 variaveis como bool né?