#1 2018-01-31 21:52:46

Blaze
Учасник
Зареєстрований: 2018-01-31
Повідомлень: 13

Непонятное поведение светодиодов при программировании мигания

Всем привет. Решил тут сделать подобие грозового облака типа светильника. Решил пока не приедут материалы нужные опробовать свои силы в программировании диодов. Взял из своего набора 10 диодов, подключил каждый на свой разьем через резистор 220. вот фото.

image1



дальше у меня есть вот такая программа.




int myPins[] = {4,5,6,7,8,9,10,11,12,13};
int pinsNum = 10;
int D = 0;

void setup() {

  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);
  
}

// the loop function runs over and over again forever
void loop() {
 
  for (int j=0;j<=random(15,35);j++)
  {
   flash(myPins[random(0,11)]);
  }
   delay(4000);

}

void flash(int led1){
  D = random(20, 120);

  if (random(0,100)<50){
    int led2 = myPins[random(0,pinsNum+1)];
    digitalWrite(led1, HIGH);   // turn the LED on (HIGH is the voltage level)
    digitalWrite(led2, HIGH);   // turn the LED on (HIGH is the voltage level)
    delay(D);                       
    digitalWrite(led1, LOW);    // turn the LED off by making the voltage LOW
    digitalWrite(led2, LOW);    // turn the LED off by making the voltage LOW
    delay(D);     
    }
   else {
    digitalWrite(led1, HIGH);   // turn the LED on (HIGH is the voltage level)
    delay(D);                       
    digitalWrite(led1, LOW);    // turn the LED off by making the voltage LOW
    delay(D);     
   }
   }

В итоге что у меня происходит. Я занес в массив свои пины, чтоб было проще немного. В конечном итоге запускается функция мигания в которой с некоторой вероятностью могут загореться сразу два диода. в общем красивое мигание получается, однако после нескольких проходов зависает и горит один и тот же диод. При изменении программы постоянно разные странные причины. Чем больше переменных добавляю чтоб облегчить управление программой тем больше странных багов. нифига не понимаю. может потому что у меня Arduino китайский и глючный? smile Помогите. вот такое в конечном итоге получается.

image2

Остання редакція Blaze (2018-01-31 22:05:13)

Неактивний

#2 2018-01-31 23:15:27

Blaze
Учасник
Зареєстрований: 2018-01-31
Повідомлень: 13

Re: Непонятное поведение светодиодов при программировании мигания

Вячеслав Азаров пише:

Это может вырождаться последовательность генератора квазислучайных чисел. Поробуйте в конце цикла выполнять, например так: randomSeed(millis());

В конце какого именно цикла? И что это дает? Вообще когда я убрал переменные, а самое главное убрал массив пинов, то стало все просто великолепно и без залипаний. То есть получается что random не очень пашет с переменными а особенно с массивом. В общем все еще интересно что дает ваша команда.

Неактивний

#3 2018-02-01 14:57:27

Blaze
Учасник
Зареєстрований: 2018-01-31
Повідомлень: 13

Re: Непонятное поведение светодиодов при программировании мигания

Проблема решена. Если вдруг у вас будет подобная ошибка. У меня в массиве ровно 10 значений, но по ошибке в обращении к массиву поставил рандомное число (0,11) то есть будут числа от 0 до 10 включительно. А если начинать с нуля то у меня надо ставить 9 включительно. надеюсь поможет новичкам.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму