Уроки arduino. Урок 4. Множество светодиодов

kvk
kvk аватар
Offline
Зарегистрирован: 22.11.2017

Добрый день !!! Подскажите пожалуйста, как заставить каждый из режимов миганий светодиодов, 
проигрывать несколько раз?
Например режим "rendomLED" повторить несколько раз, прежде чем вернуться к первому режиму.
Как минимизировать, чтобы чтобы один блок режима не писать несколько раз. 


void randomLED()
{
  int index;
  int delayTime;
 
  index = random(8);   delayTime = 100;
 
  digitalWrite(ledPins[index], HIGH);  
  delay(delayTime);              
  digitalWrite(ledPins[index], LOW);   
}

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

почитай чонить по циклы. Например, for(;;)

kvk
kvk аватар
Offline
Зарегистрирован: 22.11.2017
Читал, но не очень понятно, как через команду "for" задать режим "random LED", скажем 10 раз.
Для подлключения 8светодиодов изначально задается вот эта команда.
int index;
  for(index = 0; index <= 7; index++)
  {
    pinMode(ledPins[index],OUTPUT);

А как по аналогии с этим вписать режим , не хватает моих знаний.

Посоветуйте, что можно сделать . Какие команды нужно внести вместо pinMode(ledPins[index], OUTPUT)  ?

kvk
kvk аватар
Offline
Зарегистрирован: 22.11.2017

Радиолюбительством занимаюсь уже много лет. А вот с  "Arduino" только начал знакомиться.

OlegK
OlegK аватар
Offline
Зарегистрирован: 26.11.2014

kvk пишет:
Какие команды нужно внести вместо pinMode(ledPins[index], OUTPUT)  ?

Вот вызов процедуры randomLED() туда и вставляйте.

Гриша
Offline
Зарегистрирован: 27.04.2014

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

b707
Offline
Зарегистрирован: 26.05.2017

kvk пишет:

Читал, но не очень понятно, как через команду "for" задать режим "random LED", скажем 10 раз.

10 раз РандомЛЕД:

for (i = 0; i <= 9; i++)
  {
    randomLED();
 }

 

bwn
Offline
Зарегистрирован: 25.08.2014

kvk пишет:

Радиолюбительством занимаюсь уже много лет. А вот с  "Arduino" только начал знакомиться.

Орешек знаний тверд, но все же, мы не привыкли отступать, нам расколоть его поможет, киножурнал ........
Вы из этого поколения или жертва ЕГЭ?

kvk
kvk аватар
Offline
Зарегистрирован: 22.11.2017

Ну , да киножурнал "Хочу все знать". Было такое время. А ЕГЭ уже мои дети прошли :)))

Гриша
Offline
Зарегистрирован: 27.04.2014

ОФФТОП

bwn, kvk, раз пошла такая тема, может и мне поможете? вот мой топик... Как я понял, основной вопрос этой темы решен и ее можно закрывать?

ПС kvk, настоятельно рекомендую начать с составления блок схемы, хотя бы для первых проектов (пост 5)...

kvk
kvk аватар
Offline
Зарегистрирован: 22.11.2017

b707 пишет:

kvk пишет:

Читал, но не очень понятно, как через команду "for" задать режим "random LED", скажем 10 раз.

10 раз РандомЛЕД:

for (i = 0; i <= 9; i++)
  {
    randomLED();
 }

 

Копиляция выдает ошибку, что то не так видно делаю.

Гриша
Offline
Зарегистрирован: 27.04.2014

kvk пишет:

b707 пишет:

kvk пишет:

Читал, но не очень понятно, как через команду "for" задать режим "random LED", скажем 10 раз.

10 раз РандомЛЕД:

for (int iii = 0; iii <= 9; iii++)
  {
    randomLED();
 }

 

Копиляция выдает ошибку, что то не так видно делаю.

возможно, не объявили переменную или переменные пересекаются... поправил, 1) пробуйте 2) постарайтесь понять, в чем ошибка. Похоже, что рановато вы взялись за код, необходимо начать с теории. 

kvk
kvk аватар
Offline
Зарегистрирован: 22.11.2017
Вот скетч , который у меня получился (это из темы урок arduino № 4 про подключения 8 светодиодов. )
https://www.youtube.com/watch?v=Z_CYSAE8UAS

Проблема в том, как сократить колличество циклов, (а их 10)в режиме randomLED в пару-тройку строчек .
Через команду FOR у меня не хватает знаний . Подскажите, кто в этом деле хорошо разбирается.



const int INTR_PIN = 13; // определяем , чтобы встроенный
                         // светодиод не светился.
int ledPins[] = {2,3,4,5,6,7,8,9}; //выводы, к которым подключаются 
                                   //внешние светодиоды.
                                   

void setup() {
  int index;
  for(index = 0; index <= 7; index++)
  {
   pinMode(INTR_PIN, OUTPUT);
   pinMode(ledPins[index],OUTPUT);
}
}

