극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계7

in kr-dev 커뮤니티2 years ago

안녕하세요! Jimae입니다.

오늘도 아두이노 loop함수를 분석해봅시다.

loop 함수안에 AutoWateringProgram이함수만 달랑 있지만 이것을 세세하게 분석해봅시다.

unsigned char autoWateringStep = DETECTION;

switch case에 쓰이는 이변수 때문에 처음은 무조건 DETECTION을 실행합니다.

case DETECTION:   // 센서 감지
                   if(UltrasonicDetection() && PressureSensorDetection())   //센서 감지 됬을때 초음파와 압전센서 두개다 동시
                   {
                    TimerCountStart();  // 타이머 카운트 시작

                    autoWateringStep = DETECTION;  // 계속 감지하기 위해 대기
                   }
                   else   // 센서 감지 안될 경우
                   {
                    
                    TimerCountStop();             // 타이머 카운트 멈춤 
                    autoWateringStep = ANALYSIS;  // 카운트된 시간 분석        
                   }
                   break;

이것의 기능은 초음파 센서와 압전센서가 동작을 하게되면 타이머를 동작하게되어 그때부터 시간을 채크합니다.

센서가 더이상 인식이 안될때까지 시간을 재요. 음.. 프로그램을 보니 예전에 분석했던거와 다르게 동작을 하내요.

아무래도 이프로젝트는 단순하게 물체를 인식해서 물을 따라주는것이 아닌 일정시간 동안 센서를 감지하고 감지된 시간동안에 따라서 물을 따라주는것 같습니다.

약간 예상에 벗어났내요. 과거의나... 죽인다..

그다음 ANALYSIS를 실행하죠.

물론 처음부터 센서가 아무것도 감지가 안되도 그냥 ANALYSIS로 넘어갑니다.

#define ONESETTINGSECOND 1 // 첫번째 1초 셋팅 = 50mL
#define TWOSETTINGSECOND 30 // 두번째 30초 셋팅 = 100mL

    case ANALYSIS:    // 카운트된 시간 분석
                  if(second < ONESETTINGSECOND)   // 처음 세팅한 시간 값보다 작을시 감지 안된걸로 치고 다시 감지모드로
                  {
                    TimeCountInit(); 
                    autoWateringStep = DETECTION; // 시간 분석후 기준치에 못미칠때 다시 감지 모드로
                    break;
                  }

                  if(second >= ONESETTINGSECOND) mLCount = 0;        // 1초 이상 시간 경과 50mL 나온다
                  else if(second >= TWOSETTINGSECOND) mLCount = 1;   // 30초 이상 시간 경과 100mL 나온다


                  TimeCountInit();             // 타이머 데이터 초기화
                  autoWateringStep = ACTION;   // 시간 분석후 기준치에 충족할때 동작으로
                  break; 

센서가 1초미만으로 감지되면 DETECTION으로 다시돌아가서 센서를 감지하고

그것이 아니라면 이제 물펌프를 동작하기위해 ACTION으로 넘어갑니다.

    case ACTION:
                
                WaterPumpStart();             // 워터 펌프 동작
                delay(waterTime[mLCount]);    // 각 설정된 시간에 따라 멈춤      
                WaterPumpStop();              // 워터 펌프 멈춤
                
                mLCount = MLCOUNTINITDATA;    // mLCount 변수 초기화
                autoWateringStep = DETECTION; // 다시 감지모드로
                break;

그래서 여기서 물펌프를 동작하죠

switch casse는 이런식으로 주로 일을 쪼개서 변수하나에 의지해서 각각 실행되게끔 구성하는것이바로

시퀀스라고 합니다.

음 분석하고나니까 단순 물따르는 기계가 아니라 다른목적으로 개발되었던것 같습니다.

오래된 프로젝트라 기억이 잘안나내요.

오늘은 여기까지 다들 안녕히 주무세요!

극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계1
극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계2
극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계3
극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계4
극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계5
극한의 아두이노 DIY생활 - 일정한 물을 따라주는 기계6

Sort:  
 2 years ago 

[광고] STEEM 개발자 커뮤니티에 참여 하시면, 다양한 혜택을 받을 수 있습니다.

Coin Marketplace

STEEM 0.26
TRX 0.11
JST 0.033
BTC 64498.18
ETH 3079.08
USDT 1.00
SBD 3.86