====== ILOGICS 내장 명령어 설명서 ======
ILOGICS 보드를 선택하면 별도 라이브러리를 설치하지 않고도 ILOGICS 내장 명령어를 사용할 수 있습니다.
===== 내장 명령어를 사용하는 방법 =====
- [[https://www.ilogics.net/ko-kr/resources/downloads/software/3|ILOGICS 보드 패키지]]를 설치합니다. (Arduino SDK)
- Arduino IDE의 **도구 → 보드**에서 사용할 보드를 선택합니다.
- 내장 명령어를 사용합니다.
===== 내장 명령어 리스트 =====
예제에 표시된 입출력 주소는 제품별로 다릅니다. 사용 중인 ILOGICS 제품의 보드 정의를 선택하고, 해당 제품의 핀맵에서 주소를 확인하십시오.
**카테고리별 보기**
* [[commands:digital_filter|디지털 입력 필터]] · [[commands:edge_scale|에지 검출·범위 변환]] · [[commands:plc_timer|PLC 타이머]] · [[commands:callback_timer|콜백 타이머]]
* [[commands:counter_buffer|카운터·데이터 버퍼]] · [[commands:high_speed_counter|고속카운터]] · [[commands:analog_input|아날로그 입력]] · [[commands:temperature|온도 입력]]
* [[commands:analog_output_pwm|아날로그 출력·PWM]] · [[commands:pid|PID 제어]] · [[commands:display_rtc|표시장치·RTC]]
* [[commands:debug_watchdog|디버그·Watchdog]] · [[commands:communication|통신]]
^ 카테고리 ^ 명령어 ^ 설명 ^
| 디지털 입력 필터 | [[commands:reference:idigitalread|IdigitalRead()]] | 입력을 여러 번 연속으로 읽고, 모든 값이 같을 때만 상태를 갱신합니다. HIGH와 LOW가 섞이면 이전 안정 상태를 유지합니다. |
| ::: | [[commands:ibounce|Ibounce()]] | 입력의 ON·OFF 양방향에 채터링 제거 시간을 적용합니다. |
| ::: | [[commands:reference:ibounceon|IbounceOn()]] | 입력이 OFF에서 ON으로 바뀔 때만 시간 필터를 적용합니다. |
| ::: | [[commands:reference:ibounceoff|IbounceOff()]] | 입력이 ON에서 OFF로 바뀔 때만 시간 필터를 적용합니다. |
| 에지 검출 | [[commands:reference:iup|Iup()]] | 입력이 OFF에서 ON으로 바뀌는 순간에만 ''true''를 반환합니다. |
| ::: | [[commands:reference:idown|Idown()]] | 입력이 ON에서 OFF로 바뀌는 순간에만 ''true''를 반환합니다. |
| 상태 반전 | [[commands:reference:ialt|Ialt()]] | 입력 상승 순간마다 지정한 상태를 ON·OFF로 반전합니다. |
| 범위 변환 | [[commands:reference:iscale|Iscale()]] | 정수 입력값을 지정한 정수 범위로 변환합니다. |
| ::: | [[commands:reference:iscalef|Iscalef()]] | 실수 입력값을 지정한 실수 범위로 변환합니다. |
| 타이머 | [[commands:reference:iton|Iton()]] | 입력이 설정 시간 동안 ON 상태를 유지하면 ''true''를 반환합니다. |
| ::: | [[commands:reference:itof|Itof()]] | 입력이 OFF로 바뀌고 설정 시간이 지나면 ''false''를 반환합니다. |
| ::: | [[commands:reference:itpl|Itpl()]] | 입력이 ON으로 바뀌면 설정 시간 동안 ''true''를 반환합니다. |
| ::: | [[commands:reference:itmon|Itmon()]] | 입력이 ON으로 바뀌면 설정 시간 동안 ''true''를 반환하며, 동작 중 재입력해도 시간이 연장되지 않습니다. |
| ::: | [[commands:reference:itmr|Itmr()]] | 입력이 ON인 시간을 누적하고 ''reset'' 입력으로 누적 시간을 초기화합니다. |
| 타이머 상태 | [[commands:reference:igettime|IgetTime()]] | 지정한 타이머의 현재 경과시간을 반환합니다. |
| ::: | [[commands:reference:igetstate|IgetState()]] | 지정한 타이머의 현재 출력 상태를 반환합니다. |
| 콜백 타이머 | [[commands:reference:itimerset|ItimerSet()]] | 주기와 콜백 함수 또는 사용할 하드웨어 타이머를 설정합니다. |
| ::: | [[commands:reference:itimerstart|ItimerStart()]] | 설정한 콜백 타이머를 시작합니다. |
| ::: | [[commands:reference:itimerstop|ItimerStop()]] | 기본 또는 지정한 콜백 타이머를 정지합니다. |
| ::: | [[commands:reference:itimerstopall|ItimerStopAll()]] | 실행 중인 콜백 타이머를 모두 정지합니다. |
| ::: | [[commands:reference:itimerstate|ItimerState()]] | 기본 또는 지정한 콜백 타이머의 실행 상태를 반환합니다. |
| 카운터 | [[commands:reference:ictu|Ictu()]] | 입력의 상승 횟수를 세고 설정값에 도달하면 ''true''를 반환합니다. |
| ::: | [[commands:reference:ictd|Ictd()]] | 설정값을 불러온 후 입력 상승마다 현재값을 감소시킵니다. |
| ::: | [[commands:reference:ictud|Ictud()]] | 증가 입력과 감소 입력을 하나의 카운터에서 처리합니다. |
| ::: | [[commands:reference:igetcount|IgetCount()]] | 지정한 카운터의 현재값을 반환합니다. |
| ::: | [[commands:reference:isetcount|IsetCount()]] | 지정한 카운터의 현재값을 변경합니다. |
| ::: | [[commands:reference:ictuddownstate|IctudDownState()]] | Up/Down 카운터의 하한 완료 상태를 반환합니다. |
| 데이터 버퍼 | [[commands:reference:fifo|FIFO()]] | 저장한 순서대로 16비트 데이터를 꺼냅니다. |
| ::: | [[commands:reference:filo|FILO()]] | 나중에 저장한 16비트 데이터를 먼저 출력합니다. |
| 아날로그 입력 | [[commands:reference:analogreadinit|analogReadInit()]] | 아날로그 입력 모듈의 샘플링 속도를 설정합니다. |
| ::: | [[commands:reference:analogread|analogRead()]] | 지정한 채널의 원시 아날로그값을 읽습니다. |
| ::: | [[commands:reference:analogreadavg|analogReadAvg()]] | 여러 입력값의 정수 평균을 반환합니다. |
| ::: | [[commands:reference:analogreadavgf|analogReadAvgf()]] | 여러 입력값의 실수 평균을 반환합니다. |
| 아날로그 입력 필터 | [[commands:reference:ianalogfilter|IanalogFilter()]] | 전달한 값을 이동평균 방식으로 처리합니다. |
| 아날로그 범위 변환 | [[commands:reference:ianalogread|IanalogRead()]] | 아날로그 입력값을 지정한 정수 범위로 변환합니다. |
| ::: | [[commands:reference:ianalogreadf|IanalogReadf()]] | 아날로그 입력값을 지정한 실수 범위로 변환합니다. |
| 4~20mA 입력 | [[commands:reference:analogread2|analogRead2()]] | 지정한 채널의 4~20mA 보정 입력값을 읽습니다. |
| ::: | [[commands:reference:analogread2avg|analogRead2Avg()]] | 4~20mA 입력값의 정수 평균을 반환합니다. |
| ::: | [[commands:reference:analogread2avgf|analogRead2Avgf()]] | 4~20mA 입력값의 실수 평균을 반환합니다. |
| 4~20mA 범위 변환 | [[commands:reference:ianalogread2|IanalogRead2()]] | 4~20mA 입력값을 지정한 정수 범위로 변환합니다. |
| ::: | [[commands:reference:ianalogread2f|IanalogRead2f()]] | 4~20mA 입력값을 지정한 실수 범위로 변환합니다. |
| 온도 입력 | [[commands:reference:ntcread|ntcRead()]] | NTC 3950 10kΩ 센서의 온도를 0.1℃ 단위 정수로 반환합니다. |
| ::: | [[commands:reference:ntcreadf|ntcReadf()]] | NTC 3950 10kΩ 센서의 온도를 ℃ 단위 실수로 반환합니다. |
| ::: | [[commands:reference:pt100read|pt100Read()]] | PT100 센서의 온도를 0.1℃ 단위 정수로 반환합니다. |
| 아날로그 출력 | [[commands:reference:analogwriteinit|analogWriteInit()]] | 출력 타이머의 분해능과 분주비를 설정합니다. |
| ::: | [[commands:reference:analogwritefreq|analogWriteFreq()]] | 지정한 출력 채널의 PWM 주파수를 설정합니다. |
| ::: | [[commands:reference:analogwritemax|analogWriteMax()]] | 지정한 출력 채널에서 사용할 수 있는 최댓값을 반환합니다. |
| ::: | [[commands:reference:ianalogwriteinit|IanalogWriteInit()]] | MPAINO 아날로그 출력의 최댓값·최솟값과 모드를 설정합니다. |
| ::: | [[commands:reference:ianalogwrite|IanalogWrite()]] | 사용자 정수값을 아날로그 출력 범위로 변환하여 출력합니다. |
| ::: | [[commands:reference:ianalogwritef|IanalogWritef()]] | 사용자 실수값을 아날로그 출력 범위로 변환하여 출력합니다. |
| 4~20mA 출력 | [[commands:reference:analogwrite2|analogWrite2()]] | 지정한 채널에 4~20mA 변환용 원시값을 출력합니다. |
| ::: | [[commands:reference:ianalogwrite2|IanalogWrite2()]] | 사용자 정수값을 4~20mA 출력 범위로 변환합니다. |
| ::: | [[commands:reference:ianalogwrite2f|IanalogWrite2f()]] | 사용자 실수값을 4~20mA 출력 범위로 변환합니다. |
| PWM 출력 | [[commands:reference:pwm|PWM()]] | 지정한 핀에 8비트 또는 16비트 PWM을 출력합니다. |
| ::: | [[commands:reference:fdpwm|FDPWM()]] | 주파수와 Duty 비율을 지정하여 PWM을 출력합니다. |
| ::: | [[commands:reference:pwmoff|PWMOFF()]] | 지정한 핀의 PWM 출력을 정지하거나 다시 허용합니다. |
| ::: | [[commands:reference:pwm_reset|PWM_RESET()]] | 코어가 관리하는 PWM 상태를 모두 초기화합니다. |
| 펄스 출력 | [[commands:reference:npwm_begin|NPWM_BEGIN()]] | 주파수·Duty·출력 개수를 지정하여 펄스 출력을 준비합니다. |
| ::: | [[commands:reference:npwm|NPWM()]] | 준비한 개수만큼 펄스를 출력합니다. |
| PID 제어 | [[commands:reference:ipidset|IpidSet()]] | PID 계수, 계산 주기와 출력 범위를 설정합니다. |
| ::: | [[commands:reference:ipidrun|IpidRun()]] | 현재값과 설정값을 사용해 PID 출력을 계산합니다. |
| ::: | [[commands:reference:ipidreset|IpidReset()]] | PID의 적분값과 내부 상태를 초기화합니다. |
| ::: | [[commands:reference:ipidreverse|IpidReverse()]] | PID의 정동작 또는 역동작을 선택합니다. |
| ::: | [[commands:reference:ipiditermlimit|IpidItermLimit()]] | PID 적분항의 최솟값과 최댓값을 제한합니다. |
| ::: | [[commands:reference:ipidoutput|IpidOutput()]] | 마지막으로 계산된 PID 출력값을 반환합니다. |
| TM1637 FND | [[commands:reference:isegbegin|IsegBegin()]] | TM1637 FND의 CLK·DIO 핀과 장치 번호를 설정합니다. |
| ::: | [[commands:reference:isegbrightness|IsegBrightness()]] | 화면 밝기와 표시 상태를 설정합니다. |
| ::: | [[commands:reference:isegclear|IsegClear()]] | FND 화면을 지웁니다. |
| ::: | [[commands:reference:isegwrite|IsegWrite()]] | 세그먼트 데이터를 지정 위치에 출력합니다. |
| ::: | [[commands:reference:isegdecimal|IsegDecimal()]] | 정수를 10진수 형식으로 표시합니다. |
| ::: | [[commands:reference:iseghex|IsegHex()]] | 정수를 16진수 형식으로 표시합니다. |
| ::: | [[commands:reference:isegencodedigit|IsegEncodeDigit()]] | 숫자 한 자리를 세그먼트 데이터로 변환합니다. |
| 문자 LCD | [[commands:reference:iclcdbegin|IclcdBegin()]] | PCF8574 문자 LCD의 주소와 화면 크기를 설정합니다. |
| ::: | [[commands:reference:iclcdclear|IclcdClear()]] | LCD 화면을 지웁니다. |
| ::: | [[commands:reference:iclcdhome|IclcdHome()]] | 커서를 첫 번째 위치로 이동합니다. |
| ::: | [[commands:reference:iclcdsetcursor|IclcdSetCursor()]] | 커서를 지정한 열과 행으로 이동합니다. |
| ::: | [[commands:reference:iclcddisplay|IclcdDisplay()]] | LCD 표시를 켜거나 끕니다. |
| ::: | [[commands:reference:iclcdcursor|IclcdCursor()]] | 커서 표시를 켜거나 끕니다. |
| ::: | [[commands:reference:iclcdblink|IclcdBlink()]] | 커서 깜박임을 켜거나 끕니다. |
| ::: | [[commands:reference:iclcdbacklight|IclcdBacklight()]] | LCD 백라이트를 켜거나 끕니다. |
| ::: | [[commands:reference:iclcdscrollleft|IclcdScrollLeft()]] | 표시 내용을 왼쪽으로 한 칸 이동합니다. |
| ::: | [[commands:reference:iclcdscrollright|IclcdScrollRight()]] | 표시 내용을 오른쪽으로 한 칸 이동합니다. |
| ::: | [[commands:reference:iclcdtextdirection|IclcdTextDirection()]] | 문자가 입력되는 방향을 설정합니다. |
| ::: | [[commands:reference:iclcdautoscroll|IclcdAutoscroll()]] | 자동 스크롤을 켜거나 끕니다. |
| ::: | [[commands:reference:iclcdcreatechar|IclcdCreateChar()]] | 사용자 정의 문자를 등록합니다. |
| ::: | [[commands:reference:iclcdwrite|IclcdWrite()]] | 문자 코드 또는 사용자 정의 문자를 출력합니다. |
| ::: | [[commands:reference:iclcdcommand|IclcdCommand()]] | LCD 제어 명령을 직접 전송합니다. |
| ::: | [[commands:reference:iclcdprint|IclcdPrint()]] | 문자열 또는 숫자를 LCD에 출력합니다. |
| RTC | [[commands:reference:irtcbegin|IrtcBegin()]] | DS3231 RTC 연결을 확인하고 사용을 시작합니다. |
| ::: | [[commands:reference:irtcread|IrtcRead()]] | RTC의 날짜와 시간을 읽습니다. |
| ::: | [[commands:reference:irtcset|IrtcSet()]] | RTC의 날짜와 시간을 설정합니다. |
| ::: | [[commands:reference:irtcunixtime|IrtcUnixTime()]] | 현재 시간을 Unix 시간으로 반환합니다. |
| ::: | [[commands:reference:irtcgettemperature|IrtcGetTemperature()]] | RTC 내부 온도를 반환합니다. |
| ::: | [[commands:reference:irtctimevalid|IrtcTimeValid()]] | RTC 시간이 신뢰 가능한 상태인지 확인합니다. |
| ::: | [[commands:reference:irtcclearoscillatorstopflag|IrtcClearOscillatorStopFlag()]] | 발진 정지 상태 표시를 초기화합니다. |
| ::: | [[commands:reference:irtcsetalarm1|IrtcSetAlarm1()]] | 초 단위를 포함하는 알람 1을 설정합니다. |
| ::: | [[commands:reference:irtcsetalarm2|IrtcSetAlarm2()]] | 분 단위의 알람 2를 설정합니다. |
| ::: | [[commands:reference:irtcalarmenable|IrtcAlarmEnable()]] | 지정한 알람을 켜거나 끕니다. |
| ::: | [[commands:reference:irtcalarmenabled|IrtcAlarmEnabled()]] | 지정한 알람의 활성 상태를 확인합니다. |
| ::: | [[commands:reference:irtcalarmtriggered|IrtcAlarmTriggered()]] | 알람 발생 여부를 확인하고 필요하면 상태를 지웁니다. |
| ::: | [[commands:reference:irtcsquarewave|IrtcSquareWave()]] | RTC의 사각파 출력을 설정합니다. |
| ::: | [[commands:reference:irtc32khz|Irtc32kHz()]] | RTC의 32kHz 출력을 켜거나 끕니다. |
| 디버그 | [[commands:reference:debugstart|debugStart()]] | 디버그 출력에 사용할 포트와 보레이트를 설정합니다. |
| ::: | [[commands:reference:debugstop|debugStop()]] | 디버그 출력을 중지합니다. |
| ::: | [[commands:reference:debugstate|debugState()]] | 디버그 출력의 활성 상태를 반환합니다. |
| ::: | [[commands:reference:debug|debug()]] | 디버그가 활성화된 경우에만 값을 출력합니다. |
| ::: | [[commands:reference:debugln|debugln()]] | 디버그 값을 출력한 뒤 줄을 바꿉니다. |
| Watchdog | [[commands:reference:wdt_enable|WDT_ENABLE()]] | Watchdog 제한시간을 설정하고 동작을 시작합니다. |
| ::: | [[commands:reference:wdt_disable|WDT_DISABLE()]] | Watchdog 동작을 중지합니다. |
| ::: | [[commands:reference:wdt|WDT()]] | 제한시간이 끝나기 전에 Watchdog를 갱신합니다. |
| 고속카운터 | [[commands:reference:tcntsetup|TCNTSETUP()]] | 타이머 외부 클럭 입력과 32비트 확장 모드를 설정합니다. |
| ::: | [[commands:reference:tcntout|TCNTOUT()]] | 32비트 확장 모드의 누적 상위 오버플로 값을 반환합니다. |
| Modbus RTU Slave | [[commands:reference:imodbusrtumem|ImodbusRTUMem()]] | Slave가 사용할 M·D 메모리 크기를 설정합니다. |
| ::: | [[commands:reference:imodbusrtuadr|ImodbusRTUAdr()]] | M·D 메모리의 시작 주소를 설정합니다. |
| ::: | [[commands:reference:imodbusrtuinit|ImodbusRTUInit()]] | 통신 포트, 국번과 보레이트를 설정합니다. |
| ::: | [[commands:reference:imodbusrtu|ImodbusRTU()]] | 수신 요청을 확인하고 Slave 응답을 처리합니다. |
| Modbus RTU Master | [[commands:reference:imodbusrtumasterinit|ImodbusRTUmasterInit()]] | Master 통신 포트와 보레이트를 설정합니다. |
| ::: | [[commands:reference:imodbusrtumaster|ImodbusRTUmaster()]] | 하나의 Master 요청을 즉시 실행합니다. |
| ::: | [[commands:reference:imodbusrtumasteradd|ImodbusRTUmasterAdd()]] | 반복 실행할 Master 요청을 등록합니다. |
| ::: | [[commands:reference:imodbusrtumasterrun|ImodbusRTUmasterRun()]] | 등록 요청 또는 지정한 단일 요청을 실행합니다. |
| LS산전 Cnet Slave | [[commands:reference:icnetmem|ICnetMem()]] | Cnet Slave가 사용할 M·D·R 메모리 크기를 설정합니다. |
| ::: | [[commands:reference:icnetadr|ICnetAdr()]] | M·D·R 메모리의 시작 주소를 설정합니다. |
| ::: | [[commands:reference:icnetinit|ICnetInit()]] | 통신 포트, 국번과 보레이트를 설정합니다. |
| ::: | [[commands:reference:icnet|ICnet()]] | 수신 요청을 확인하고 Cnet Slave 응답을 처리합니다. |
| Mitsubishi MC Protocol | [[commands:reference:imcmem|IMcMem()]] | MC Protocol에서 사용할 X·Y·M·D 메모리 크기를 설정합니다. |
| ::: | [[commands:reference:imcadr|IMcAdr()]] | X·Y·M·D 메모리의 시작 주소를 설정합니다. |
| ::: | [[commands:reference:imcinit|IMcInit()]] | 통신 포트, 국번과 보레이트를 설정합니다. |
| ::: | [[commands:reference:imcprotocol|IMcProtocol()]] | 수신 요청을 확인하고 MC Protocol 응답을 처리합니다. |
===== 디지털 입력 필터 =====
^ 명령어 형식 ^ 반환값 ^ 사용 기준 ^
| [[commands:reference:idigitalread|IdigitalRead(pin, samples)]] | 필터링된 ''HIGH'' 또는 ''LOW'' | 모든 샘플이 같을 때만 상태를 갱신하고, 값이 섞이면 이전 안정 상태를 유지 |
| [[commands:ibounce|Ibounce(pin, ms)]] | 안정화된 입력 상태 | ON과 OFF가 설정 시간 동안 유지될 때 상태 변경 |
| [[commands:reference:ibounceon|IbounceOn(pin, ms)]] | ON 방향이 지연된 입력 상태 | OFF→ON 방향만 시간 필터 적용 |
| [[commands:reference:ibounceoff|IbounceOff(pin, ms)]] | OFF 방향이 지연된 입력 상태 | ON→OFF 방향만 시간 필터 적용 |
''IdigitalRead()''는 짧은 시간 동안 반복 샘플링하는 방식이고, ''Ibounce()''는 ''millis()'' 기준으로 입력이 안정된 시간을 확인하는 방식입니다. 기계식 스위치에는 보통 ''Ibounce()''가 알맞습니다.
===== 에지 검출 =====
^ 명령어 형식 ^ 반환값 ^ 설명 ^
| [[commands:reference:iup|Iup(id, input)]] | 상승 순간에만 ''true'' | OFF에서 ON으로 바뀌는 순간을 한 번 검출 |
| [[commands:reference:idown|Idown(id, input)]] | 하강 순간에만 ''true'' | ON에서 OFF로 바뀌는 순간을 한 번 검출 |
''id''는 각 에지 검출 상태를 구분합니다. 서로 다른 입력에 같은 ''id''를 사용하면 상태가 섞일 수 있습니다.
===== 상태 반전 =====
^ 명령어 형식 ^ 반환값 ^ 설명 ^
| [[commands:reference:ialt|Ialt(input, state)]] | 없음 | 입력 상승 순간마다 ''state'' 값을 ON/OFF 반전 |
다음 예제는 MPAINO-8A8R(T)의 첫 입력 ''0''과 첫 출력 ''64''를 사용합니다.
bool lampState = false;
void setup() {}
void loop() {
bool button = Ibounce(0, 30);
Ialt(button, lampState);
digitalWrite(64, lampState); // MPAINO 첫 번째 디지털 출력 예시
}
===== 범위 변환 =====
^ 명령어 형식 ^ 반환값 ^ 설명 ^
| [[commands:reference:iscale|Iscale(x, inMin, inMax, outMin, outMax)]] | ''int32_t'' | 정수 입력 범위를 원하는 정수 범위로 변환 |
| [[commands:reference:iscalef|Iscalef(x, inMin, inMax, outMin, outMax)]] | ''float'' | 소수점을 유지하여 실수 범위 변환 |
===== 타이머 =====
^ 명령어 형식 ^ 동작 ^
| [[commands:reference:iton|Iton(id, state, ms)]] | 입력이 설정 시간 동안 ON이면 출력 ON |
| [[commands:reference:itof|Itof(id, state, ms)]] | 입력이 OFF된 뒤 설정 시간이 지나면 출력 OFF |
| [[commands:reference:itpl|Itpl(id, state, ms)]] | 입력 상승 순간부터 설정 시간 동안 펄스 출력 |
| [[commands:reference:itmon|Itmon(id, state, ms)]] | 실행 중 다시 입력되어도 연장되지 않는 단안정 펄스 |
| [[commands:reference:itmr|Itmr(id, state, ms, reset)]] | 입력 ON 시간을 누적하며 ''reset''으로 초기화 |
PLC 스타일 타이머는 ''delay()''처럼 프로그램을 멈추지 않습니다. 대신 ''loop()''가 반복될 때마다 계속 호출해야 합니다. 같은 ''id''를 서로 다른 타이머에 중복 사용하지 마십시오.
다음 예제는 MPAINO-8A8R(T)의 첫 입력 ''0''과 첫 출력 ''64''를 사용합니다.
void setup() {}
void loop() {
bool run = Ibounce(0, 30);
bool delayedOutput = Iton(0, run, 1000);
digitalWrite(64, delayedOutput);
}
===== 타이머 상태 =====
^ 명령어 형식 ^ 반환값 ^ 설명 ^
| [[commands:reference:igettime|IgetTime(id)]] | ''unsigned long'' | 지정한 타이머의 현재 경과시간 반환 |
| [[commands:reference:igetstate|IgetState(id)]] | ''bool'' | 지정한 타이머의 현재 출력 상태 반환 |
===== 콜백 타이머 =====
^ 명령어 형식 ^ 설명 ^
| [[commands:reference:itimerset|ItimerSet(intervalMs, callback)]] | 기본 타이머의 실행 주기와 콜백 함수 설정 |
| [[commands:reference:itimerset|ItimerSet(timerNo, intervalMs, callback)]] | 하드웨어 타이머 번호를 지정하여 설정 |
| [[commands:reference:itimerstart|ItimerStart()]], [[commands:reference:itimerstart|ItimerStart(timerNo)]] | 콜백 타이머 시작 |
| [[commands:reference:itimerstop|ItimerStop()]], [[commands:reference:itimerstop|ItimerStop(timerNo)]] | 콜백 타이머 정지 |
| [[commands:reference:itimerstopall|ItimerStopAll()]] | 콜백 타이머 전체 정지 |
| [[commands:reference:itimerstate|ItimerState()]], [[commands:reference:itimerstate|ItimerState(timerNo)]] | 실행 상태 확인 |
콜백 함수는 인터럽트 안에서 실행됩니다. 콜백에서는 플래그나 짧은 카운트만 변경하고 ''delay()'', Serial 출력, I²C, SPI와 긴 계산을 사용하지 마십시오.
volatile bool taskFlag = false;
void onTimer() {
taskFlag = true;
}
void setup() {
ItimerSet(100, onTimer);
ItimerStart();
}
void loop() {
if (taskFlag) {
taskFlag = false;
// 시간이 걸리는 실제 작업은 loop()에서 실행합니다.
}
}
===== 카운터 =====
^ 명령어 형식 ^ 설명 ^
| [[commands:reference:ictu|Ictu(id, CU, RESET, PV)]] | ''CU'' 상승 에지를 세어 ''PV''에 도달하면 ON |
| [[commands:reference:ictd|Ictd(id, CD, LOAD, PV)]] | ''LOAD''로 값을 불러온 뒤 ''CD'' 상승 에지마다 감소 |
| [[commands:reference:ictud|Ictud(id, CU, CD, RESET, LOAD, PV)]] | 증가와 감소를 함께 처리 |
| [[commands:reference:igetcount|IgetCount(id)]], [[commands:reference:isetcount|IsetCount(id, value)]] | 현재 카운트값 조회와 변경 |
| [[commands:reference:ictuddownstate|IctudDownState(id)]] | Up/Down 카운터의 하한 완료 상태 확인 |
카운터 명령어는 ''loop()''에서 계속 호출합니다. ''id''는 다른 카운터와 중복하지 않게 배정합니다.
===== 데이터 버퍼 =====
^ 명령어 형식 ^ 설명 ^
| [[commands:reference:fifo|FIFO(...)]] | 저장한 순서대로 16비트 데이터를 꺼내는 버퍼 |
| [[commands:reference:filo|FILO(...)]] | 나중에 저장한 16비트 데이터를 먼저 꺼내는 버퍼 |
===== 아날로그 입력 =====
^ 명령어 형식 ^ 반환값·용도 ^
| [[commands:reference:analogreadinit|analogReadInit(sps)]] | MPAINO ADS1118 아날로그 모듈의 샘플링 속도 설정 |
| [[commands:reference:analogread|analogRead(ch)]] | 선택 채널의 원시 아날로그 값 읽기 |
| [[commands:reference:analogreadavg|analogReadAvg(ch, samples)]], [[commands:reference:analogreadavgf|analogReadAvgf(ch, samples)]] | 정수 또는 실수 이동평균 입력 |
===== 아날로그 입력 필터 =====
^ 명령어 형식 ^ 반환값·용도 ^
| [[commands:reference:ianalogfilter|IanalogFilter(id, raw, samples)]] | 사용자가 전달한 임의 값을 이동평균 처리 |
===== 아날로그 범위 변환 =====
^ 명령어 형식 ^ 반환값·용도 ^
| [[commands:reference:ianalogread|IanalogRead(ch, min, max)]], [[commands:reference:ianalogreadf|IanalogReadf(ch, min, max)]] | 입력을 사용자 정수·실수 범위로 변환 |
===== 4~20mA 입력 =====
^ 명령어 형식 ^ 반환값·용도 ^
| [[commands:reference:analogread2|analogRead2(ch)]] | 4~20mA 보정 입력값 읽기 |
| [[commands:reference:analogread2avg|analogRead2Avg(ch, samples)]], [[commands:reference:analogread2avgf|analogRead2Avgf(ch, samples)]] | 4~20mA 입력값의 정수 또는 실수 평균 반환 |
===== 4~20mA 범위 변환 =====
^ 명령어 형식 ^ 반환값·용도 ^
| [[commands:reference:ianalogread2|IanalogRead2(ch, min, max)]], [[commands:reference:ianalogread2f|IanalogRead2f(ch, min, max)]] | 4~20mA 입력을 사용자 범위로 변환 |
MPAINO에서는 장착된 아날로그 입력 모듈과 딥스위치의 전압·전류 범위를 먼저 확인합니다. 샘플링 속도를 높이면 응답은 빨라지지만 노이즈와 측정 특성이 달라질 수 있습니다.
void setup() {
Serial.begin(115200);
analogReadInit(IANALOG_SPS_64);
}
void loop() {
int32_t raw = analogReadAvg(0, 8);
float value = Iscalef(raw, 0.0, 32767.0, 0.0, 100.0);
Serial.println(value);
}
===== 온도 입력 =====
^ 명령어 형식 ^ 반환값 ^ 대상 ^
| [[commands:reference:ntcread|ntcRead(ch)]] | 0.1℃ 단위 정수 | NTC 3950 10kΩ 온도센서 입력 |
| [[commands:reference:ntcreadf|ntcReadf(ch)]] | ℃ 단위 ''float'' | NTC 3950 10kΩ 온도센서 입력 |
| [[commands:reference:pt100read|pt100Read(ch)]] | 0.1℃ 단위 정수 | MPAINO PT100 입력 모듈 |
NTC와 PT100은 센서 종류와 입력 회로가 다릅니다. 서로 바꾸어 사용하지 말고 선택 제품에 해당 입력 기능이 있는지 확인하십시오.
===== 아날로그 출력 =====
^ 명령어 형식 ^ 설명 ^
| [[commands:reference:analogwriteinit|analogWriteInit(ch, top, prescaler)]] | PWM 타이머의 분해능과 분주비 설정 |
| [[commands:reference:analogwritefreq|analogWriteFreq(ch, hz)]], [[commands:reference:analogwritemax|analogWriteMax(ch)]] | PWM 주파수 설정과 현재 최댓값 확인 |
| [[commands:reference:ianalogwriteinit|IanalogWriteInit(ch, max, min, mode)]] | MPAINO 아날로그 출력 범위 초기화 |
| [[commands:reference:ianalogwrite|IanalogWrite(ch, min, max, value)]], [[commands:reference:ianalogwritef|IanalogWritef(...)]] | 정수·실수 사용자값을 아날로그 출력 범위로 변환 |
===== 4~20mA 출력 =====
^ 명령어 형식 ^ 설명 ^
| [[commands:reference:analogwrite2|analogWrite2(ch, value)]] | 지정한 채널에 4~20mA 변환용 원시값 출력 |
| [[commands:reference:ianalogwrite2|IanalogWrite2(ch, min, max, value)]], [[commands:reference:ianalogwrite2f|IanalogWrite2f(...)]] | 정수·실수 사용자값을 4~20mA 출력 범위로 변환 |
===== PWM 출력 =====
^ 명령어 형식 ^ 설명 ^
| [[commands:reference:pwm|PWM(pin, value, bit16)]] | 8비트 또는 16비트 PWM 출력 |
| [[commands:reference:fdpwm|FDPWM(pin, hz, duty)]] | 주파수와 Duty 비율을 지정한 PWM 출력 |
| [[commands:reference:pwmoff|PWMOFF(pin, off)]], [[commands:reference:pwm_reset|PWM_RESET()]] | 개별 PWM 정지 또는 전체 초기화 |
===== 펄스 출력 =====
^ 명령어 형식 ^ 설명 ^
| [[commands:reference:npwm_begin|NPWM_BEGIN(pin, hz, duty, count)]], [[commands:reference:npwm|NPWM(pin)]] | 지정한 개수만큼 펄스 출력 |
PWM, 고속펄스, ''analogWrite()''와 콜백 타이머는 같은 하드웨어 타이머를 공유할 수 있습니다. 여러 기능을 함께 사용할 때는 해당 제품의 타이머 지원표를 확인하십시오.
===== PID 제어 =====
^ 명령어 형식 ^ 설명 ^
| [[commands:reference:ipidset|IpidSet(id, kp, ki, kd, sampleMs, outMin, outMax)]] | PID 계수, 계산 주기와 출력 범위 설정 |
| [[commands:reference:ipidrun|IpidRun(id, pv, sv)]] | 현재값 ''PV''와 설정값 ''SV''로 출력 계산 |
| [[commands:reference:ipidreset|IpidReset(id)]] | 내부 상태 초기화 |
| [[commands:reference:ipidreverse|IpidReverse(id, reverse)]] | 정동작 또는 역동작 선택 |
| [[commands:reference:ipiditermlimit|IpidItermLimit(id, min, max)]] | 적분항 범위 제한 |
| [[commands:reference:ipidoutput|IpidOutput(id)]] | 마지막 출력값 확인 |
void setup() {
IpidSet(0, 2.0, 0.5, 0.1, 100, 0, 100);
}
void loop() {
float pv = ntcReadf(0);
float output = IpidRun(0, pv, 50.0);
IanalogWritef(0, 0.0, 100.0, output);
}
PID 출력은 계산값일 뿐 안전장치가 아닙니다. 센서 단선, 과온, 출력 고착과 비상정지는 별도의 안전회로로 처리하십시오.
===== TM1637 FND =====
^ 대상 ^ 주요 명령어 ^ 설명 ^
| TM1637 4자리 FND | [[commands:reference:isegbegin|IsegBegin()]], [[commands:reference:isegbrightness|IsegBrightness()]], [[commands:reference:isegdecimal|IsegDecimal()]], [[commands:reference:iseghex|IsegHex()]], [[commands:reference:isegclear|IsegClear()]] | 최대 7개 장치를 ''device'' 번호로 구분 |
===== 문자 LCD =====
^ 대상 ^ 주요 명령어 ^ 설명 ^
| PCF8574 문자 LCD | [[commands:reference:iclcdbegin|IclcdBegin()]], [[commands:reference:iclcdsetcursor|IclcdSetCursor()]], [[commands:reference:iclcdprint|IclcdPrint()]], [[commands:reference:iclcdclear|IclcdClear()]] | 최대 4개 LCD를 ''device'' 번호로 구분 |
===== RTC =====
^ 대상 ^ 주요 명령어 ^ 설명 ^
| DS3231 RTC | [[commands:reference:irtcbegin|IrtcBegin()]], [[commands:reference:irtcread|IrtcRead()]], [[commands:reference:irtcset|IrtcSet()]], [[commands:reference:irtcgettemperature|IrtcGetTemperature()]], [[commands:reference:irtcsetalarm1|IrtcSetAlarm1()]] | 날짜·시간, 온도, 알람과 주파수 출력 사용 |
표시 장치와 RTC는 각각의 ''Begin'' 명령어를 먼저 호출합니다. I²C 주소, 연결 핀과 다른 기능의 공유 여부를 확인하십시오.
===== 디버그 =====
^ 명령어 형식 ^ 설명 ^
| [[commands:reference:debugstart|debugStart()]], [[commands:reference:debugstart|debugStart(baud)]], [[commands:reference:debugstart|debugStart(serial, baud)]] | Debug 출력 시작과 포트 선택 |
| [[commands:reference:debug|debug()]], [[commands:reference:debugln|debugln()]] | Debug가 활성화된 경우에만 값 출력 |
| [[commands:reference:debugstop|debugStop()]], [[commands:reference:debugstate|debugState()]] | Debug 중지와 상태 확인 |
===== Watchdog =====
^ 명령어 형식 ^ 설명 ^
| [[commands:reference:wdt_enable|WDT_ENABLE(time)]] | Watchdog 제한시간 설정 및 활성화 |
| [[commands:reference:wdt|WDT()]], [[commands:reference:wdt_disable|WDT_DISABLE()]] | Watchdog 리셋과 비활성화 |
Watchdog를 활성화한 뒤 ''WDT()'' 호출이 늦어지면 보드가 재시작됩니다. 통신 대기와 긴 반복문의 최악 실행시간을 먼저 확인하십시오.
===== 고속카운터 =====
^ 명령어 형식 ^ 설명 ^
| [[commands:reference:tcntsetup|TCNTSETUP(timerNo, bit32)]] | 타이머 외부 클럭 입력과 32비트 확장 모드 설정 |
| [[commands:reference:tcntout|TCNTOUT(timerNo)]] | 32비트 확장 모드에서 누적된 상위 오버플로 횟수 확인 |
현재 타이머 외부 클럭 방식의 전용 고속카운터 지원 제품은 MPINO-8A8R과 MPINO-16A8R8T입니다. 다른 제품은 제품별 인터럽트 입력을 확인해 ''attachInterrupt()'' 방식을 사용합니다.
===== Modbus RTU Slave =====
^ 초기 설정 ^ ''loop()'' 실행 명령어 ^
| [[commands:reference:imodbusrtumem|ImodbusRTUMem()]], [[commands:reference:imodbusrtuadr|ImodbusRTUAdr()]], [[commands:reference:imodbusrtuinit|ImodbusRTUInit()]] | [[commands:reference:imodbusrtu|ImodbusRTU()]] |
void setup() {
ImodbusRTUMem(128, 64);
ImodbusRTUAdr(0, 0);
ImodbusRTUInit(Serial2, 1, 9600);
}
void loop() {
ImodbusRTU();
}
===== Modbus RTU Master =====
^ 초기 설정 ^ 실행 명령어 ^
| [[commands:reference:imodbusrtumasterinit|ImodbusRTUmasterInit()]], [[commands:reference:imodbusrtumasteradd|ImodbusRTUmasterAdd()]] | [[commands:reference:imodbusrtumaster|ImodbusRTUmaster()]] 또는 [[commands:reference:imodbusrtumasterrun|ImodbusRTUmasterRun()]] |
===== LS산전 Cnet Slave =====
^ 초기 설정 ^ ''loop()'' 실행 명령어 ^
| [[commands:reference:icnetmem|ICnetMem()]], [[commands:reference:icnetadr|ICnetAdr()]], [[commands:reference:icnetinit|ICnetInit()]] | [[commands:reference:icnet|ICnet()]] |
===== Mitsubishi MC Protocol =====
^ 초기 설정 ^ ''loop()'' 실행 명령어 ^
| [[commands:reference:imcmem|IMcMem()]], [[commands:reference:imcadr|IMcAdr()]], [[commands:reference:imcinit|IMcInit()]] | [[commands:reference:imcprotocol|IMcProtocol()]] |
제품별 RS-232, RS-485와 UART의 ''Serial'' 번호가 다를 수 있습니다. 통신 전에 포트 역할, 전기 규격, 보레이트, 국번, 종단저항과 딥스위치 설정을 확인하십시오.
===== 통합 입출력 예제 =====
아래 예제는 MPAINO의 첫 번째 디지털 입력 ''0''과 첫 번째 디지털 출력 ''64''를 사용합니다. MPINO에서는 선택 모델의 실제 Arduino 핀 번호로 바꾸어야 합니다.
const uint8_t inputChannel = 0;
const uint8_t outputChannel = 64;
void setup() {}
void loop() {
bool stableInput = Ibounce(inputChannel, 30);
bool delayedOutput = Iton(0, stableInput, 1000);
digitalWrite(outputChannel, delayedOutput);
}
===== 문제가 생겼을 때 =====
* **명령어를 찾을 수 없음:** ILOGICS 보드 패키지 설치와 제품 보드 선택을 확인합니다.
* **입출력이 반응하지 않음:** MPINO 핀 번호와 MPAINO 논리 채널을 혼동하지 않았는지 확인합니다.
* **타이머·카운터가 멈춤:** 명령어를 ''loop()''에서 계속 호출하는지, 같은 ''id''를 중복 사용하지 않았는지 확인합니다.
* **PWM 주파수가 이상함:** 같은 하드웨어 타이머를 다른 PWM·펄스·콜백 기능이 사용 중인지 확인합니다.
* **아날로그값이 다름:** 전압·전류·NTC·PT100 딥스위치와 채널, 샘플링 속도를 확인합니다.
* **통신이 되지 않음:** Serial 포트, RS-232/RS-485 방식, 보레이트, 국번, 패리티와 배선을 확인합니다.
* **보드가 반복 재시작됨:** Watchdog 제한시간보다 오래 걸리는 코드가 있는지 확인합니다.
===== 필수 주의사항 =====
* 과거 ''#include '', ''tempRead()'', ''Ipt100Read()'' 예제를 현재 내장 명령어와 혼용하지 않습니다.
* 전원과 배선을 변경할 때는 장비 전원을 끄고 극성, COM, 입력전압과 부하전원을 확인합니다.
* 릴레이와 트랜지스터 출력의 전기적 특성 및 허용전류를 구분합니다.
* 프로그램 출력만 비상정지나 과전류 보호수단으로 사용하지 않습니다.
* 제품별 핀맵, 전기 사양과 지원 타이머는 해당 제품 설명서를 최종 기준으로 확인합니다.
===== 관련 문서 =====
* [[products:overview|제품 선택 가이드]]
* [[products:mpino_series|MPINO 제품 특징과 사용 흐름]]
* [[products:mpaino|MPAINO 모듈 구성과 논리 채널]]
* [[guide:getting_started|Arduino IDE로 처음 시작하기]]
* [[guide:wiring|첫 결선과 입출력 확인]]
* [[:safety|안전 및 설치 주의사항]]