Увеличение с помощью подпрограмм в C для цикла - PullRequest
0 голосов
/ 03 марта 2020

У меня есть пять идентичных чипов с уникальным идентификатором DS2401, подключенных к Arduino, и я w sh для последовательного считывания серийного номера каждого из них в ОЗУ, чтобы я мог отправлять данные через последовательный порт.

У меня есть каждый из них инициализируется отдельно, так что я могу вызвать код для получения серийного номера с помощью ds24_0.getSerialNumber (), ds24_1.getSerialNumber () et c.

Если бы мне нужно было встроить их в для oop, как мне получить код для вызова ds24_i, где i - это номер итерации l oop? Я поступаю неправильно?

OneWire oneWire_0(10);
DS2401 ds24_0(&oneWire_0);
OneWire oneWire_1(A0);
DS2401 ds24_1(&oneWire_1);
OneWire oneWire_2(A1);
DS2401 ds24_2(&oneWire_2);
OneWire oneWire_3(A2);
DS2401 ds24_3(&oneWire_3);
OneWire oneWire_4(A3);
DS2401 ds24_4(&oneWire_4);

//snip

void idRequest()
{
  uint8_t serialNumber[5][6];
  uint8_t result[5];

  result[0] = ds24_0.init();  //how do I loop this
  result[1] = ds24_1.init();
  result[2] = ds24_2.init();
  result[3] = ds24_3.init();
  result[4] = ds24_4.init();

  if(result[0] == DS2401_SUCCESS) 
  {
    ds24_0.getSerialNumber(serialNumber[0]);  //how do I loop this also?
  }

  else if(result[0] == DS2401_CRC_FAIL || DS2401_NOT_DS2401 || DS2401_NO_WIRE) 
    {
      for (uint8_t i = 0; i < 6; i++) 
      {
        serialNumber[0][i] = 0;
      }
    }
//assemble packet here
}

Спасибо!

Ответы [ 2 ]

1 голос
/ 03 марта 2020

В определении:

 #define NB_PIN 5  

В коде:

 uint8_t tabUnit[NB_PIN]={10, 0xA0, 0xA1, 0xA2, 0xA3};
 OneWire *tabOneWire[NB_PIN];
 DS2401  *tabDS2401[NB_PIN];
 uint8_t  result[NB_PIN];

 for ( int i=0; i<NB_PIN; i++)
 {
   tabOneWire[i] = new OneWire (tabUnit[i]);
   tabDS2401 [i] = new DS2401 (tabOneWire[i]);
   result [i]    = tabDS2401[i]->init();
 }

 // .........

 for ( int i=0; i<NB_PIN; i++)
 {
    delete tabDS2401 [i];
    delete tabOneWire[i];
 }
0 голосов
/ 03 марта 2020

Поместите ds24 в массив.

auto ds24s = {ds24_0, ds24_1, ds24_2, ds24_3, ds24_4};
for (int i = 0; i < 5; i++)
{
    result[i] = ds24s[i].init();
}
...