====== Ictu() ====== ''Ictu()''는 입력의 상승 횟수를 세고 설정값에 도달하면 true를 반환합니다. {{:commands:reference:ictu.svg?900|Ictu 명령어 동작 흐름}} ''bool Ictu(uint8_t counter_id, bool CU, bool RESET, int32_t PV)'' ===== 명령어 ===== ^ 명령어 ^ 인수 ^ 반환값 ^ 동작 ^ | ''Ictu(counter_id, CU, RESET, PV)'' | ''uint8_t counter_id'' — 카운터를 구분하는 번호. 같은 작업에는 같은 번호 사용\\ ''bool CU'' — 개수를 셀 입력 신호. LOW에서 HIGH로 바뀔 때 1 증가\\ ''bool RESET'' — true이면 현재 카운트값을 0으로 초기화\\ ''int32_t PV'' — 목표 개수. 현재값이 이 값 이상이면 true 반환 | ''bool'' | 입력의 상승 횟수를 세고 설정값에 도달하면 true를 반환합니다. | **처음 사용하는 분을 위한 설명** ''Ictu()''는 센서가 켜져 있는 시간을 재는 명령어가 아니라, 센서가 ''LOW''에서 ''HIGH''로 바뀐 횟수를 세는 명령어입니다. 예를 들어 물건이 센서 앞을 한 번 지나가면 입력이 ''LOW → HIGH → LOW''로 변하고 카운터는 1 증가합니다. 센서가 계속 ''HIGH''인 동안에는 여러 번 세지 않습니다. 호출 형식 ''Ictu(counter_id, CU, RESET, PV)''는 다음과 같이 읽으면 됩니다. * ''counter_id'': 여러 카운터를 구분하는 번호입니다. 같은 작업에는 항상 같은 번호를 사용합니다. * ''CU'': 개수를 셀 입력입니다. ''LOW → HIGH''로 바뀌는 순간에 현재값이 1 증가합니다. * ''RESET'': ''true''이면 현재값을 0으로 지웁니다. RESET 중에는 CU가 켜져도 세지 않습니다. * ''PV'': 목표 개수입니다. 현재값이 이 값 이상이면 반환값이 ''true''가 됩니다. ''loop()''에서 계속 호출해야 입력 변화를 확인할 수 있습니다. 아래 예제에서는 입력 0번 센서로 물건 5개를 세고, 목표에 도달하면 보드의 상태 LED를 켭니다. 입력 1번 리셋 버튼을 누르면 다시 0개부터 셉니다. ===== 예제 ===== const uint8_t COUNTER_ID = 0; const uint8_t ITEM_SENSOR_PIN = 0; const uint8_t RESET_BUTTON_PIN = 1; const uint8_t FULL_LAMP_PIN = LED_BUILTIN; const int32_t BOX_CAPACITY = 5; void setup() { Serial.begin(115200); } void loop() { const bool itemSensor = digitalRead(ITEM_SENSOR_PIN) == HIGH; const bool resetButton = digitalRead(RESET_BUTTON_PIN) == HIGH; const bool boxFull = Ictu(COUNTER_ID, itemSensor, resetButton, BOX_CAPACITY); // 입력의 상승 횟수를 세고 설정값에 도달하면 true를 반환합니다. digitalWrite(FULL_LAMP_PIN, boxFull ? HIGH : LOW); static bool previousBoxFull = false; if (boxFull && !previousBoxFull) { Serial.println(F("5 items counted: box is full")); } previousBoxFull = boxFull; } ===== 주의사항 ===== * ''CU''는 ''LOW → HIGH'' 변화만 셉니다. 신호가 계속 ''HIGH''이면 한 번만 증가합니다. * ''RESET''이 ''true''인 호출에서는 현재값을 0으로 지우며, 같은 호출의 ''CU''는 세지 않습니다. * ''PV''는 1 이상의 목표 개수로 설정하는 것이 좋습니다. ''PV''가 0 이하이면 초기값 0도 목표에 도달한 것으로 판단합니다. * 센서 펄스가 ''loop()'' 실행보다 빠르면 변화를 놓칠 수 있습니다. 빠른 펄스는 제품의 고속 카운터 기능을 사용하십시오. * 서로 다른 작업에는 서로 다른 ''counter_id''를 사용하고, 같은 번호를 CTU·CTD·CTUD에 섞어 쓰지 마십시오. * 현재 카운트값이 필요할 때만 같은 ''counter_id''로 ''IgetCount()''를 사용하십시오. ===== 같은 카테고리의 내장 명령어 ===== * [[commands:reference:ictd|Ictd() 상세 설명 보기]] * [[commands:reference:ictud|Ictud() 상세 설명 보기]] * [[commands:reference:igetcount|IgetCount() 상세 설명 보기]] * [[commands:reference:isetcount|IsetCount() 상세 설명 보기]] * [[commands:reference:ictuddownstate|IctudDownState() 상세 설명 보기]] [[commands:builtin|← 내장 명령어 리스트]]