/* Desenvolva um projeto microcontrolado que permita comtrolar o acionamento de uma lâmpada de forma que seja possível controlar o acionamento da mesma pelo monitoramento de um interruptor e da seguinte lógica:
A lâmpada deverá iniciar desligada.
Toda vez em que qualquer um dos interruptores for pressionado a lâmpada deverá ser acionada pelo intervalo de 5 s
Caso algum dos interruptores seja pressionado antes do término do período, este deverá ser reiniciado
*/
#define m1 10
#define m2 11
#define fce 5
#define fcd 4
#define pir 3
#define ch1 2
int inverte=0, estado_ant, estado;;
void setup()
{
attachInterrupt(0,muda,RISING); //inicializa a função muda() e a configura para ser executada cada vez que for detectado uma borda de descida no pino 2
attachInterrupt(1,para,RISING); //inicializa a função para() e a configura para ser executada cada vez que for detectado uma borda de descida no pino 2
for(int i=2;i<6;i++)
pinMode(i, INPUT);
pinMode(m1, OUTPUT);
pinMode(m2, OUTPUT);
digitalWrite(m1,0);
digitalWrite(m2,0);
}
void loop()
{
if((inverte==1)&&!digitalRead(fcd))
{
digitalWrite(m1,1);
digitalWrite(m2,0);
while(digitalRead(fce));
do
{
estado_ant=digitalRead(fce);
delayMicroseconds(100);
estado=digitalRead(fce);
} //técnica debouce
while(estado!=estado_ant);
digitalWrite(m1,0);
}
if((inverte==0)&&!digitalRead(fce))
{
digitalWrite(m1,0);
digitalWrite(m2,1);
while(digitalRead(fcd));
do
{
estado_ant=digitalRead(fcd);
delayMicroseconds(100);
estado=digitalRead(fcd);
} //técnica debouce
while(estado!=estado_ant);
digitalWrite(m2,0);
}
}
void para()
{
digitalWrite(m1,0);
digitalWrite(m2,0);
while(digitalRead(pir));
if(inverte==1)
{
digitalWrite(m1,1);
}
if(inverte==0)
{
digitalWrite(m2,1);
}
}
void muda() //sempre que o interruptor for pressionado
{
for(int t=0;t<50;t++)
{
do
{
estado_ant=digitalRead(ch1);
delayMicroseconds(10);
estado=digitalRead(ch1);
} //técnica debouce
while(estado!=estado_ant);
}
inverte=!inverte;
}