Arduino Mega LED не светится должным образом

Я написал это для своего Arduino Mega 2560:

int LED[14] = { 28,29,30,31,32,33,34,35,36,37,38,39,40,41 } ;
...
... (some other code like setup(), etc. Note:pinmode output for this 14 leds wich pins is defined in
... array named LED[]
...
void intro(){
  for(int j=1; j<100; j++ ){
    for(int r=1; r<15; r++ ){ digitalWrite(LED[r],HIGH); delay(100);  }
    delay(100);
    for(int r=1; r<15; r++ ){digitalWrite(LED[r],LOW); delay(100);}
    delay(100);
  }
  Serial.print("Pattern started");
  delay(1000);
}

Поэтому, когда я запускаю этот скрипт, я ожидаю, что каждый светодиод загорится в последовательности и будет гореть до тех пор, пока второй цикл не выключит его, но я вижу, что при включении каждого светодиода, при включении 9-го светодиода, первый 8 светодиодов выключаются по необъяснимым причинам, а светодиоды с 9 по 14 загораются один за другим, продолжая гореть. Этого я и ожидал, но почему первые 8 светодиодов отключаются до того, как заканчивается цикл и начинается второй цикл?

, 👍0

Обсуждение

возможно, вы перегружаете контакты данных, @jsotola

для (int r = 0; r < 14; r++). первый индекс равен нулю, а размер массива равен 14, @Juraj


2 ответа


0

ваши операторы for с r=1 должны быть изменены на r=0;r<14. Массивы всегда начинаются с первого элемента, равного 0, поэтому у вас от 0 до 13.

,

и как это вызывает описанное поведение кода?, @Juraj


1

Несмотря на то, что ваша петля неверна, ошибка кодирования вряд ли вызовет описанное вами поведение.

Пожалуйста, убедитесь, что токоограничивающий резистор включен последовательно с каждым светодиодом. Поскольку у вас 14 светодиодов, вам понадобится 14 токоограничивающих резисторов. Для этой цели должны подойти резисторы на 470 Ом (или аналогичные).

Согласно другим комментариям, массивы С++ начинаются с 0, а не с 1. Последний элемент равен размеру массива минус 1. В вашем случае 14 - 1 = 13. Таким образом, цикл может продолжаться до тех пор, пока индекс < 14 (или <= 13)

Таким образом, ваши циклы должны выглядеть так:

for(int r=0; r<14; r++ ) {
  digitalWrite(LED[r],HIGH);
  delay(100);
}
,