LuckyFace 2017. 4. 19. 13:52

void loop() {

    // Standby state

    if (state==9) {

        if (Serial.available() > 0) {

            select = Serial.read();

            

            // water valve on

            if (select == 'w') {

                inivalveDuration = Serial.parseInt();

                if (inivalveDuration == 0) {

                    inivalveDuration = valveDuration;

                }

                valveOn(inivalveDuration);

            }


void valveOn(unsigned long valveDuration)

{

  bitSet(PORTB,rewardPin);

  delay(valveDuration);

  bitClear(PORTB,rewardPin);

}


loop함수가 돌아가면 아두이노가 꺼지기 전까지 계속 함수가 돌게 된다.


그럼 앞에서 설정했던 변수들과 setup된 사항들을 이용하여 본격적인 함수를 돌려볼수 있게 되겠다.


처음 state는 9으로 설정되어있으며 stand by 상태이다. 


그다음 Serial. available은 현재 버퍼에 데이터가 있는지 확인하는 과정. 없으면 -1로 변환된다고 함. 아직 버퍼에 데이터가 있다는 것이 정확히 이해되지 않으나, Serial 통신과 관련한 함수를 돌리는데 흔히 사용하는 듯.


select 함수는 Serial.read(). 재밌는 점은 


char c = Serial.read();

int c = Serial.read();


이런식으로 reading하는 변수의 성질을 결정할수도 있다는 것! 우리 코드에서 처럼 select이렇게 특별히 변수의 특징을 설정하지 않아도 되는것 같다.


그뒤에 select가 'w'라고 입력된 경우 진행.


Serial.parseInt는 수신되는 데이터가 숫자를 나타내는 문자열일 경우 이를 숫자로 바꿔준다고 함.

따라서 이 경우 w100이라고 입력하면 여기에서 100숫자만 떼어서 inivalveDuration으로 변환하고, 만약 입력되지 않으면 inivalveDuration은 valveDuration으로 변환되는 것 이값은 130으로 초기설정되어있다.


그뒤에 valveOn 나오는 것은 뒤에 정의되어있는 valveOn 함수에 따르는데, 이 함수는 앞서 정의된대로 변환값이 없으므로 void 

그리고 valveOn 으로 정의된 함수이며 입력값은 valveDuration으로 정의되어있음.