/*
Projeto ABATEC - Teste de módulos separados
Sobre o módulo 01, 'Perguntas e Respostas':
> Há dois botões, um para respostas Afirmativas e outro para
respostas Negativas. Além disso, há também um controle, para
induzir a criança para a resposta desejada pelo profissional
Início: 21.04.24
Término: --.--.--
Versão: 1.3
> .1 - Utilização de vetores;
> .2 - Criando a função 'btnsAtributes(int a)'
> .3 - Lógica 'intervaloBtns' para facilitar a utilização do
comando 'pinMode' durante uma troca de módulos
OBS.: O objetivo dos códigos e esquemas de testes, é seguir
uma lógica de formatação no programa para que ao final dos
testes, sejam alocados a um único programa, e inter-relacio-
nados para que funcionem em conjunto.
by.: LOSR / <Pedra_Lascada></pL>
*/
//--------------------DEFINIÇÕES--FIXAS----------------------------//
#define buzzer A2
// #define nota_c 528
// #define nota_d 592
// D2 ~ D6 --> Input Pull Up
// D7 ~ D13 -> Output
//------------------DEFINIÇÕES--MODULARES--------------------------//
//Pinos dos botões
const int btns[] = {2, 3, 4, 5}; // Botão Não, Botão Sim, Botão Não do Controle e Botão Sim do Controle respectivamente
const int leds[] = {7, 8}; // Led vermelho e led verde, respectivamente
//Variavéis de armazenamento do estado dos botões
byte btnSim, btnNao, btnSimAnt, btnNaoAnt, btnSim_cont, btnNao_cont, btnSimAnt_cont, btnNaoAnt_cont;
// Variavéis de armazenamento do estado dos LED's
byte estadoLedRed, estadoLedGreen;
//------------------------SETUP------------------------------------//
void setup() {
pinMode(buzzer, OUTPUT);
for(int i = 0; i < 7; i++) pinMode(i, INPUT_PULLUP);
for(int j = 7; j < 14; j++) pinMode(j, OUTPUT);
}
//-------------------------LOOP-------------------------------------//
void loop() {
btnsAtributes(1);
controle();
btnsAtributes(2);
}
//-----------------------FUNÇÕES------------------------------------//
//Função para atribuir a leitura dos pinos aos devidos botões
void btnsAtributes(int a)
{
switch(a)
{
case 1: //Quando chamar a função 'btnsAtributes' n° 1, atribui-se a leitura dos pinos aos devidos botões
btnNao = digitalRead(btns[0]);
btnSim = digitalRead(btns[1]);
btnNao_cont = digitalRead(btns[2]);
btnSim_cont = digitalRead(btns[3]);
break;
case 2: //Quando chamar a função 'btnsAtributes' n° 2, atribui-se às variáveis anteriores o estado 'atual' dos botões
btnNaoAnt = btnNao;
btnSimAnt = btnSim;
btnNaoAnt_cont = btnNao_cont;
btnSimAnt_cont = btnSim_cont;
break;
}
}
void controle()
{
if(btnSim != btnSimAnt) if(btnSim) acenderLed(1);
if(btnNao != btnNaoAnt) if(btnNao) acenderLed(0);
}
void acenderLed(int a)
{
switch(a)
{
case 0:
digitalWrite(leds[0], HIGH);
delay(4500);
digitalWrite(leds[0], LOW);
delay(4500);
break;
case 1:
digitalWrite(leds[1], HIGH);
delay(4500);
digitalWrite(leds[1], LOW);
delay(4500);
break;
}
}
/*
void som(int a)
{
switch(a)
{
case 1:
tone(buzzer, nota_c, 150);
delay(300);
tone(buzzer, nota_d, 150);
delay(300);
break;
case 2:
tone(buzzer, nota_d, 150);
delay(300);
tone(buzzer, nota_c, 150);
delay(300);
break;
}
}
*/