Arduino Forum

International => Portugues => Topic started by: edhennemann on May 17, 2019, 02:49 am

Title: Botões e programa
Post by: edhennemann on May 17, 2019, 02:49 am
Pessoal.
Sou iniciante e preciso de uma ajuda na execução de um programa.
Vou tentar explicar.
Utilizarei como componentes: 2 leds (verde  e vermelho), buzzer, tela LCD 16x2, 4 botões.

como deve funcionar o programa...
Um usuário teria em mãos 8 perguntas.
Na tela LCD deve mostrar "Responda a questão 1:"
Então ele vai pressionar o botão correspondente (alternativas A, B, C, D).
Obs: Cada resposta das 8 questões deve ser registrada previamente, tipo Q1=A, Q2=D, Q3=B...

Se o usuário responder a questão corretamente, acende o led verde e passa para a próxima pergunta, aparecendo no LCD "Responda a questão 2:"
Se responder errado, acende o led vermelho, faz um som no buzzer e passa para a próxima questão, aparecendo no LCD "Responda a questão 2:".

E assim sucessivamente até encerrar as 8 questões.

No final, o programa deve aparecer no LCD "Sua nota foi... e a nota do usuário"
OBS: Imagino que conforme ele for acertando vai somando 1 em uma lista e no final pega essa soma de acertos e multiplica por 1,25.

Agradeço qualquer ajuda.
Title: Re: Botões e programa
Post by: alkuentrus on May 17, 2019, 04:17 pm
Vamos lá ver, qual é o arduino, qual é o lcd, tens i2c, ou é paralelo? Que código é que já fizeste?  Já viste alguns exemplos?
Title: Re: Botões e programa
Post by: edhennemann on May 17, 2019, 05:03 pm
Possuo o arduíno Uno. LCD com i2c. Não tenho exemplos específicos.
Só vi parecidos de acionar o botão e mudar frequências no buzzer, mas nada que trocaria a pergunta no LCD ou algo do tipo.
Tentei iniciar o código, alguma coisa está dando certa, mas não cheguei a mostrar no LCD ainda.
Title: Re: Botões e programa
Post by: alkuentrus on May 17, 2019, 06:32 pm
Coloca aqui o que já tens, clicando no botão código </>
Title: Re: Botões e programa
Post by: edhennemann on May 17, 2019, 07:18 pm
Estou me baseando no código abaixo, mas como tenho pouco contato com programação, estou apanhando bastante.
Segue código, nele só consta 3 botões. O led acende, toca o som, mas no caso do led ele nao desliga daí...






