Мой код не распечатает правильное значение для индекса массива 0 - PullRequest
0 голосов
/ 28 февраля 2020
#include <NewPing.h>

#define SONAR_NUM 6      // Number of sensors.
#define MAX_DISTANCE 500 // Maximum distance (in cm) to ping.

NewPing sonar[SONAR_NUM] =     // Sensor object array. Each sensor's trigger pin, echo pin, and max distance to ping.
{
  NewPing(1, 2, MAX_DISTANCE),   //1 Bottom right
  NewPing(3, 4, MAX_DISTANCE),   //2 Top right
  NewPing(5, 6, MAX_DISTANCE),   //3 Bottom middle
  NewPing(7, 8, MAX_DISTANCE),   //4 Top middle
  NewPing(9, 10, MAX_DISTANCE),  //5 Bottom left
  NewPing(11, 12, MAX_DISTANCE), //6 Top left
};

int Dist;
int myDist[6];
int m;
int minIndex;
int minValue;

void setup()
{
  Serial.begin(115200); // Open serial monitor at 115200 baud to see ping results.
  }

void loop()
{
  for (uint8_t i = 0; i < SONAR_NUM; i++)   // Loop through each sensor and store results.
  {
    delay(30); // Wait 30ms between pings . 29ms should be the shortest delay between pings.
    myDist[i] = sonar[i].ping_cm(); 
  }
  math();       //go to math function
}

void math()
{
    int minIndex;
    int myDist_length = sizeof(myDist) / sizeof(myDist[0]);        //find length of array
    int minValue = myDist[minIndex];                              //min value = value from min index of array
    for(byte j = 1; j < myDist_length; j++){                     //for loop lasts length of array
    if(myDist[j] < minValue) {                                  //if loop finds out if value is smaller than previous smallest
        minValue = myDist[j];
        minIndex = j;
    }
}
//Serial.print(minValue);
//Serial.print(", ");
Serial.print(myDist[0]);
Serial.println();

}

Мой код пытается найти значения от ультразвуковых c датчиков и сохранить их в массиве. Он работает нормально, за исключением того, что мой первый датчик не выводит значение, когда я пытаюсь напечатать индекс 0 массива. Я использовал другой код, и датчик функционирует так же, как и проводка. Мое предположение - способ, которым я храню это, неправильно. Все остальные индексы моего массива выводят соответствующее значение с правильного датчика, но номер 1 или индекс 0 - нет.

Ответы [ 2 ]

0 голосов
/ 29 февраля 2020

В функции math ():

int minIndex;

Должно быть

int minIndex = 0;

Вам необходимо задать начальное значение minIndex. Вы предполагаете, что это начинается с нуля. Это не безопасное предположение, так как это локальная переменная. Вам нужно явно установить его на ноль.

0 голосов
/ 28 февраля 2020

Какой вывод вы получаете для index 0?
Всегда ли это одно и то же число, например, 0? Или это случайное число? Всегда позитивный? Просто пытаюсь помочь тебе отладить.

...