์‚ฌ๋ฌผ์ธํ„ฐ๋„ท/์•„๋‘์ด๋…ธ

[์•„๋‘์ด๋…ธ] ์ฃผ๊ธฐ์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ

ใ‚ใกใ‚ƒใใกใ‚ƒ ้–‹็™บ่€…๐Ÿฆพ 2022. 4. 30. 02:15

ใ€Š ์ฃผ๊ธฐ์ ์ธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ใ€‹

 

[ ๋””์ง€ํ„ธ ๋ฐ ์•„๋‚ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ]

  ์ž…๋ ฅ ์ถœ๋ ฅ
๋””์ง€ํ„ธ 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);
}