Ардуино висит. Не уверен, что проблема с программным или аппаратным обеспечением

Я пытаюсь запустить очень простую программу, чтобы свечение светодиодов определенным образом, я подключил 9 светодиодов, чтобы аналогичным образом или цифровой выводы, 2 до 10, через 220 Ом резисторы; когда я бегу программа висит в Arduino через некоторое время интервала и светодиодов гаснет, не уверен, что это аппаратная проблема или какая-то ошибка в программе/коде.

Вот код:

int outGPIOsarr[9] = {2,3,4,5,6,7,8,9,10};

void setup() {
  
  for(int i=0; i<10; i++)
pinMode(outGPIOsarr[i], OUTPUT);
}

void loop() {
  
for(int i=0; i<10; i++) 
 {
digitalWrite(outGPIOsarr[i],HIGH);
delay(10);
 }

for(int i=0; i<10; i++) 
 {
digitalWrite(outGPIOsarr[i],LOW);
delay(10);
 }

}

, 👍2

Обсуждение

Что-нибудь горячее? Попробуйте использовать более высокие значения резисторов (470 или даже 1 К), вы получаете больше допустимых усилителей от 328P (IIRC 200 мА)., @Mat

@Mat , ничего не становится жарче , я проверил это, я заметил одну вещь: когда я меняю первый аргумент digitalwrite с outGPIOsarr[i] на соответствующий контакт и меняю цикл с 2 на 10, код работает нормально без проблем ! Но я не могу найти за этим веских доводов !?, @Ashish Jog


1 ответ


Лучший ответ:

3

Это UB!

Индексы в массиве в C++ отсчитываются от 0;

Итак, последний индекс в вашем массиве из 9 элементов равен 8.

Все циклы должны заканчиваться на 8. Ваши остановки в 9.

Доступ за пределы существующего элемента в массиве является неопределенным поведением - он зависает на микроконтроллере.

,

Ну что ж, это была досадная ошибка, спасибо, что указали >_<, @Ashish Jog

и OP не может удалить вопрос, если на него есть ответ, поддержанный голосованием, @Juraj

Но почему эта тема должна быть удалена?, @gbg

поскольку вопрос не касается arduino, это общий вопрос программирования, поэтому здесь он не по теме ... любые ответы также не по теме здесь, @jsotola

Я не согласен. Причина в том, что ОП не знает, что вызывает зависание - неправильная прошивка или неправильное оборудование. Итак, чтобы отметить вопрос как не относящийся к теме, вы должны буквально ответить на вопрос., @gbg

https://arduino.meta.stackexchange.com/questions/2667/trivial-questions-must-be-off-topic, @Juraj

OP хотел бы удалить этот вопрос, потому что это "досадная ошибка", и если бы она не была закрыта, при таком подсчете голосов это был бы "Горячий сетевой вопрос", представляющий Arduino SE в правой части каждой страницы SE., @Juraj