ํฌ๊ฒ ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋ค.
์๋์ด๋ ธ์ ์ ์์ด ๊ณต๊ธ๋๋ฉด
ํ๋ฒ๋ง ์คํ
void setup()
{
์๋์ด๋
ธ์ ๋ฌผ๋ฆฌ์ ์ธ ํ๋ค์ ๋ชจ๋ ์ค์ ๋ฑ ์ด๊ธฐ ์ค์ ;
}
๋ฌดํ๋ฐ๋ณต
void loop()
{
ํ๋ก๊ทธ๋จ์ ์ฃผ ๋ด์ฉ;
}
์ด ์ธ์ setup
ํจ์ ์์ชฝ์ ์์นํ๊ฒ ๋๋ ๋ชจ๋ ์ฝ๋๋ ์ ์ฒ๋ฆฌ๋ฅผ ์ํ ๊ฒ์ด๋ฏ๋ก ๋ฐ๋ก ์ค๋ช
ํ์ง ์์ต๋๋ค.
์ํ | ๊ฐ | LED ๋์ |
---|---|---|
๊ฐ์ง๋์์ ๋ | 1 | ON |
๊ฐ์ง๋์ง ์์์ ๋ | 0 | OFF |
ํ๋ก ๋ฐฐ์ ํ์ธ
'๋ ธ๋ง๋์ฐ๊ตฌ์ค'์์ ์ ๋ก๋ํ ๋์์
pin ๋ค์ ๊ฝ์๋ณด๊ธฐ, ํต์ ์๋ ๋ณ๊ฒฝํด๋ณด๊ธฐ,
rx
&tx
๋ฐ๊ฟ๋ณด๊ธฐโฆ
master ์ ์ฒด ์ฝ๋
void setup()
ํจ์
CLK1_PERIOD
= 0.2s๋ง๋ค getSWPosition
ํจ์๋ก ์ฌ๋ผ์ด๋ ์ค์์น์ ์์น ํ์ธ)void setup()
{
Timer1.initialize(CLK1_PERIOD);
Timer1.attachInterrupt(getSWPosition); // set Interrupt
Serial.begin(9600);
pinMode(LED, OUTPUT);
pinMode(PIR, INPUT);
pinMode(SW, INPUT);
configBt.begin(9600);
}
void loop()
ํจ์
๋จ์ํ ์๋์ด๋ ธ์ ์๋ฆฌ์ผ ๋ชจ๋ํฐ์์ ์ฌ๋ผ์ด๋ ์ค์์น์ ์์น๋ฅผ ํ์ธํ๊ธฐ ์ํ ์ฝ๋
if (prev != SW_position)
{
prev = SW_position;
Serial.println(SW_position);
}
PIR ์ผ์์ ๊ฐ์ ์ฝ์ด์จ๋ค. PIR_state = digitalRead(PIR);
slave์์ ๋ธ๋ฃจํฌ์ค๋ก ๋ณด๋ด์จ PIR ์ผ์์ ๊ฐ์ ์ฝ์ด์จ๋ค.
if (BT.available())
{
Slave_PIR_state = BT.read();
}
SW_position, ์ฆ ์ฌ๋ผ์ด๋ ์ค์์น์ ์์น์ ๋ฐ๋ผ ๋์์ด ๋๋๋ค.
์ค์์น ์์น์ ๋ฐ๋ฅธ ๋์์ SW_POS1
, SW_POS2
, SW_X
์ ์ธ ์ํ๋ก ๋๋๋ฉฐ, ๋ค์๊ณผ ๊ฐ๋ค.
SW_POS1
: ์ผ์์ ๋ฐ๋ฅธ ์กฐ๋ช
(LED) ์ ์ด๋ฅผ ํ๋ ์ํ
SW_POS2
: ์กฐ๋ช
(LED) ๋๊ธฐ ๋์์ ํ๋ ์ํ
SW_X
: ์ค์์น๊ฐ ์ค๊ฐ์ ๊ฑธ๋ฆฌ๋ ๋ฑ ์ค์์น ์์น๊ฐ ์๋ชป๋ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ๊ธฐ ์ํ ์ํ
enum SW_POS
{
SW_X, // invalid switch position
SW_POS1, // sensored light
SW_POS2, // OFF
} SW_position = SW_X;
์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ค์ ๋์์ ๋ค์ ์ฝ๋์์ ์ ์ดํ๋ฉฐ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ๋ค.
switch (**SW_position**)
{
case **SW_POS1**: // ์ค์์น์ ์ํ๊ฐ SW_POS1์ผ ๋ ๋์
**<if์ ์ค๋ช
>
LED๊ฐ ์ผ์ ธ์์ผ๋ฉด master์ PIR์ผ์๋ Slave์ PIR์ผ์์ ๊ฐ์ง๋์๋์ง ํ์ธํ๊ณ
๊ฐ์ง๋์๋ค๋ฉด ๊ทธ๋๋ถํฐ 30์ด๋ฅผ ์ธ๊ธฐ ์์ํ๋ค.
30์ด๊ฐ ์ง๋๊ธฐ ์ ์ ์ผ์์ ๊ฐ์ง๊ฐ ๋๋ฉด ์ด๊ธฐํ๋๋ค.
30์ด๊ฐ ์ง๋๋ฉด ์กฐ๋ช
์ ๋๋ค.
<else์ ์ค๋ช
>
LED๊ฐ ๊บผ์ ธ์๋ค๋ฉด master์ PIR์ผ์๋ Slave์ PIR์ผ์์ ๊ฐ์ง๋์๋์ง ํ์ธํ๊ณ
๊ฐ์ง๋์๋ค๋ฉด LEDGradOn ํจ์๋ก LED๋ฅผ 5์ด์ ๊ฑธ์ณ ํจ๋ค.
LEDGradOn ํจ์์์๋ master์ LED ๋ฐ๊ธฐ๋ฅผ ์กฐ์ ํจ๊ณผ ๋์์
slave์ ๋ธ๋ฃจํฌ์ค๋ก ๋ฐ๊ธฐ ๊ฐ์ ๋ณด๋ด slave์ LED ๋ฐ๊ธฐ ๋ํ ๋์์ ์กฐ์ ํ๋ค.**
case **SW_POS2**: // ์ค์์น์ ์ํ๊ฐ SW_POS2์ผ ๋ ๋์
**LEDGradOff ํจ์๋ก LED๋ฅผ 5์ด์ ๊ฑธ์ณ ๋๋ค.
LEDGradOff ํจ์๋ LEDGradOn ํจ์์ ๋ง์ฐฌ๊ฐ์ง ๋ฐฉ์์ผ๋ก
๋ธ๋ฃจํฌ์ค๋ก slave์ LED ๋ฐ๊ธฐ ๋ํ ๋์์ ์กฐ์ ํ๋ค.**
default: // ์ค์์น์ ์ํ๊ฐ SW_X์ผ ๋ ๋์
**SW_X, ์ฆ ์ค์์น ์ํ๊ฐ ์๋ชป๋ ๊ฒฝ์ฐ์ ํด๋นํ๋ฉฐ ์๋ฆฌ์ผ ๋ชจ๋ํฐ์ ๋ฌธ๊ตฌ๋ฅผ ์ถ๋ ฅํ๋ค.**
}
void loop()
{
if (prev != SW_position)
{
prev = SW_position;
Serial.println(SW_position);
}
// Get Current states of PIR sensors
PIR_state = digitalRead(PIR);
if (BT.available())
{
Slave_PIR_state = BT.read();
}
switch (SW_position)
{
case SW_POS1:
if (LED_state)
{ // ON
if (PIR_state || Slave_PIR_state)
{ // either sensor is detected
counter = CNT_PERIOD; // initialize counter
}
else
{
if (counter == 0)
{
analogWrite(LED, 0); // OFF
BT.write((byte)0); // Slave LED OFF
LED_state = false;
}
}
}
else
{ // OFF
if (PIR_state || Slave_PIR_state)
{ // either sensor is detected
LedGradOn(); // Gradually turns on LEDs
LED_state = true;
counter = CNT_PERIOD; // initialize counter
}
}
break;
case SW_POS2:
LedGradOff(); // Gradually turns off LEDs
LED_state = false;
break;
default:
Serial.println("Wrong switch position");
break;
}
}