gostaria de montar um projeto assim, aperta buton 1 começa a contagem 0 a 10 aperta buton 2 para , aperta de novo buton 1 faz a regressao . seria 1 conta, 2 para ,1 retorna 0,1,2,3,4,5, 5,4,3,2,1,0.
preciso de um dica
Tags:
Olá, fiz um código aqui e parece estar 99% do que você quer fazer. Veja se resolve o seu problema.
Apesar de parecer simples a solução me deu um certo trabalho. Me desculpe pelo tamanho do código, ainda não consegui fazer menor.
#define botao1 2 //Definindo botao1 como porta digital 2
#define botao2 3 //Definindo botao2 como porta digital 3
boolean apertoBotao1, apertoBotao2 = 0; //variáveis para armazenar aperto dos botões
int contador = -1; //variável contadora de tempo
byte tempoAnterior = -1; //variável para armazenar tempo anterior
void setup() {
Serial.begin(9600); //Inicia a comunicação serial com o baud rate em 9600
Serial.flush(); //Limpa a serial para evitar "lixo" na tela
delayMicroseconds(100); // atraso para confirmação de limpeza na serial
Serial.println("Sistema acionado."); // Mensagem de inicio
Serial.println();// Pula uma linha
pinMode(botao1, INPUT); //Define botao1 como entrada
pinMode(botao2, INPUT); //Define botao1 como entrada
/*Lembrando que por default todos os pinos são configurados
como entrada e caso não queira definir pinos de entrada
através de pinMode não é necessário.*/
}
void loop() {
if(digitalRead(botao1)){ //Leitura digital do pino 2
apertouBotao1(); //Se verdadeiro ( = 1, "pressionado") chama a função
}
else if(digitalRead(botao2)){ //Leitura digital do pino 3
apertoBotao2 = 1; //Se verdadeiro ( = 1, "pressionado") atribui o valor 1 a variável
delay(200); //atraso de 200ms (tempo médio de aperto de um botão)
Serial.println("Parada"); //exibe a mensagem
}
}
void tempoCrescente(){ //Função para contagem crescente de tempo
for(int i = 0; i<= 99; i++){ //laço de repetição para contagem de tempo
if(digitalRead(botao2)){ // se durante o laço houver um acionamento no botao2
contador--; //contador é decrementado apenas para ao abortar o laço o valor não alterar
break; //comando break aborta o laço for
}
delay(10); //atraso de 10ms para contagem de tempo; 100 * 10 = 1000ms
}
contador++; //incrementa o contador a cada um segundo
}
void tempoDecrescente(){//Função para contagem decrescente de tempo
for(int i = 0; i<= 99; i++){//laço de repetição para contagem de tempo
if(digitalRead(botao2)){ // se durante o laço houver um acionamento no botao2
contador++; //contador é incrementado apenas para ao abortar o laço o valor não alterar
break; //comando break aborta o laço for
}
delay(10); //atraso de 10ms para contagem de tempo; 100 * 10 = 1000ms
}
contador--; //decrementa o contador a cada um segundo
}
void apertouBotao1(){ //função chamada ao pressionar o botao 1
apertoBotao1 = 1; ///atribui 1 a variavel
Serial.println("Botao 1 apertado"); //exibe a mensagem
if(contador <= 0){ //testa a condição, se verdadeira
while(apertoBotao1 == 1 && (!digitalRead(botao2)) && contador < 10){//laço de repetição, se todas as condições forem verdadeiras
tempoCrescente();// chama função
if(tempoAnterior != contador) {//testa condição, se for diferente
Serial.println(contador); //Exibi o novo valor na tela
tempoAnterior = contador;//atribui o valor de uma variável a outra
}
}
if(contador <= 0)contador = -1; // testa condição, caso verdadeira atribui o valor -1 a variável (isso permite exibir a partir do 0)
}
else{//se a condição (if(contador <= 0)) for falsa
while(apertoBotao1 == 1 && (!digitalRead(botao2)) && contador > 0){//laço de repetição, se todas as condições forem verdadeiras
tempoDecrescente(); //chama a função
if(tempoAnterior != contador) {//testa condição, se for diferente
Serial.println(contador);//Exibi o novo valor na tela
tempoAnterior = contador;//atribui o valor de uma variável a outra
}
}
if(contador <= 0)contador = -1; // testa condição, caso verdadeira atribui o valor -1 a variável (isso permite exibir a partir do 0)
}
}
Valeu pelo codigo Vargas, agora tou tentar incluir les .obrigado
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por