[์๋์ด๋ ธ] ์ฃผ๊ธฐ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ
ใ ์ฃผ๊ธฐ์ ์ธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ใ
[ ๋์งํธ ๋ฐ ์๋ ๋ก๊ทธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ]
์ ๋ ฅ | ์ถ๋ ฅ | |
๋์งํธ | int pin_no = 13; pinMode(pin_no, INPUT); boolean value = digitalRead(pin_no); |
int pin_no = 13; boolean value = HIGH; pinMode(pin_no, OUTPUT); digitalWrite(pin_no, value); |
์๋ ๋ก๊ทธ | int pin_no = A0; pinMode(pin_no, INPUT); int value = analogRead(pin_no); |
int pin_no = 3; int dutyCycle = 128; pinMode(pin_no, OUTPUT); analogWrite(pin_no, dutyCycle); |
[ delay() ํจ์ ]
- ์ง์ ํ ์๊ฐ๋งํผ ์คํ์ ๋๊ธฐํ๋ ํจ์
- ๋ฐ๋ฆฌ์ด ๋จ์์ ์ง์ฐ์๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ
- delay() ํจ์ ์คํ ์ค์ ํ๋ก๊ทธ๋จ์ด ์ผ์ ์ค๋จ
delay ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒํผ๊ณผ LED ์ ์ด ์์
// C++ code
// delay() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒํผ๊ณผ LED ์ ์ด
int pin_button = 2;
int pin_led_1 = 12;
int pin_led_2 = 8;
boolean LED_state_1 = false; // 13๋ฒํ์ LED ์ ๋ฉธ ์ฌ๋ถ ํ๋จ
boolean LED_state_2 = false; // 9๋ฒํ์ LED ์ ๋ฉธ ์ฌ๋ถ ํ๋จ
void setup()
{
Serial.begin(9600);
pinMode(pin_button, INPUT);
pinMode(pin_led_1, OUTPUT);
digitalWrite(pin_led_1, LED_state_1);
pinMode(pin_led_2, OUTPUT);
digitalWrite(pin_led_2, LED_state_2);
}
void loop()
{
digitalWrite(pin_led_1, LED_state_1);
delay(1000);
LED_state_1 = !LED_state_1;
if(digitalRead(pin_button)){
LED_state_2 = !LED_state_2;
digitalWrite(pin_led_2, LED_state_2);
}
}
- ํ๋ก๊ทธ๋จ์ ์คํ ์ํค๋ฉด loop() ํจ์์ LED_state_1 = !LED_state_1; ์ฝ๋์ ์ํด 12๋ฒ pin๊ณผ ์ฐ๊ฒฐ๋ LED๊ฐ
์ ๋ฉธํ๋ ๊ฒ์ ํ์ธ ๊ฐ๋ฅ
- ๋ฒํผ์ ๋๋ฅด๋ฉด 8๋ฒ pin๊ณผ ์ฐ๊ฒฐ๋ LED๊ฐ ์ ๋ฑํ๊ฒ ๋๊ณ ๋ค์ ๋ฒํผ์ ๋๋ฅด๋ฉด ์๋ฑํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง
loop() ํจ์ ๋ด์ delay(1000); ์ฝ๋๊ฐ ์คํ์ค์ ์์ด ๋ฒํผ์ด ๋๋ฆฐ ์ฆ์ 8๋ฒ pin์ LED์ ์ํ๊ฐ ๋ณ๊ฒฝ๋์ง ์์.
- ์ด๋ฌํ ์ฆ๊ฐ์ ๋ฐ์์ด ํ์ํ ๊ฒฝ์ฐ์๋ delay()ํจ์ ๋์ millis() ํจ์๋ฅผ ์ฌ์ฉํด์ผํจ.
[ millis() ํจ์ ]
- ํ์ฌ ์คํ ์ค์ธ ์ค์ผ์น๊ฐ ์์๋ ์ดํ์ ๊ฒฝ๊ณผ ์๊ฐ์ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ๋ฐํ
- delay() ํจ์๊ฐ ์คํ๋๋ ๋์ค์๋ ํ๋ก๊ทธ๋จ์ด ์ผ์์ ์ผ๋ก ์ค๋จ๋๊ธฐ ๋๋ฌธ์ ์ํ์ ์ฃผ๊ธฐ์ ์ธ ๊ฒ์ฌ๊ฐ ๋ถ๊ฐ๋ฅ
- ์ด๋ฅผ ๋ณด์ํ๋ ๋ฐฉ์์ด polling ๋ฐฉ์์.
- miilis() ํจ์๋ ํ์ฌ๊น์ง์ ์คํ ์๊ฐ์ ์ฆ์ ๋ฐํํ๋ฏ๋ก ์ฆ์ ๋ค๋ฅธ ์์ ์ํ ๊ฐ๋ฅ
delay() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ธ๋งํฌ ํ ์คํธ ์์
// C++ code
// delay() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ธ๋งํฌ ํ
์คํธ
// 1์ด ๊ฐ๊ฒฉ์ผ๋ก LED ์ ๋ฉธ
int pin_LED = 9;
boolean LED_state = false;
void setup()
{
Serial.begin(9600);
pinMode(pin_LED, OUTPUT);
digitalWrite(pin_LED, LED_state);
}
void loop()
{
LED_state = !LED_state;
digitalWrite(pin_LED, LED_state);
delay(1000);
}
millis() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ธ๋งํฌ ํ ์คํธ ์์
// C++ code
// millis() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ธ๋งํฌ ํ
์คํธ
int pin_LED = 9;
boolean LED_state = false;
unsigned long time_previous;
unsigned long time_current;
unsigned long count = 0; // loop ํจ์ ์คํ ํ์
void setup()
{
Serial.begin(9600);
pinMode(pin_LED, OUTPUT);
digitalWrite(pin_LED, LED_state);
time_previous = millis(); // ์์ ์๊ฐ ์ธก์
}
void loop()
{
time_current = millis(); // ํ์ฌ ์๊ฐ
count++;
// 1์ด ์ด์ ์๊ฐ์ด ๊ฒฝ๊ณผํ ๊ฒฝ์ฐ
if(time_current - time_previous >= 1000){
time_previous = time_current; // ์์ ์๊ฐ ๊ฐฑ์
LED_state = !LED_state;
digitalWrite(pin_LED, LED_state);
Serial.println(count); // 1์ด์ ์คํ๋๋ loop ํจ์ ํ์
count = 0;
}
}
millis ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒํผ๊ณผ LED ์ ์ด ์์
// C++ code
// millis() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒํผ๊ณผ LED ์ ์ด
// millis() ํจ์๋ฅผ ํตํด ๋ฒํผ์ด ๋๋ฌ์ง๋ ์ฆ์ LED_state์ ๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ
int pin_button = 2;
int pin_led_1 = 12;
int pin_led_2 = 8;
boolean LED_state_1 = false; // 13๋ฒํ์ LED ์ ๋ฉธ ์ฌ๋ถ ํ๋จ
boolean LED_state_2 = false; // 9๋ฒํ์ LED ์ ๋ฉธ ์ฌ๋ถ ํ๋จ
unsigned long time_previous;
unsigned long time_current;
void setup()
{
Serial.begin(9600);
pinMode(pin_button, INPUT);
pinMode(pin_led_1, OUTPUT);
digitalWrite(pin_led_1, LED_state_1);
pinMode(pin_led_2, OUTPUT);
digitalWrite(pin_led_2, LED_state_2);
time_previous = millis(); // ์์ ์๊ฐ
}
void loop()
{
time_current = millis(); // ํ์ฌ ์๊ฐ
if(time_current - time_previous >= 1000){
time_previous = time_current; // ์์ ์๊ฐ ์ด๊ธฐํ
LED_state_1 = !LED_state_1;
digitalWrite(pin_led_1, LED_state_1);
}
if(digitalRead(pin_button)){
LED_state_2 = !LED_state_2;
digitalWrite(pin_led_2, LED_state_2);
delay(100);
}
}
- ์์ delay() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ดํ ๋์ ๋ฌ๋ฆฌ millis() ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฒํผ์ ๋๋ฆ๊ณผ ๋์์ 8๋ฒ pin๊ณผ ์ฐ๊ฒฐ๋
LED๊ฐ ์ ๋ฑ, ์๋ฑํ๋ ๊ฒ์ ํ์ธ ๊ฐ๋ฅ
delay ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒํผ๊ณผ LED ์ ์ด(๋ฒํผ ์ํ ๋ณํ ๊ฒ์ฌ) ์์
// C++ code
// millis() ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒํผ๊ณผ LED ์ ์ด
// ๋ฒํผ์ ๋๋ฅด๋ ์๊ฐ์๋ง LED_2 ์ํ ๋ณ๊ฒฝ
int pin_button = 2;
int pin_led_1 = 12;
int pin_led_2 = 8;
boolean LED_state_1 = false; // 13๋ฒํ์ LED ์ ๋ฉธ ์ฌ๋ถ ํ๋จ
boolean LED_state_2 = false; // 9๋ฒํ์ LED ์ ๋ฉธ ์ฌ๋ถ ํ๋จ
unsigned long time_previous;
unsigned long time_current;
boolean button_state_previous=false; // ๋ฒํผ์ ์ด๊ธฐ ๊ฐ
boolean button_state_current; // ๋ฒํผ์ ํ์ฌ ์ํ
void setup()
{
Serial.begin(9600);
pinMode(pin_button, INPUT);
pinMode(pin_led_1, OUTPUT);
digitalWrite(pin_led_1, LED_state_1);
pinMode(pin_led_2, OUTPUT);
digitalWrite(pin_led_2, LED_state_2);
time_previous = millis(); // ์์ ์๊ฐ
}
void loop()
{
time_current = millis(); // ํ์ฌ ์๊ฐ
if(time_current - time_previous >= 1000){
time_previous = time_current; // ์์ ์๊ฐ ์ด๊ธฐํ
LED_state_1 = !LED_state_1;
digitalWrite(pin_led_1, LED_state_1);
}
button_state_current = digitalRead(pin_button);
if(button_state_current){
if(button_state_previous == false){
button_state_previous = true;
LED_state_2 = !LED_state_2; // 8๋ฒ pin LED์ ์ํ ๋ณ๊ฒฝ
digitalWrite(pin_led_2, LED_state_2);
}
}
else
button_state_previous = false;
Serial.println(button_state_previous);
delay(1000);
}
- ๋ฒํผ์ด ๋๋ฌ์ง๋ ์๊ฐ์๋ง pin_led_2์ ์ํ๊ฐ ๋ฐ์ ๋๋ ์ฝ๋
[ ๊ฐ๋ณ์ ํญ์ผ๋ก ๋ธ๋งํฌ ์๋ ์ ์ด ]
- millis() ํจ์๋ฅผ ํตํด ์ฌ์ฉ์์ ์ ๋ ฅ์ ์ฆ๊ฐ์ ์ผ๋ก ๋ฐ์ํ๋ ๊ฒ์ ์ด์ฉํ๋ฉด
๊ฐ๋ณ์ ํญ์ ๊ฐ ๋ณํ๋ฅผ ํตํด ๋ธ๋งํฌ ์๋๋ฅผ ์กฐ์ ๊ฐ๋ฅ
[ map() ํจ์ ]
- ๊ฐ๋ณ์ ํญ์ ์๋ ๋ก๊ทธ ์ ๋ ฅ๊ฐ(0~1023)์ PWM ๊ฐ(0~255)์ผ๋ก ์ถ๋ ฅํ๊ณ ์ ํ ๋
์ ๋ ฅ๊ฐ์ ๋ฒ์๋ฅผ ์ถ๋ ฅ๊ฐ์ ๋ฒ์๋ก ๋ง์ถ์ด์ผํ๋๋ฐ ์ด๋ฅผ ๋งคํ์ด๋ผํจ.
[ํ์]
- long map(value, fromLow, fromHigh, toLow, toHigh)
[๋งค๊ฐ๋ณ์]
- value : maping ํ๊ณ ์ ํ๋ ๊ฐ
- fromLow : ํ์ฌ ๋ฒ์์ ํํ
- fromHigh : ํ์ฌ ๋ฒ์์ ์ํ
- toLow : ๋ชฉํ ๋ฒ์ ๊ฐ์ ํํ
- toHigh : ๋ชฉํฌ ๋ฒ์ ๊ฐ์ ์ํ
[๋ฐํ]
- ์ง์ ํ ๋ฒ์๋ก maping๋ ๊ฐ
๊ฐ๋ณ์ ํญ์ผ๋ก ๋ธ๋งํฌ ์๋ ์ ์ด ์์
// C++ code
// ๊ฐ๋ณ์ ํญ์ 0~1023 ์ฌ์ด ๊ฐ์ 500~1500 ms ๋จ์๋ก ๋ณํํ์ฌ ๋ธ๋งํฌ ์๋ ์ ์ด
// ๊ฐ๋ณ์ ํญ ๊ฐ๊ณผ ์ ๋ฉธ ๊ฐ๊ฒฉ ์ฌ์ด ๋ณํ์ ์ํด map() ํจ์ ์ฌ์ฉ
int pin_led = 13;
unsigned long time_previous;
unsigned long time_current;
unsigned long interval = 1000; // ์ ๋ฉธ ๊ฐ๊ฒฉ
boolean LED_state = false;
void setup()
{
Serial.begin(9600);
pinMode(pin_led, OUTPUT);
digitalWrite(pin_led, LED_state);
pinMode(A0, INPUT);
time_previous = millis();
}
void loop()
{
time_current = millis();
if(time_current - time_previous >= interval){
Serial.print("Current interval is ");
Serial.print(interval);
Serial.println("ms");
time_previous = time_current;
LED_state = !LED_state;
digitalWrite(pin_led, LED_state);
}
int adc = analogRead(A0);
// A0๋ก๋ถํฐ ์ฝ์ด์จ ์๋ ๋ก๊ทธ ๊ฐ(0~1023)์
// ms ๋จ์(500~1500/0.5s ~ 1.5s)๋ก ๋ณํํ์ฌ ๋ธ๋งํฌ ์๋ ์ ์ด
interval = map(adc, 0, 1023, 500, 1500);
}