void Periodic_run(){
  
  if(T_1ms){
    // Read Arduino AI
    // read_analog();
    T_1ms = false;
  }
  if(T_2ms){
    // Read Arduino AI
    read_analog();  // runtime of 1.xxx ms @8ch
    T_2ms = false;
  }
  if(T_5ms){
    // Read Arduino AI
    //read_analog();  // runtime of 2.048012 ms @16ch
    T_5ms = false;
  }
  if(T_10ms){
    //read_analog();
    T_10ms = false;
  }
  if(T_20ms){
    // send and recieve RS485
    send_485();
    recieve_485();
    T_20ms = false;
  }
  if(T_50ms){
    // Read Arduino DI    
    read_digital();
    T_50ms = false;
  }
  if(T_100ms){
    
    T_100ms = false;
  }
  if(T_200ms){
    
    T_200ms = false;
  }
  if(T_500ms){
    // RS485 recieve (for developing)
    recieve_485_0();
    T_500ms = false;
  }
  if(T_1000ms){
    // Read MC9 PV
    for(int i=0 ; i < 2 ; i++){
      if(RS485_1_Addr[i] > 0){
        write_buff(Buff_485_1_Wr, msg_MC9_PV(RS485_1_Addr[i]));
      }
    }
    /*
float sum_AI = 0.0f;
  float factor = 1.0f / AI_AVG_SIZE;
  String  str = "AI?:";
  for (int i = 0; i < Size_AI; i++) {
    int sum_AI = 0;
    for(int j = 0; j < AI_AVG_SIZE; j++) {
      sum_AI += (float) Recent_AI[i][j] * factor;
    }
    sum_AI *= 100.0f; // convert the sum to an integer representation
    unsigned int integer_part = (unsigned int)sum_AI;

    char formattedNumber[5]; // 4자리 숫자 + 널 종료 문자
    //sprintf(formattedNumber, "%04X", Values_AI[i]); // 4자리로 고정된 형식의 문자열 생성
    sprintf(formattedNumber, "%04X", integer_part); // 4자리로 고정된 형식의 문자열 생성
    str += formattedNumber; // 형식화된 문자열 추가
    str += ',';
  }
    Serial.println(str);
    */
    T_1000ms = false;
  }
  if(T_2000ms){
    if(numOf485 > 0){
      Serial.print("----- remain 485 buff : "); //  For
      Serial.println(numOf485);                 //  Debugging
    }
    T_2000ms = false;
  }
  if(T_5000ms){
    // Read MC9 SV
    for(int i=0 ; i < 2 ; i++){
      if(RS485_1_Addr[i] > 0){
        write_buff(Buff_485_1_Wr, msg_MC9_SV(RS485_1_Addr[i]));
      }
    }
    T_5000ms = false;
  }
}

void timer_1ms(){
  msCnt += 1;

  T_1ms = true;
  if (msCnt % 4 == 0){
    T_2ms = true;
  }
  if (msCnt % 5 == 0){
    T_5ms = true;
  }
  if (msCnt % 10 == 0){
    T_10ms = true;
  }
  if (msCnt % 20 == 0){
    T_20ms = true;
  }
  if (msCnt % 50 == 0){
    T_50ms = true;
  }
  if (msCnt % 100 == 0){
    T_100ms = true;
  }
  if (msCnt % 200 == 0){
    T_200ms = true;
  }
  if (msCnt % 500 == 0){
    T_500ms = true;
  }
  if (msCnt % 1000 == 0){    
    T_1000ms = true;
  }
  if (msCnt % 2000 == 0){
    T_2000ms = true;
  }
  if (msCnt > 5000){
    T_5000ms = true;
    msCnt = 0;
  }
}
