본문으로 바로가기

요즘 어쩌다 Python과 아두이노를 오락가락합니다.^^. 제가 최근 아두이노로 작업을 하다가 타이머의 개념이 필요해서 이전에 제가 작성했던 아두이노 타이머 라이브러리를 사용해서 해결하려 한 적이 있는데요. 시스템 자원이 부족해서 그걸로는 안되더라구요ㅠㅠ. 그래서 인터넷을 살짝꿍 서치하다가 알게된 방법에 또 언제나 그렇듯 양념을 살짝 쳐서 이렇게 공유하게 됩니다.^^

float dt = 0.02;
float freq = 0.5;
unsigned long timer, counter;

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  counter = 0;
}

void loop() {
  timer = millis();

  // put your main code here, to run repeatedly:
  counter += 1;
  
  float y = 10 * sin(2 * PI * freq * counter * dt);
  
  Serial.println(y);

  // put your main code here, to run repeatedly:
  
  timer = millis() - timer;
  timer = (dt * 1000) - timer;
  
  if (int(timer)<0) { 
    Serial.print(int(timer)); 
    Serial.print(" : ");
    Serial.println("Timer Error. System Halt");
    delay(50);
    abort(); 
  }
  
  delay(timer);
}

생각보다 코드는 쉬운데요. 위 코드의 목적은 sin함수를 계산해서 시리얼로 보내구요. 그 시간간격을 20ms로 유지하겠다는 거죠. 원리는 아주 간단합니다. 시간간격을 20ms를 목표로 두고, loop()의 코드가 시작될때 시간을 측정하고, 마지막에 시간을 측정해서 남은 만큼 쉬면 되죠. 여기서 테스트용으로 만들고 있는 사인 곡선에서 사용하는 시간(t)을 꼭 counter를 사용해서 올바른 테스트입니다. 지금 목적은 설정된 시간간격이 잘 동작하는지 보는 거니까요.^^

당연한 이야기지만, 그럴경우 설정된 20ms보다 코드가 많이 걸릴 수도 있잖아요. 그래서 if 문에서 그런 상황을 체크하다가 시스템을 멈추는 거죠^^

이게 freq를 1초로 둔 겁니다. x축 숫자는 맞지 않구요. 전 그냥 초시계로 계속 측정했는데 뭐 괜찮네요^^

이건 freq를 0.5로 본거구요.

이건 2로 본겁니다. 나쁘지 않네요.. 간편하게 타이머를 구현할 수 있어서 다양한 필터에 러프하게나마 사용해볼 수 있을 것 같습니다.^^

아.. 저부분에 강제로 delay를 줘서 시간이 설정된 20ms보다 더 걸릴때 어떻게 되는지 보았는데요.

네.. 20에서 -80만큼(100이죠)이어서 에러라고 잘 동작하네요^^


댓글을 달아 주세요

  1. BlogIcon 북두협객 2018.05.16 10:21 신고

    학생 때 배운 언어는 C, C++, 비주얼베이직, 델파이 등 가장 기초중에 기초만 익히고 전공 살리지 못하고 여기까지 왔네요~

  2. BlogIcon 스티마 2018.05.16 11:44 신고

    타이머로 응용을 하신거네요!

  3. BlogIcon Bliss :) 2018.05.16 13:22 신고

    그러게요~! 저도 그 생각이 들었어요 저야 아는게 없어서 다 @.@ 이리 보이지만, 여러 프로그래밍 언어를 다루다 보면 가끔 혼선이 있지 않을까 싶은 생각이 들었어요. 그래도 두루 알고 있으면 서로의 장단점도 알게 되고 활용하는 센스도 늘고 그럴 듯싶네요. 에러 나오면 식겁하는 일인ㅋㅋㅋ 작동 여부를 확인하기 위한 에러 유도..부..럽습니다ㅎㅎ 활기찬 오후 되세요!

  4. BlogIcon 휴식같은 친구 2018.05.16 15:22 신고

    아두이노가 생각보다 시스템 자원을 많이 잡아먹나봅니다.
    하긴 모듈형태의 프로그램이라 무거워 보이긴 합니다.

  5. BlogIcon 즐거운 우리집 2018.05.16 15:49 신고

    언제나 봐도 멋지십니다 ㅎ

  6. BlogIcon 귀요미디지 2018.05.16 15:55 신고

    생각하신데로 결과가 나온건가봐요 ^^
    봄비가 조금은 요란하게 내리는 오늘이네요 ..
    빗소리 들으며 평상에 앉아 파전 먹고 픈 날이네요 ㅎㅎ
    즐거운 시간 되세요

  7. BlogIcon 모바일 정보창고 2018.05.16 22:42 신고

    가...간단하게... 사용 할 수 있을 것 같네요 ^^;;

  8. BlogIcon 핑구야 날자 2018.05.17 07:20 신고

    쉬운거 같기도 하고 있습니다 프로그램을 모르는 분은 어려울 수도 있겠네요

  9. BlogIcon 공수래공수거 2018.05.17 09:00 신고

    생각보다 쉬운게 저는 생각보다 어렵습니다 ㅎ

  10. BlogIcon 멜로요우 2018.05.17 14:09 신고

    역시 전공을 하신분은 이런거 보니 대단 한거같아요~ ㅋ 조금이라도 알면 이해가될덴데..ㅠㅠ

  11. BlogIcon IT넘버원 2018.05.18 06:06 신고

    타이머로 응용하신다니 멋지십ㄴ디ㅏ.^^