String Prcss_ALL_Read(){ String str = ""; str += "AI?:"; for (int i = 0; i < Size_AI; i++) { char formattedNumber[5]; // 4자리 숫자 + 널 종료 문자 sprintf(formattedNumber, "%04X", Values_AI[i]); // 4자리로 고정된 형식의 문자열 생성 str += formattedNumber; // 형식화된 문자열 추가 str += ','; } str += RcvOK; str += "DI?:"; char formattedNumber[5]; sprintf(formattedNumber, "%04X", Values_DI); str += formattedNumber; str += ','; str += RcvOK; str += "PV_0?:"; if(rcv_10_PV){ for (int i = 0; i < RS485_1_Rcv_size*2; i++) { char formattedNumber[5]; sprintf(formattedNumber, "%04X", RS485_1_Values_PV[i]); str += formattedNumber; str += ','; } str += RcvOK; }else{ str += RcvErr; } str += "SV_0?:"; if(rcv_10_SV){ for (int i = 0; i < RS485_1_Rcv_size*2; i++) { char formattedNumber[5]; sprintf(formattedNumber, "%04X", RS485_1_Values_SV[i]); str += formattedNumber; str += ','; } str += RcvOK; }else{ str += RcvErr; } return str + FIN; } String Prcss_DO_Write(unsigned int data[], int dataSize){ String str = "DO!:"; if(dataSize != 1){ str += RcvErr; return str + FIN; } unsigned int data0 = data[0]; for (int bit = 0; bit < 16; bit++) { digitalWrite(DoPin[bit], bitRead(data0, bit) ? HIGH : LOW); } str += RcvOK; return str + FIN; } String Prcss_AO_Write(unsigned int data[], int dataSize){ String str = "AO!:"; int d = 2; for(int i=0 ; i data[i+1]) ? data[i] : data[i+1]; }else{ rng = data[i]; } AO_setup(i, rng); delay(d); i++; // every 0 ch, not 1 ch. } str += RcvOK; return str + FIN; } String Prcss_ChMC9(unsigned int data[], int dataSize){ String str = "ChMC9!:"; int d = 20; for(int i=0 ; i