增量索引在for循环结束时不会改变

Incremental index doesn't change at end of for loop

我想将 Arduino 与 PLC 连接起来以获取一些信息。

我的问题在功能 3:设置警报标志/重置标志。此功能用于比较历史值和当前值。我尝试处理一些整数 (test_number) 并处理二进制 16 位数据以在某个位置找到 1。我发现 Findbit 函数中的 for 循环,应该重复 16 次,无限运行。它不会更改仍然停留在 1 的增量索引(变量名 bit_1)。

这是我的代码:

int test_number_array[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int test_number = 0;
int bit_1 = 0;
int Andbit = 0;
const char* message;
int flagAlarm[2][16] = {};
int flagReset[2][16] = {};


void setup()
{
  // put your setup code here, to run once:
  Serial.begin( 9600 );
}

void loop()
{
  // put your main code here, to run repeatedly:
  for (int j = 1; j <= 2; j++)
  {
    for (int i = 1; i <= 2; i++)   // Example with 2 modbus address
    {
      unsigned int address = 40000 + i;
      Serial.print ("Modbus address = ");
      Serial.println(address, DEC);
      pull_data(i);
      Serial.print("Test number is ");
      Serial.println(test_number);
      Findbit(i);
      Serial.println("------------------------------------------------- ");
    }
  }
  while (1)
  {

  }
}

// ---------------Function 1 : Function finding alarm bit-----------------//

void Findbit(int i)
{
  for (bit_1 = 0; bit_1 <= 15; bit_1++)
  {
    Andbit = test_number & 1;
    Serial.print("Test number (BINARY) is ");
    Serial.println(test_number, BIN);
    Serial.print("Check at bit number ");
    Serial.println(bit_1);
    Serial.print("And bit is ");
    Serial.println(Andbit, BIN);
    Serial.print("flagAlarm(Before1) = ");
    Serial.println(flagAlarm[i][bit_1]);
    Serial.print("flagreset(Before1) = ");
    Serial.println(flagReset[i][bit_1]);

    if (Andbit == 1)                //found "1" pass into loop
    {
       flagAlarm[i][bit_1] = 1;
    }

    else
    { 

    }
    Serial.print("flagAlarm(Before2) = ");
    Serial.println(flagAlarm[i][bit_1]);
    Serial.print("flagreset(Before2) = ");
    Serial.println(flagReset[i][bit_1]);
    Set_reset_flag(i,bit_1);
    test_number = test_number >> 1;
    Serial.print("flagAlarm(After) = ");
    Serial.println(flagAlarm[i][bit_1]);
    Serial.print("flagreset(After) = ");
    Serial.println(flagReset[i][bit_1]);
    Serial.println(" ");
   }
 }

// -----------------------Function 2 : Pull data------------------------- //

int pull_data(int i)
{
  i = i - 1;
  test_number = test_number_array[i];
  return test_number;
}


// -------------Function 3 : Set alarm flag / reset flag ---------------- //

void Set_reset_flag(int i, int bit_1)
{
  Serial.print("i = ");
  Serial.println(i);
  Serial.print("bit_1 = ");
  Serial.println(bit_1);

  if (flagAlarm[i][bit_1] == 1 && flagReset[i][bit_1] == 0)
  {
    Serial.print("Alarm at bit ");
    Serial.println(bit_1);
    flagAlarm[i][bit_1] = 0;
    flagReset[i][bit_1] = 1;
  }

  else if (flagAlarm[i][bit_1] == 0 && flagReset[i][bit_1] == 1)
  {
    Serial.print("Reset Alarm at bit ");
    Serial.println(bit_1);
    flagReset[i][bit_1] = 0;
  }

  else if (flagAlarm[i][bit_1] == 1 && flagReset[i][bit_1] == 1)
  {
    Serial.print("Alarm still active at bit ");
    Serial.println(bit_1);
    flagAlarm[i][bit_1] = 0;
    flagReset[i][bit_1] = 1;
  }
  else
  {

  }

}

可能是您的 bit_1 变量是从此处未提及的其他一些代码修改而来的,或者根本没有得到优化?另外,是否有必要将循环计数器设为全局变量?您可以在 Findbit 函数中声明它吗?