void setup()
{
  pinMode(A0, INPUT_PULLUP);
  pinMode(8, OUTPUT);
  pinMode(A1, INPUT);
  pinMode(A2, INPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
}

void loop()
{
  // if button press on A0 is detected
  if (digitalRead(A0) == HIGH) {
    tone(8, 440, 100); // play tone 57 (A4 = 440 Hz)
    digitalWrite(11, HIGH);
    digitalWrite(10, LOW);
   
  }
  // if button press on A1 is detected
  if (digitalRead(A1) == HIGH) {
    tone(8, 494, 100); // play tone 59 (B4 = 494 Hz)
    digitalWrite(11, LOW);
    digitalWrite(10, HIGH); 
  }
  // if button press on A2 is detected
  if (digitalRead(A2) == HIGH) {
    tone(8, 523, 100); // play tone 60 (C5 = 523 Hz)
    digitalWrite(11, LOW);
    digitalWrite(10, HIGH);
  }
}



Title: Re: Botões e programa
Post by: alkuentrus on May 19, 2019, 11:51 pm
Não colocaste o código como é suposto, carregado no primeiro botão do lado esquerdo do menu. </>

O teu código está incompleto.
Code: [Select]




void setup()
{
  pinMode(9, INPUT_PULLUP);
  pinMode(8, OUTPUT);
  pinMode(6, INPUT);
  pinMode(7, INPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
}

void loop()
{
  // if button press on A0 is detected
  if (digitalRead(9) == HIGH) {
    tone(8, 440, 100); // play tone 57 (A4 = 440 Hz)
    digitalWrite(11, HIGH);
    digitalWrite(10, LOW);
   
  }
else
{
digitalWrite(11, LOW);
    digitalWrite(10, HIGH);

}
  // if button press on A1 is detected
  if (digitalRead(6) == HIGH) {
    tone(8, 494, 100); // play tone 59 (B4 = 494 Hz)
    digitalWrite(11, LOW);
    digitalWrite(10, HIGH); 
  }
else
{
digitalWrite(11, HIGH);
    digitalWrite(10, LOW);

}
  // if button press on A2 is detected
  if (digitalRead(7) == HIGH) {
    tone(8, 523, 100); // play tone 60 (C5 = 523 Hz)
    digitalWrite(11, LOW);
    digitalWrite(10, HIGH);
  }
else
{
digitalWrite(11, HIGH);
    digitalWrite(10, LOW);

}
}
Title: Re: Botões e programa
Post by: alkuentrus on May 19, 2019, 11:54 pm
Outra coisa, o A0, A1 e A2 são portas Analógicas de entrada, pelo que as troquei por portas digitais. Esse código que tinhas era inutil. Fiz alterações ao código que tens de analisar e ver se consegues adaptar.
Title: Re: Botões e programa
Post by: edhennemann on May 20, 2019, 05:34 am
Alterei o jeito de pensar e comecei a fazer com switch/case.
Não sei se estaria correto.
Coloquei os códigos e os comentários para ver se esclarece um pouco.
Estou simulando no tinkercad...

Code: [Select]
// Respostas corretas de cada Questão
// 1 corresponde a letra "A", 2 é "B", 3 é "C" e 4 é "D"
int Q1 = 1; // Questão 1
int Q2 = 2; // Questão 2
int Q3 = 3; // Questão 3
int Q4 = 4; // Questão 4
int Q5 = 1; // Questão 5
int Q6 = 1; // Questão 6
int Q7 = 1; // Questão 7
int Q8 = 1; // Questão 8


int ledverde = 11; // pino do led verde
int ledverm = 10;// pino do led vermelho
int buzzer = 9; // pino do buzzer
int botaoA = 8; // pino do botao referente a alternativa A
int botaoB = 7; // pino do botao referente a alternativa B
int botaoC = 6; // pino do botao referente a alternativa C
int botaoD = 5; // pino do botao referente a alternativa D
int comando;

 
void setup()
{
pinMode(11, OUTPUT);
pinMode(10, OUTPUT);
pinMode(9, OUTPUT);
pinMode(8, INPUT);
pinMode(7, INPUT);
pinMode(6, INPUT);
pinMode(5, INPUT);
comando=0;
}

void loop()
{
int leituraA = digitalRead(botaoA);
int leituraB = digitalRead(botaoB);
int leituraC = digitalRead(botaoC);
int leituraD = digitalRead(botaoD);

switch(comando)
{
  if (Q1=1 && leituraA == LOW) // se respostas for "A" e pressionado botao A
{
comando=1; // comando do acerto para questao 1
  }
break;
if (Q1=2 && leituraB == LOW); // se respostas for "B" e pressionado botao B
{
comando=1; // comando do acerto para questao 1
}
break;
if  (Q1=3 && leituraC == LOW); // se respostas for "C" e pressionado botao C
{
comando=1; // comando do acerto para questao 1
}
break;
if (Q1=4 && leituraD == LOW); // se respostas for "D" e pressionado botao D
{
comando=1; // comando do acerto para questao 1
}
break;
if (Q1!=1 && leituraA == LOW); // se resposta for diferente de "A" e botao A for pressionado
{
comando=2; // comando quando a resposta for errada
}
break;
if (Q1!=2 && leituraB == HIGH); // se resposta for diferente de "B" e botao B for pressionado
{
comando=2; // comando quando a resposta for errada
}
break;
if (Q1!=3 && leituraC == HIGH); // se resposta for diferente de "C" e botao C for pressionado
{
comando=2; // comando quando a resposta for errada
}
break;
if (Q1!=4 && leituraD == HIGH); // se resposta for diferente de "D" e botao D for pressionado
{
comando=2; // comando quando a resposta for errada
}
break;
 
switch (comando)
{
case 1:// quando comando = 1 (Resposta certa)
delay(1000);
digitalWrite(11, HIGH);
digitalWrite(10, LOW);
break;

case 2://quando comando = 2 (Resposta errada)
delay(1000);
tone(8, 523, 100);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
break;

}
}
}

// LEMBRANDO AINDA QUE A CADA RESPOSTA PRECISARIA MUDAR NO LCD, QUE NÃO TENHO A MÍNIMA IDEIA DE COMO FUNCIONA....
Title: Re: Botões e programa
Post by: alkuentrus on May 20, 2019, 10:53 pm
Agora qual é o output que obtens?
Title: Re: Botões e programa
Post by: edhennemann on May 20, 2019, 11:11 pm
Não deu certo. Coloquei essa maneira de pensar, mas não funcionou.
Title: Re: Botões e programa
Post by: alkuentrus on May 21, 2019, 06:01 pm
Tenho de simular o código no meu pc. Neste momento não tenho dispobilidade para ver isso. Amanhã ou depois, vou dar um jeito.
Title: Re: Botões e programa
Post by: edhennemann on May 21, 2019, 06:23 pm
Acabei de fazer outro tipo de programação.
Ela está funcionando para 1 questao.
Mas nao sei como fazer para passar para uma proxima.

Sei que ficou bem longo e deve ter uma maneira mais prática de fazer, mas nao sei como.
Desta maneira, ele resolve todas as possibilidades para a Questao 1, mas nao sei passar para a Questao 2 e assim sucessivamente e calcular  a nota.

Segue:

Code: [Select]
// Respostas corretas de cada Questão

char Q1 = 'B'; // Questão 1
char Q2 = 'B'; // Questão 2
char Q3 = 'C'; // Questão 3
char Q4 = 'D'; // Questão 4
char Q5 = 'A'; // Questão 5
char Q6 = 'A'; // Questão 6
char Q7 = 'A'; // Questão 7
char Q8 = 'A'; // Questão 8


int ledverde = 11; // pino do led verde
int ledverm = 10;// pino do led vermelho
int buzzer = 9; // pino do buzzer
int botaoA = 8; // pino do botao referente a alternativa A
int botaoB = 7; // pino do botao referente a alternativa B
int botaoC = 6; // pino do botao referente a alternativa C
int botaoD = 5; // pino do botao referente a alternativa D
int acertos = 0;

 
void setup()
{
pinMode(11, OUTPUT); //define pino 11 como saída
pinMode(10, OUTPUT); //define pino 10 como saída
pinMode(9, OUTPUT); //define pino 9 como saída
pinMode(7, INPUT); //define pino 7 como entrada
pinMode(6, INPUT); //define pino 6 como entrada
pinMode(5, INPUT); //define pino 5 como entrada
pinMode(4, INPUT); //define pino 4 como entrada
}

void loop()
{
  botaoA = digitalRead(7); // recebe a leitura do botão
  if (botaoA == HIGH and Q1=='A'){ // condição
    digitalWrite(11, HIGH); // acende led verde
    digitalWrite(10, LOW); // apaga led vermelho
    delay(100); // Resposta ao botão fica ativa 100 milisegundos
    acertos=+1; // soma 1 para a lista de acertos
    digitalWrite(11, LOW); // apaga o led aceso
   
  }
    if (botaoA == HIGH and Q1!='A'){ // condição
    digitalWrite(11, LOW); // apaga led verde
    digitalWrite(10, HIGH); // acende led vermelho
    tone(9, 440, 100); // toca o som se a resposta for errada
    delay(100); // Resposta ao botão fica ativa 100 milisegundos
    digitalWrite(10, LOW); // apaga o led aceso
  }
  botaoB = digitalRead(6); // recebe a leitura do botão
  if (botaoB == HIGH && Q1=='B') { // condição
    digitalWrite(11, HIGH); // acende led verde
    digitalWrite(10, LOW); // apaga led vermelho
    delay(100); // Resposta ao botão fica ativa 100 milisegundos
    acertos=+1; // soma 1 para a lista de acertos
    digitalWrite(11, LOW); // apaga o led aceso
   
  }
      if (botaoB == HIGH and Q1!='B'){ // condição
    digitalWrite(11, LOW); // apaga led verde
    digitalWrite(10, HIGH); // acende led vermelho
    tone(9, 440, 100); // toca o som se a resposta for errada
    delay(100); // Resposta ao botão fica ativa 100 milisegundos
    digitalWrite(10, LOW); // apaga o led aceso
  }
  botaoC = digitalRead(5); // recebe a leitura do botão
  if (botaoC == HIGH && Q1=='C') { // condição
    digitalWrite(11, HIGH); // acende led verde
    digitalWrite(10, LOW); // apaga led vermelho
    delay(100); // Resposta ao botão fica ativa 100 milisegundos
    acertos=+1; // soma 1 para a lista de acertos
    digitalWrite(11, LOW); // apaga o led aceso
   
  }
      if (botaoC == HIGH and Q1!='C'){ // condição
    digitalWrite(11, LOW); // apaga led verde
    digitalWrite(10, HIGH); // acende led vermelho
    tone(9, 440, 100); // toca o som se a resposta for errada
    delay(100); // Resposta ao botão fica ativa 100 milisegundos
    digitalWrite(10, LOW); // apaga o led aceso
  }
  botaoD = digitalRead(4); // recebe a leitura do botão
  if (botaoD == HIGH && Q1=='D') { // condição
    digitalWrite(11, HIGH); // acende led verde
    digitalWrite(10, LOW); // apaga led vermelho
    delay(100); // Resposta ao botão fica ativa 100 milisegundos
    acertos=+1; // soma 1 para a lista de acertos
    digitalWrite(11, LOW); // apaga o led aceso
   
  }
      if (botaoD == HIGH and Q1!='D'){
    digitalWrite(11, LOW); // apaga led verde
    digitalWrite(10, HIGH); // acende led vermelho
    tone(9, 440, 100); // toca o som se a resposta for errada
    delay(100); // Resposta ao botão fica ativa 100 milisegundos
    digitalWrite(10, LOW); // apaga o led aceso
  }
}
Title: Re: Botões e programa
Post by: alkuentrus on May 22, 2019, 01:42 am
Eu ainda não olhei  bem para o código. Mas, se está a funcionar para a questão 1, tens de repetir todas as possiblidaddes para as outras questões. Vai ficar um comboio de código, mas para já é a única forma que tens de  fazer isso.
Title: Re: Botões e programa
Post by: edhennemann on May 22, 2019, 01:48 am
Ok, mas como tenho que mostrar no LCD, não consigo fazer o programa entender que terminou uma pergunta e é pra mostrar outra no visor.
Title: Re: Botões e programa
Post by: alkuentrus on May 22, 2019, 02:40 pm
Penso que vais ter de separar as questões por funções e fazer as respectivas invocações. Senão em código "esparguete" vai ser complicado....
Title: Re: Botões e programa
Post by: tecdiego on May 24, 2019, 04:48 am
edhennemann posta o código completo com a parte do LCD.
Você não disse qual modelo está usando.