volatile bool flashLight_flg = 0;
volatile bool rattling_flg = 0;
void flashingIsr()
{
flashLight_flg = !flashLight_flg;
}
void rattlingISR()
{
rattling_flg = !rattling_flg;
}
void rattling ()
{
noTone(7);
for(int k = 0; k<10; k++)
{
tone(7,100);
delay(50);
tone(7,700);
delay(50);
//if (flashLight_flg) break;
if (!rattling_flg) break;
}
}
void flashing()
{
for(int j = 0; j<7; j++)
{
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
if(rattling_flg) break;
if(!flashLight_flg) break;
for(int i=300; i<600; i +=20)
{
tone(7,i);
delay(10);
}
//
digitalWrite(5, LOW);
digitalWrite(6, HIGH);
for(int i=600; i>300; i-=20)
{
tone(7,i);
delay(10);
if(rattling_flg) break;
if(!flashLight_flg) break;
}
}
}
void setup()
{
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
attachInterrupt(0, flashingIsr, FALLING);
attachInterrupt(1, rattlingISR, FALLING);
}
void loop()
{
while(flashLight_flg)
{
flashing();
noTone(7);
if(rattling_flg) break;
if(!flashLight_flg)
{
for(int k = 0; k < 1; k++)
{
if(rattling_flg) break;
if(flashLight_flg) break;
tone(7,800);
delay(300);
}
for(int i=800; i>200; i-=10)
{
const int j = map(i,800,200,250,0);
analogWrite(5,j);
analogWrite(6,j);
tone(7,i);
delay(50);
if(rattling_flg) break;
if(flashLight_flg) break;
}
noTone(7);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
}
}
while (rattling_flg)
{
rattling ();
noTone(7);
}
}