티스토리 뷰
시간함수 -millis()함수
1. 드론에서 사용하는 목적
- 자이로센서 값을 이용하여 드론이 회전한 각도 계산
- PID 출력 값을 얻어낼때 미분과 적분을 사용하는데 이때 millis()함수를 이용하여 단위(dt)값을 얻어냄
2. millis()와 delay()의 차이점
millis()함수 : 시간과 관련된 여러개의 작업들을 동시에 수행하고자 할 때, 꼭 필요한 함수 -> 아주 중요한 지연함수
delay()함수 : 여러개의 작업들을 동시에 수행하고자 할 때 사용하기에는 적합하지 않다.
즉, delay() 함수를 이용해서 millis()함수와 다른점을 예시로 들어보면,
A라는 LED와 B라는 LED가 있다고 가정하자, A라는 LED는 1023밀리초 간격으로 ON/OFF를 하고 B라는 LED는 509밀리초 간격으로 ON/OFF를 하고싶다. 그러면 동시에 작업을 수행해야하는데 delay는 동시에 사용을 하기에 적합하지 않으므로 delay함수를 사용 안하고 millis 함수를 사용하는 것이다.
위 내용을 코드상에서 보여드리겠습니다.
//1023밀리초 간격을 LED ON/OFF const int statusLedPin = 14; int statusLedOnOff = LOW; unsigned long prevMillisSL = 0; const long intervalSL = 1023; //509밀리초 간격으로 LED ON/OFF const int lipoLedPin = 15; int lipoLedOnOff = LOW; unsigned long prevMillisLL = 0; const long intervalLL = 509; void setup() { pinMode(statusLedPin, OUTPUT); pinMode(lipoLedPin, OUTPUT); } void loop() { // put your main code here, to run repeatedly: unsigned long currMillis = millis(); if(currMillis - prevMillisSL >= intervalSL){ prevMillisSL = currMillis; statusLedOnOff = (statusLedOnOff = LOW) ? HIGH : LOW; digitalWrite(statusLedPin, statusLedOnOff); } if(currMillis - prevMillisLL >= intervalLL){ prevMillisLL = currMillis; lipoLedOnOff = (lipoLedOnOff == LOW) ? HIGH : LOW; digitalWrite(lipoLedPin, lipoLedOnOff); } }
'드론' 카테고리의 다른 글
[드론] 프로세싱과 esp8266을 이용해서 드론 모터속도 조절하기_1 (0) | 2016.06.27 |
---|---|
[드론] 드론용 모터 소개 및 테스트 (1) | 2016.06.27 |
[드론] Transparent Bridge를 이용해서 Esp8266에 펌웨어 올리기 (15) | 2016.06.19 |
[드론] ESP8266 펌웨어 업로드 시키기 (0) | 2016.06.19 |
[드론] 아두이노 프로 마이크로란? (0) | 2016.06.19 |
Comments