void loop() {
  digitalWrite(INTR_PIN, LOW);
  randomLED();
  oneOnAtATime();
}
 void randomLED()
{
  int index;
  int delayTime;
 {
   index = random(8);    delayTime = 100; //1.раз 
 
  digitalWrite(ledPins[index], HIGH);  
  delay(delayTime);              
  digitalWrite(ledPins[index], LOW);
  

  index = random(8);    delayTime = 100; //2.раза
 
  digitalWrite(ledPins[index], HIGH);  
  delay(delayTime);              
  digitalWrite(ledPins[index], LOW);
  

  index = random(8);    delayTime = 100; //3.раза
 
  digitalWrite(ledPins[index], HIGH);  
  delay(delayTime);              
  digitalWrite(ledPins[index], LOW);
  

  index = random(8);    delayTime = 100; //4.раза
 
  digitalWrite(ledPins[index], HIGH);  
  delay(delayTime);              
  digitalWrite(ledPins[index], LOW);
  

  index = random(8);    delayTime = 100; //5.раз
 
  digitalWrite(ledPins[index], HIGH);  
  delay(delayTime);              
  digitalWrite(ledPins[index], LOW);

  
  index = random(8);   delayTime = 100; //6.раз
 
  digitalWrite(ledPins[index], HIGH);  
  delay(delayTime);              
  digitalWrite(ledPins[index], LOW);
   

  index = random(8);   delayTime = 100; //7.раз
 
  digitalWrite(ledPins[index], HIGH);  
  delay(delayTime);              
  digitalWrite(ledPins[index], LOW);
  

   index = random(8);   delayTime = 100; //8.раз
 
  digitalWrite(ledPins[index], HIGH);  
  delay(delayTime);              
  digitalWrite(ledPins[index], LOW);
   

   index = random(8);   delayTime = 100; //9.раз
 
  digitalWrite(ledPins[index], HIGH);  
  delay(delayTime);              
  digitalWrite(ledPins[index], LOW);

   index = random(8);   delayTime = 100; //10.раз
 
  digitalWrite(ledPins[index], HIGH);  
  delay(delayTime);              
  digitalWrite(ledPins[index], LOW);  
} 
   delay(delayTime = 1000); // пауза между режимами
}


void oneOnAtATime()
{
  int index;
  int delayTime = 200;                     
 
  for(index = 0; index <= 7; index++)
  {
    digitalWrite(ledPins[index], HIGH); 
    delay(delayTime);          
    digitalWrite(ledPins[index], LOW); 
 }
   delay(delayTime = 1000); // пауза между режимами
}

 

kvk
kvk аватар
Offline
Зарегистрирован: 22.11.2017

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

Гриша
Offline
Зарегистрирован: 27.04.2014

читайте пост 5 !!!!!!!!! рисуйте, иначе вы не понимаете

kvk
kvk аватар
Offline
Зарегистрирован: 22.11.2017

Гриша пишет:

ОФФТОП

bwn, kvk, раз пошла такая тема, может и мне поможете? вот мой топик... Как я понял, основной вопрос этой темы решен и ее можно закрывать?

ПС kvk, настоятельно рекомендую начать с составления блок схемы, хотя бы для первых проектов (пост 5)...

Спасибо за отзыв, но как таковой алгоритм вообщем то и не нужен. Есть первичные уроки изучения arduino? с его первыми примерами. вот в них , в теме подлключений светодиодов и возникла мысл увеличить колличество режимов по их продолжительности .

А вот на счет вашей просьбы, разобраться в презентации, извините , не смогу. Если возникнут вопросы по эл.схемам , что куда подлючается и для чего нужны те или иные подлючения в схеме, постараюсь помочь.

Гриша
Offline
Зарегистрирован: 27.04.2014

kvk пишет:

но как таковой алгоритм вообщем то и не нужен.

контроллер работает строго по алгоритму. Выполняет только то, что этим алгоритмом описано. Если нет алгоритма работы - нет контроллера. даже "random" на самом деле не рандом - это строгий алгоритм и по этому вопросу куча топиков на этом форуме типа: "почему рандом не рандом... "

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

 

bwn
Offline
Зарегистрирован: 25.08.2014

Гриша пишет:

bwn, kvk, раз пошла такая тема, может и мне поможете? вот мой топик... 

У меня PP не установлен, пока даже посмотреть не могу. Вчера с одноклассником душевно посидели, так что сегодня точно ничего устанавливать не буду. Извини.

Гриша
Offline
Зарегистрирован: 27.04.2014

kvk пишет:

но как таковой алгоритм вообщем то и не нужен.

вот пример алгоритма:

Математику, физику и инженеру дали три одинаковых круглых ластика и попросили найти их объем.
Математик достал сантиметр и измерил длину окружности ластика. Затем он разделил результат на два Пи, чтобы узнать радиус, возвел полученное значение в куб, снова разделил на Пи, потом разделил на три четверти и таким образом получил объем.
Физик взял ровно 1 литр воды, бросил туда ластик и измерил объем вытесненной воды.
- А инженер?
- А инженер записал серийный номер ластика и посмотрел объем в справочнике.

ОФФТОП

тут их много :))))))))

вот "шедевр" касаемый некоторых вопросов этого форума :))))

>> Почему компьютерщики перепутывают Хэллоуин и Рождество?
>> Поскольку Oct. 31 = Dec. 25.

kvk
kvk аватар
Offline
Зарегистрирован: 22.11.2017

Гриша пишет:

kvk пишет:

но как таковой алгоритм вообщем то и не нужен.

вот пример алгоритма:

Математику, физику и инженеру дали три одинаковых круглых ластика и попросили найти их объем.
Математик достал сантиметр и измерил длину окружности ластика. Затем он разделил результат на два Пи, чтобы узнать радиус, возвел полученное значение в куб, снова разделил на Пи, потом разделил на три четверти и таким образом получил объем.
Физик взял ровно 1 литр воды, бросил туда ластик и измерил объем вытесненной воды.
- А инженер?
- А инженер записал серийный номер ластика и посмотрел объем в справочнике.

ОФФТОП

тут их много :))))))))

вот "шедевр" касаемый некоторых вопросов этого форума :))))

>> Почему компьютерщики перепутывают Хэллоуин и Рождество?
>> Поскольку Oct. 31 = Dec. 25.

тут смотря в чем объем измерять, в литрах или куб.метрах , в количестве литров  лучше :)