메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

WAT-Arduino128 아두이노 자료실

기초 0. 3개 이상의 Multi Task 작업

2014.05.13 16:33

WhiteAT 조회 수:3859


/*

  3개의 작업을 서로 독립적으로 수행하는 예제입니다.

            - 1초마다 시리얼통신 작업

            - 0.5, 1초 간격으로 ON/OFF 하는 LED

            - 1, 2초 간격으로 ON/OFF 하는 LED

  

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

 

           출처: http://whiteat.com/bArduino

           보드: 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