Arduino에서 마이크로초 단위로 지연 추가
이 튜토리얼에서는 Arduino에서 delayMicroseconds()
및 micros()
기능을 사용하여 코드에 마이크로초 단위로 지연을 추가하는 방법에 대해 설명합니다.
Arduino에서 마이크로초 단위로 지연 추가
때때로 Arduino에서는 특정 시간 동안 작업을 실행해야 합니다. 예를 들어 LED를 깜박이려면 1초와 같은 특정 시간 동안 LED를 켠 다음 꺼야 합니다.
Arduino에서 delayMicroseconds()
함수를 사용하여 마이크로초 단위로 지연을 추가할 수 있습니다. 예를 들어 특정 시간 간격으로 직렬 모니터에 일부 숫자를 인쇄해야 한다고 가정합니다.
지연을 추가하지 않고 숫자를 직접 인쇄하면 숫자가 너무 빨리 인쇄되어 마이크로 컨트롤러가 빠르기 때문에 프로세스를 볼 수도 없습니다. 코드에 약간의 지연을 추가하면 지연에 따라 숫자가 인쇄됩니다.
하나의 숫자가 인쇄됩니다. 프로그램은 지연을 기다리고 다음 번호가 인쇄됩니다.
예를 들어 직렬 모니터 창에 임의의 숫자를 인쇄하고 코드에 마이크로초 단위의 지연을 추가해 보겠습니다.
예:
long MyRnd;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(0));
}
void loop() {
MyRnd = random(100);
Serial.println(MyRnd);
delayMicroseconds(1000);
}
위의 코드에 1000마이크로초 지연을 추가했습니다. delayMicrosends()
함수의 입력은 부호 없는 정수이며 함수 내에서 전달할 수 있는 최대 수는 16383입니다.
더 큰 값을 추가하면 코드에서 극도의 샷 지연이 발생합니다. 이 함수는 아무 것도 반환하지 않습니다.
밀리초 단위로 지연을 추가하려면 delay()
함수를 사용할 수 있습니다. 이 함수의 입력이 unsigned long 데이터 유형이기 때문에 delay()
함수를 사용하여 긴 지연을 추가할 수 있습니다.
프로그램에 지연을 추가하면 다른 모든 프로세스는 센서 입력처럼 정지되지만 인터럽트는 PWM처럼 작동합니다. 이 문제를 해결하기 위해 Arduino 보드가 실행되기 시작했을 때 mc에서 경과된 시간을 확인하는 데 사용되는 micros()
함수를 사용할 수 있습니다.
예를 들어 micros()
함수를 사용하여 Arduino 보드가 실행되기 시작한 이후의 시간을 마이크로초 단위로 확인합니다.
예:
void setup() { Serial.begin(9600); }
void loop() {
Serial.println(micros());
delay(1000);
}
출력:
1060
1001852
2003016
3004172
delay()
함수를 사용하여 코드에서 출력을 보기 위해 코드에 지연을 추가했습니다. micros()
함수 이전에 코드 라인을 실행하는 데 1060마이크로초가 걸렸습니다.
보드마다 주파수가 다르기 때문에 명령을 실행하는 데 걸리는 시간은 Arduino 보드의 유형에 따라 다릅니다. 밀리초 단위로 시간을 기록하려면 millis()
함수를 사용할 수 있습니다.
millis()
및 micros()
기능은 Arduino에서 실행 중인 다른 프로세스를 중단하지 않습니다. delay()
및 delayMicroseconds()
기능과 동일한 작업을 수행하기 위해 조건문과 함께 사용할 수 있습니다.
millis()
함수를 사용하여 시간을 확인할 수 있고 if
문을 사용하여 특정 시간 동안 작업을 실행할 수 있습니다.
예를 들어 시리얼 모니터에 어떤 텍스트를 출력하고 1초 간격으로 텍스트를 출력하기 위해 1초 지연을 추가해 봅시다.
예:
long t1 = 0;
long t2 = 0;
long t;
void setup() { Serial.begin(9600); }
void loop() {
t1 = millis();
t = t1 - t2;
if (t > 1000) {
Serial.println("Hello World");
t2 = t1;
}
}
출력:
Hello World
Hello World
Hello World
위의 코드에서 시간 간격의 차이를 사용하여 경과 시간을 얻었습니다. 시간이 1초 또는 1000밀리초보다 크면 텍스트를 인쇄하고 두 번째 시간 간격을 첫 번째 시간 간격으로 변경하여 차이를 0으로 만듭니다.
출력은 시리얼 모니터 창에 1초의 시차를 두고 텍스트가 출력되는 것을 보여줍니다.