#1 2020-09-03 18:37:29

VitaliyGrim
Участник
Зарегистрирован: 2020-09-03
Сообщений: 2

Подскажите новичку.

решил сделать зажигание светодиодов лесенкой от 2 до 9 пина с использованием многомерного массива.
И вот когда я по своему разумению инвертировал часть кода с перебором массива для выключения светодиодов сзади-наперед, возникла проблема. Спонтанно тухнет случайный светодиод(или несколько) и зависание(пауза) на полпути назад. Подскажите где, я неправильно что то сделал?
Arduino nano(китай CH340)
листинг выкладываю:

int leds[][4] = {{2,3,4,5},{6,7,8,9}};
int ledsFirstLevel = sizeof(leds) / sizeof(leds[0]);
int ledsSecondLevel = sizeof(leds[0]) / sizeof(int *);
int pause = 1000;

// the setup function runs once when you press reset or power the board
void setup() {
 for(int i=0; i < ledsFirstLevel; i++){
 for(int j=0; j < ledsSecondLevel; j++){
pinMode(leds[i][j], OUTPUT);
  }
 }
}

void loop(){
//  Цикл for - для, включаем диоды по очереди
  for(int i=0; i < ledsFirstLevel; i++){
 for(int j=0; j < ledsSecondLevel; j++){
  ledOn(leds[i][j], 100);
   }
  }
// Выключаем диоды по очереди
 for(int i=ledsFirstLevel; i > -1; i--){
 for(int j=ledsSecondLevel; j > -1; j--){
  ledOff(leds[i][j], 100);
  }
 }
 
}
void ledOn (int numberPin, int paramPause){
  digitalWrite(numberPin, HIGH);
  delay(paramPause);
}
void ledOff (int numberPin, int paramPause){
  digitalWrite(numberPin, LOW);
  delay(paramPause);
  }

#2 2020-09-03 20:51:15

г0сть
Гость

Re: Подскажите новичку.

Выведите в монитор значения i,j и посмотрите что должно быть и что в реальности

#3 2020-09-03 21:27:30

VitaliyGrim
Участник
Зарегистрирован: 2020-09-03
Сообщений: 2

Re: Подскажите новичку.

Спасибо за совет! Нашел в чем ошибка.
Исправил и заработало=) я не учел что контроллер начинает считать с 0. и соответственно он пытался перебрать несуществующие в массиве элементы.

for(int i=ledsFirstLevel-1; i >= 0; i--){
for(int j=ledsSecondLevel-1; j >= 0; j--){
  ledOff(leds[i][j], 100);
 

P.S. заодно научился работать с монитором.

Быстрое сообщение

Введите сообщение и нажмите Отправить

Подвал раздела