3개 이상의 Multi Task 작업

아두이노에서 Multi Task 작업

WAT_Multi.h 를 사용하여 아두이노에서 multi task 형태로 작업이 가능합니다.

 

WAT-Arduino128 예제

부품 목록
번호 부품명 수량 기능 판매처
 1 WAT-Arduino128  1 아두이노 https://kit128.com/goods/view?no=64
 2 WAT-LED  1 LED https://kit128.com/goods/view?no=51

WAT-Arduino128 WAT-LED

 

 

소스코드
/*

  3개의 작업을 서로 독립적으로 수행하는 예제입니다.
            - 1초마다 시리얼통신 작업
            - 0.5, 1초 간격으로 ON/OFF 하는 LED
            - 1, 2초 간격으로 ON/OFF 하는 LED

  이 예제로 많은 TASK를 만들어 확장이 가능합니다.

           출처: http://whiteat.com/Arduino
           보드: WAT-128 Arduino
*/ 

#include <WAT_Multi.h> 

WMulti tSerial = WMulti(1000);
WMulti tLED1 = WMulti( 3000);
WMulti tLED2 = WMulti( 3000);
 
// 프로그램 시작 - 초기화 작업
void setup()
{
  Serial.begin(115200);   //시리얼 통신 초기화
  pinMode(PA1,OUTPUT);     //PA1 포트를 출력으로 설정
  pinMode(PA2,OUTPUT);     //PA2 포트를 출력으로 설정
}
 
void loop()
{
  TaskSerial(&tSerial);                // 시리얼 통신 작업
  TaskLED1(&tLED1);                                       // LED1 작업
  TaskLED2(&tLED2);                            // LED2 작업
}
 
int g_Timer = 0;
// 1초마다 타이머 값을 전송
void TaskSerial(WMulti * _task)
{
  if(!_task->IsMyTurn()) return;

  Serial.println(++g_Timer); 
}

// PA1 에 연결된 LED 를 0.5초 ON 하고, 1초간 OFF 를 반복
void TaskLED1(WMulti * _task )
{
  if(!_task->IsMyTurn()) return;

  switch(_task->Status)
  {
    case 0:  digitalWrite(PA1,HIGH);    _task->Next(1000); break;
    case 1:  digitalWrite(PA1,LOW);  _task->SetNext(0,500); break;
    default: _task->Status = 0;
  }
}

// PA2 에 연결된 LED 를 1초 ON 하고, 2초간 OFF 를 반복
void TaskLED2(WMulti * _task )
{
  if(!_task->IsMyTurn()) return;

  switch(_task->Status)
  {
    case 0:  digitalWrite(PA2,HIGH);    _task->Next(2000); break;
    case 1:  digitalWrite(PA2,LOW);  _task->SetNext(0,1000); break;
    default: _task->Status = 0;
  }
}

 

모니터링 화면

프로그램이 실행되고 17초 후에는 17이 출력되며

2개의 LED는 3초마다 동시에 켜집니다.

adc.png

 

 

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다