Помогите разобраться с организацией массива

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

void setup() {

  Serial.begin(57600);
}

int array[188]; // не зависимо от значения работают все каналы.

void loop() {
  //  array[0] = analogRead(A0);
  //  array[1] = analogRead(A1);
  //  array[2] = analogRead(A2);
  //  array[3] = analogRead(A3);
  //  array[4] = analogRead(A4);
  //  array[5] = analogRead(A5);

  Serial.print ("K1=") + Serial.println(array[0] = analogRead(A0));
  Serial.print ("K2=") + Serial.println(array[1] = analogRead(A1));
  Serial.print ("K3=") + Serial.println(array[2] = analogRead(A2));
  Serial.print ("K4=") + Serial.println(array[3] = analogRead(A3));
  Serial.print ("K5=") + Serial.println(array[4] = analogRead(A4));
  Serial.print ("K6=") + Serial.println(array[5] = analogRead(A5));

  delay(1000);
}

от 6 до пока памяти хватит

Так в том то и весь прикол, что я туда и 0,1,2,3,4,5,6,7-188 всяко разно подставлял, скетч всегда работает одинаково.

Вбей себе в мосх, что компилятор НИКАК и НИКОГДА не проверяет выход за границы массива, ты сам мальчик большой и должен понимать, что делаешь. Поставишь там 2, будет 2 валидных значения и 4 наедут на другие переменные и могут измениться в любой момент. Максимум, компилятор может выкинуть warning, но у тебя же они ведь отключены, правда?

1 лайк

Число, равное количеству элементов в массиве. В твоем случае - это число 6. Выделенное просто выучи!

Ой, не всегда :frowning:

А взглянуть на результаты работы можно?

В терминале
K1=75
K2=0
K3=104
K4=175
K5=217
K6=13
K1=75

К2 замкнут на землю.
Такая картина при любых адекватных числах в int array.

Создайте ещё одну переменную до и одну после массива и контролируйте их состояние при размерности массива меньшей чем пишется в него данных.

Пока у вас в памяти только один массив - ничего критического вы не увидите пока не станете писать в ячейки, которые уже будут в районе стека.

При объявлении массива, резервируется память под него. В твоем случае 188-6=182 байта используются неэффективно.


доброе утро!

1 лайк