극한의 아두이노 DIY생활 - 곡률측정기14
안녕하세요! Jimae입니다.
오늘부터 loop 함수를 볼까합니다.
#include <MsTimer2.h>
#define ENTER 1
#define BACK 0
#define START 1
#define STOP 0
unsigned long TIME = 0;
unsigned long timecheck = 0;
unsigned char drawFlag = STOP;
void setup() {
// put your setup code here, to run once:
LCDInit();
LightSensorInit();
RotaryInit();
SwitchInit();
LightInit();
Serial.begin (9600);
LaserInit();
MsTimer2::set(200, drawing); // flash함수를 200ms마다 호출한다
MsTimer2::start();
}
void loop() {
// put your main code here, to run repeatedly:
if(drawFlag)
{
if(SwitchStateRead() == BACK)
{
LCDSelect(RotarySelectRead());
DistanceCalculationStop();
CurvatureCalculationStop();
RotaryLightCountStop();
LightOff();
}
else
{
LCDSensorView(RotaryDataRead());
}
drawFlag = STOP;
}
SwitchDetect();
LaserDistanceCalculation();
LaserCurvatureCalculation();
}
void drawing(void)
{
drawFlag = START;
}
그래서 이렇게 전체 프로그램을 먼저 공개를 했습니다.
자 그럼다음 loop 함수를 볼까요?
void loop() {
// put your main code here, to run repeatedly:
if(drawFlag)
{
if(SwitchStateRead() == BACK)
{
LCDSelect(RotarySelectRead());
DistanceCalculationStop();
CurvatureCalculationStop();
RotaryLightCountStop();
LightOff();
}
else
{
LCDSensorView(RotaryDataRead());
}
drawFlag = STOP;
}
SwitchDetect();
LaserDistanceCalculation();
LaserCurvatureCalculation();
}
현재 loop 함수는 LCD와 로터리 스위치라는 특수성때문에 그에 맞춰서 구현이 되어있습니다.
우선 먼저 이부분을 설명하기에 앞서 setup 함수쪽에서 놓치고 지나간것이 있는대요.
MsTimer2::set(200, drawing); // flash함수를 200ms마다 호출한다
MsTimer2::start();
200ms 단위로 drawing 함수를 불러오는 타이머 인터럽트 함수입니다.
void drawing(void)
{
drawFlag = START;
}
200ms 단위로 drawFlag 변수를 START의 값으로 초기화 시켜주는것이 이함수의 목적이죠.
이것의 역활은 LCD를 주기적으로 업데이트 시키는것에 초점이 있습니다.
이것을 왜하느냐를 물어본다면 애니메이션 원리를 아시나요?
조금씩 틀린 이미지를 여러장 놓아두고 빠르게 넘기면 이미지가 움직이는것처럼 보이는 착시 현상입니다.
이것도 마찬가지로 주기적으로 LCD의 값을 업데이트 함으로써 로터리 스위치로 움직이고 제어하고 있다는 표현을 주기위해 이러한 타이머 인터럽트를 이용하여 주기적으로 호출하고있어요.
if(drawFlag)
{
if(SwitchStateRead() == BACK)
{
LCDSelect(RotarySelectRead());
DistanceCalculationStop();
CurvatureCalculationStop();
RotaryLightCountStop();
LightOff();
}
else
{
LCDSensorView(RotaryDataRead());
}
drawFlag = STOP;
}
loop에서 이부분은 결국 200ms 단위로 실행을 하는것으로 보시면 됩니다.
오늘은 글이 길어져서 나머지 부분은 다음부터 이어서 진행하도록 하겠습니다.
다들 좋은하루 되세요.
극한의 아두이노 DIY생활 - 곡률측정기1
극한의 아두이노 DIY생활 - 곡률측정기2
극한의 아두이노 DIY생활 - 곡률측정기3
극한의 아두이노 DIY생활 - 곡률측정기4
극한의 아두이노 DIY생활 - 곡률측정기5
극한의 아두이노 DIY생활 - 곡률측정기6
극한의 아두이노 DIY생활 - 곡률측정기7
극한의 아두이노 DIY생활 - 곡률측정기8
극한의 아두이노 DIY생활 - 곡률측정기9
극한의 아두이노 DIY생활 - 곡률측정기10
극한의 아두이노 DIY생활 - 곡률측정기11
극한의 아두이노 DIY생활 - 곡률측정기12
극한의 아두이노 DIY생활 - 곡률측정기13
[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.