Arduino

아두이노 ThreadController : Mult-Thread 예제

작성자 임베디드코리아 작성일26-05-24 16:46 조회36회 댓글0건

첨부파일

<* ThreadController 라이브러리 *>
● ThreadController는 복잡한 delay() 함수 없이 여러 개의 작업을 독립적이고,
    주기적으로 실행할 수 있도록 도와주는 ArduinoThread 라이브러리 핵심이다.
● 아두이노는 기본적으로 싱글 스레드 기반이라 동시에 여러 작업을 처리하기 어렵다.
    ▶ThreadController는 각각의 작업(Thread)을 등록하고,
      loop()가 실행될 때 주기(Interval)에 맞춰 해당 작업들의 실행 여부를 판단하여 실행한다.

◎ 아두이노에서 여러 작업을 동시에 처리할 때 ThreadController를 사용하지 않고
    스레드 객체만 생성한다면, 스레드가 주기적으로 실행되지 않거나
    메인 루프에서 스레드 실행을 수동으로 제어해야 하는 불편함이 발생한다.
◎ ThreadController는  주기(interval)에 맞게 run() 메서드를 호출해 주는 역할을 한다.
◎ ThreadController를 쓰지 않으려면 메인 loop()문 안에서
    각 스레드 객체의 .shouldRun()과 .run()을 일일이 조건문으로 확인하고 실행해주어야 한다.
◎ 멀티스레딩 환경을 구축하려면 ThreadController에 스레드를 추가하고,
    메인 루프에서 .run()을 실행시켜야 한다.

---> Thread_Multy_ThreadController.ino  <----------------------------
#include <Thread.h>
#include <ThreadController.h>

ThreadController controll = ThreadController();

/* My Multi Thread */
Thread myThread01 = Thread();
Thread myThread02 = Thread();

int m_Count = 0;
int T1_Count = 1000;
int T2_Count = 2000;

/* threadAction for myThread */
void threadAction(){
    ++ T1_Count;
    Serial.print("threadAction : ");
    Serial.print(millis());
    Serial.print(" , ");
    Serial.println(T1_Count);
    delay(1000);
}

/*  threadInput for myThread */
void threadInput(){
    ++ T2_Count;
    Serial.print(" threadInput : ");
    Serial.print(millis());
    Serial.print(" , ");
    Serial.println(T2_Count);
    delay(1000);
}

void setup() {
  Serial.begin(9600);

  myThread01.onRun(threadAction);
  myThread01.setInterval(500);

  myThread02.onRun(threadInput);
  myThread02.setInterval(800);

  controll.add(&myThread01);
  controll.add(&myThread02);
}

void loop() {
  controll.run();

  ++m_Count;
  Serial.print("Main Thread :  ");
  Serial.println(m_Count);

  delay(1000);
}