Ictu()는 입력의 상승 횟수를 세고 설정값에 도달하면 true를 반환합니다.
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()를 사용하십시오.