#3 Re: Програмування Arduino » USB Відеокамера та комп'ютер - як їх з'єднати за допомогою ESP8266 ? » 2024-10-08 16:39:09

а чи є в нас якісь курси де б мені як чайнику розтлумачили все "на пальцях" починаючи з самого простого ? можливо хтось знає в кого можна навчитись працювати з Arduino та створювати власні проекти? самоосвіта щось мені не дуже вдається, все ж таки має бути чіткий план що вивчати, та саме головне, виникають питання на які потрібно обовязково отримати відповіді. Можливо тут хтось має талант пояснювати а саме головне гарне терпіння :-) бо я розумію як вам профі інколи тяжко відповідати на елементарні питання. Допоможіть будь-ласка, обговоримо ціну навчання :-)

#4 Re: Програмування Arduino » USB Відеокамера та комп'ютер - як їх з'єднати за допомогою ESP8266 ? » 2024-10-07 14:55:54

от стало цікаво, а хоч сам сигнал від мікрофону я зможу передати на комп'ютер? чи також будуть люті тормоза? просто хотілося на цьому прикладі зрозуміти для себе як взагалі передати щось через esp8266 на комп'ютер  smile

#5 Re: Програмування Arduino » USB Відеокамера та комп'ютер - як їх з'єднати за допомогою ESP8266 ? » 2024-10-04 21:20:17

mini_1.png
Знайшов декілька сайтів по цій камері та навіть відео на Ютуб, але дуже засмутився, швидкість передачі відео просто жахлива. Не розумію як тоді працюють сучасні вай фай камери :-(

#6 Re: Програмування Arduino » USB Відеокамера та комп'ютер - як їх з'єднати за допомогою ESP8266 ? » 2024-10-04 16:49:11

а що це мені дасть? ви вибачте я зовсім нуб ще :-) і можу задавати дуже тупі запитання, так що завчасно перепрошую

#8 Re: Програмування Arduino » USB Відеокамера та комп'ютер - як їх з'єднати за допомогою ESP8266 ? » 2024-10-04 13:36:44

ой дуже Вам дякую за відповіді, зараз спробую розпізнати хоча б той чіп  smile і надам відповідь

#9 Re: Програмування Arduino » USB Відеокамера та комп'ютер - як їх з'єднати за допомогою ESP8266 ? » 2024-10-04 10:15:14

dimich пише:

Якщо у камери як у пристроя вцілому USB інтерфейс, а у ESP8266 немає USB, то як їх зʼєднати? Емулювати USB на ESP8266 програмно? hmm

Якщо чіп камери окрім USB вміє, наприклад, SPI і дозволяє переконфігурацію ззовні, або відомий апаратний інтерфейс між самою камерою і чіпом, то чисто теоретично щось можливо придумати. Але потрібна документація на чіп камери, також знадобиться апаратна модифікація. І не факт, що швидкодії ESP8266 вистачить для передачі відеопотоку. Подумайте, чи варте воно того.

Щоб не викидати (у мене б теж рука не піднялась), можна зробити, наприклад, примітивний настільний USB-мікроскоп що підключається до компа по USB. Спробуйте просто перевернути обʼєктив зворотнім боком.

===
І не факт, що швидкодії ESP8266 вистачить для передачі відеопотоку. - а ESP32 підійде краще для цього?

#10 Re: Програмування Arduino » USB Відеокамера та комп'ютер - як їх з'єднати за допомогою ESP8266 ? » 2024-10-04 10:14:04

дуже дякую вам за цікаву ідею по мікроскопу, а якщо я наприклад відпаяю просто саму камеру та мікрофон, невже не можна передати відео з самої камери? чи потрібен обовязково сам чіп який декодує відео з камери?

#11 Програмування Arduino » USB Відеокамера та комп'ютер - як їх з'єднати за допомогою ESP8266 ? » 2024-10-03 22:28:15

sxstalker
відповідей: 19

Знайшов в своїх запасах різного хламу запальничку-відеокамеру яка підключається до комп'ютера по USB та має слот для microSD карти, звісно ж акум здох, але побачив що відео знімає наче більш менш прийнятне. Викидати якось дико, от і подумав зробити з неї вай фай відеоглазок з можливістью перегляду на ПК та на Андроід телефоні.
Шановні форумчани, чи може хтось допоможе мені бестолковому це втілити у реальне життя?
І дуже цікаво це зробити самому а не купувати готове, звісно ж під вашим керівництвом та цінними вказівками, може хоч так на практиці я почну розуміти програмування :-)

Що в мене є та що я вмію:
1. ESP32 але хотілося б зробити на ESP8266 так як вона менша за розміром;
2. камера-запальничка з мікрофоном                                                          ;
3. акуми 18650 або ж акуми від мобільного телефона;
4. плата зарядки акума з контролем розряду акума;
5. паяльник та вміння паяти :-)
6. заливати скетчі я вмію

Може комусь це буде також цікаво? Тож прошу вашої допомоги по братерськи !
Ось цей звір
mini_photo_2024-10-03_22-11-11-2.jpg
mini_photo_2024-10-03_22-11-11.jpg

#12 Re: Програмування Arduino » Нужна помощь начинающему!!! 3-х режимный фонарик » 2024-03-20 00:39:42

dimich, змінивши трохи ваш код нарешті я здається допер як воно все працює
задача:
лед світить 4000 мс
лед не світить 1000 мс
лед світить 2000 мс
лед не світить 2000 мс
====================================================

int state = 0; // поточний стан. з початку - "0";
unsigned long last_time;

void setup() {
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW); 
}

void loop() {
  unsigned long now = millis();

  switch (state)
  {
    case 0: // додав цей кейс
      if (now - last_time >= 10) { // LED має світити 2000 мс? вірно?
        digitalWrite(13, HIGH);
        last_time = now;
        state = 1;
      }
      break;
    case 1:
      if (now - last_time >= 4000) { // LED має не світити 200 мс? вірно?
        digitalWrite(13, LOW);
        last_time = now;
        state = 2;
      }
      break;
    case 2:
      if (now - last_time >= 1000) { // LED має світити 500 мс? вірно?
        digitalWrite(13, HIGH);
        last_time = now;
        state = 3;
      }
      break;
    case 3:
      if (now - last_time >= 2000) { // LED має не світити 2000 мс? вірно?
        digitalWrite(13, LOW);
        last_time = now;
        state = 4; // переходим в початковий стан "0"
      }
      break;
      case 4:
      if (now - last_time >= 2000) { // LED має не світити 2000 мс? вірно?
        digitalWrite(13, LOW);
        last_time = now;
        state = 0; // переходим в початковий стан "0"
      }
      break;
  }
}

#13 Re: Програмування Arduino » Нужна помощь начинающему!!! 3-х режимный фонарик » 2024-03-20 00:27:55

нашел ошибку case : 0  , исправил на case 0: и так далее но лед теперь все время светится
==================================================

просто зайшов пише:
sxstalker пише:

заменил digitalWrite(13, LOW); на digitalWrite(13, HIGH);  в самом начале
первый цикл все работает верно

ладно если Вам это сложно, может так будет проще для понимания

unsigned long last_time;

void setup() {
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW); 

}

bool on = false; // поточний стан. з початку - вимкнено;

void loop() {
  unsigned long now = millis();
  static unsigned char task=0;
switch (task)
  {
	case : 0  
	   digitalWrite(13, HIGH); // вмикаєм 
       if (now - last_time >= 2000) { // пройшло 1000 мс ?
       last_time = now;
       on = true; // зберігаєм поточний стан, що увімкнено
       }
       break; 
    case : 1 
          digitalWrite(13, LOW); // вимикаєм       
       if (now - last_time >= 200) { // пройшло 300 мс ?
          last_time = now;
          on = false; // зберігаєм поточний стан, що вимкнено
          }
       break; 
    case : 2    
          digitalWrite(13, HIGH); // вмикаєм	
       if (now - last_time >= 500) { // пройшло 1000 мс ?
          last_time = now;
          on = true; // зберігаєм поточний стан, що увімкнено
        }
       break; 
    case : 3 
           digitalWrite(13, LOW); // вимикаєм	
        if (now - last_time >= 2000) { // пройшло 300 мс ?
           last_time = now;
           on = false; // зберігаєм поточний стан, що вимкнено
        }
       break; 
    default :
       break; 	
  } 


}

#14 Re: Програмування Arduino » Нужна помощь начинающему!!! 3-х режимный фонарик » 2024-03-20 00:10:50

выбивает ошибку при запуске
OShIBKA.png
OShIBKA_2.png
==================================================

просто зайшов пише:
sxstalker пише:

заменил digitalWrite(13, LOW); на digitalWrite(13, HIGH);  в самом начале
первый цикл все работает верно

ладно если Вам это сложно, может так будет проще для понимания

unsigned long last_time;

void setup() {
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW); 

}

bool on = false; // поточний стан. з початку - вимкнено;

void loop() {
  unsigned long now = millis();
  static unsigned char task=0;
switch (task)
  {
	case : 0  
	   digitalWrite(13, HIGH); // вмикаєм 
       if (now - last_time >= 2000) { // пройшло 1000 мс ?
       last_time = now;
       on = true; // зберігаєм поточний стан, що увімкнено
       }
       break; 
    case : 1 
          digitalWrite(13, LOW); // вимикаєм       
       if (now - last_time >= 200) { // пройшло 300 мс ?
          last_time = now;
          on = false; // зберігаєм поточний стан, що вимкнено
          }
       break; 
    case : 2    
          digitalWrite(13, HIGH); // вмикаєм	
       if (now - last_time >= 500) { // пройшло 1000 мс ?
          last_time = now;
          on = true; // зберігаєм поточний стан, що увімкнено
        }
       break; 
    case : 3 
           digitalWrite(13, LOW); // вимикаєм	
        if (now - last_time >= 2000) { // пройшло 300 мс ?
           last_time = now;
           on = false; // зберігаєм поточний стан, що вимкнено
        }
       break; 
    default :
       break; 	
  } 


}

#15 Re: Програмування Arduino » Нужна помощь начинающему!!! 3-х режимный фонарик » 2024-03-19 23:49:36

ух, боюсь я тут пока вас не пойму еще, для меня это все пока за ширмой неизведанного smile
но если есть какой-то способ более правильный мигать лед так как я хочу то я только за чтобы научится новому
==========================================================================

просто зайшов пише:

вообще millis(); очень неудобная функция для 8ми битных микроконтроллеров ,  мало того что не точная, так еще и занимает кучу времени на обработку 32-х битной математики.
Что мешало разрабам добавить для пользователей глобальный флаг в обработчик прерывания по таймеру0 не понятно...
Хотя это решается включением прерывания по совпадению TIMER0_COMPA_vect .

#16 Re: Програмування Arduino » Нужна помощь начинающему!!! 3-х режимный фонарик » 2024-03-19 23:46:48

dimich , в цьому прикладі точно така ж біла в мене, перший цикл проходить все вірно а потім є блимання лед які зовсім по інтервалу не заявлені в масиві, можливо то глюк цієї віртуалки? чи я десь все ж таки щось не зрозумів?
https://wokwi.com/projects/392819629072839681
===================================================================

unsigned int dur[4] = { 3000, 200, 1500, 2000 };  // масив тривалостей (duration) для кожного стану
byte led[4] = { HIGH, LOW, HIGH, LOW };          // масив значень digitalWrite для кожного стану
int state = 0; // поточний стан. з початку - "0";
unsigned long last_time;

void setup() {
  pinMode(13, OUTPUT);
  digitalWrite(13, HIGH); 
}

void loop() {
  unsigned long now = millis();

  if (now - last_time >= dur[state]) { // якщо час поточного стану вийшов
    digitalWrite(13, led[state]);      // вмикаєм або вимикаєм світлодіод
    last_time = now;
    state = state + 1; // переходим у наступний стан
    // але максимально можливий номер стану - "3"
    // якщо це був останній - переходим у початковий стан "0"
    if (state > 3) {
      state = 0;
    }
   }
}

#17 Re: Програмування Arduino » Нужна помощь начинающему!!! 3-х режимный фонарик » 2024-03-19 23:38:06

заменил digitalWrite(13, LOW); на digitalWrite(13, HIGH);  в самом начале
первый цикл все работает верно
но как переходит к выполнению по второму кругу мигания то
со светодиодом какие-то происходят не заявленные мигания
где я что-то не понял возможно?
==================================================

просто зайшов пише:
sxstalker пише:

попробовал ваш код, но я так понимаю нужно инвертировать !HIGH и !LOW ? так как сейчас LED мигает наоборот smile

нет, мигает он правильно...
начальное значение LED=LOW, задача0 отсчитывает 2000мс, по истечению счета переключается на задачу1 и включает LED=HIGH
,  задача1 отсчитывает 200мс, по истечению счета переключается на задачу2 и выключает LED=LOW, и тд.

#18 Re: Програмування Arduino » Нужна помощь начинающему!!! 3-х режимный фонарик » 2024-03-19 23:18:57

dimich, спробував також і ваш код і також лед мигає навпаки smile
https://wokwi.com/projects/392817187868217345
=====================================================

dimich пише:

Ця конструкція:

sxstalker пише:
  if (!on) {
...
  } else if (on) {
...
  } else if (!on) {
...
  } else if (on) {
...
  } 

не має сенсу. Якщо перша умова "if (!on)" виконалась, то решта вже не виконуються. А якщо не виконалась, то обовʼязково виконається друга - "if (on)", бо вона протилежна першій. А дві останні - ніколи не виконаються.

В попередньому прикладі у вас було всього два стани: світлодіод вимкнено, і світлодіод увімкнено. Тому було достатньо змінної типу bool, у якої всього два можливих значення.

В останньому прикладі у вас чотири стани:
* вимкнено перший раз (на 2000 мс)
* увімкнено перший раз (на 200 мс)
* вимкнено другий раз (на 500 мс)
* увімкнено другий раз (на 2000 мс)

Тому для збереження стану потрібна змінна такого типу, щоб могла приймати як мінімум 4 значення. Для простоти візьмем int. Стани будем нумерувати від 0 до 3. І для ясності перейменуєм змінну з "on" на "state".

int state = 0; // поточний стан. з початку - "0";

void loop() {
  unsigned long now = millis();

  if (state == 0) { // в стані "0"?
    if (now - last_time >= 2000) {
      digitalWrite(13, HIGH);
      last_time = now;
      state = 1; // переходим в стан "1"
    }
  } else if (state == 1) { // в стані "1"?
     if (now - last_time >= 200) {
      digitalWrite(13, LOW);
      last_time = now;
      state = 2; // переходим в стан "2"
    }
  } else if (state == 2) { // в стані "2"?
    if (now - last_time >= 500) {
      digitalWrite(13, HIGH);
      last_time = now;
      state = 3; // переходим в стан "3"
    }
  } else if (state == 3) { // в стані "3" ?
     if (now - last_time >= 2000) {
        digitalWrite(13, LOW);
       last_time = now;
       state = 0; // переходим в початковий стан "0"
    }
  }
}

Абсолютно те ж саме, тільки switch/case замість if/else. Так більш читабельно:

int state = 0; // поточний стан. з початку - "0";

void loop() {
  unsigned long now = millis();

  switch (state)
  {
    case 0:
      if (now - last_time >= 2000) {
        digitalWrite(13, HIGH);
        last_time = now;
        state = 1;
      }
      break;
    case 1:
      if (now - last_time >= 200) {
        digitalWrite(13, LOW);
        last_time = now;
        state = 2;
      }
      break;
    case 2:
      if (now - last_time >= 500) {
        digitalWrite(13, HIGH);
        last_time = now;
        state = 3;
      }
      break;
    case 3:
      if (now - last_time >= 2000) {
        digitalWrite(13, LOW);
        last_time = now;
        state = 0; // переходим в початковий стан "0"
      }
      break;
  }
}

Тепер зверніть увагу на те, що дії при переході між станами практично однакові. Відрізняються тільки
тривалості: 2000, 200, 500, 2000
значення, що передається у digitalWrite: HIGH, LOW, HIGH, LOW
номер наступного стану: 1, 2, 3, 0, 1, 2 ...

Таким чином можна використати один і той же код для циклічного переходу між станами. Тривалості та значення для digitalWrite помістимо у масиви, а значення з масивів вибиратимем по номеру стану:

unsigned int dur[4] = { 2000, 200, 500, 2000 };  // масив тривалостей (duration) для кожного стану
byte led[4] = { HIGH, LOW, HIGH, LOW };          // масив значень digitalWrite для кожного стану
int state = 0; // поточний стан. з початку - "0";

void loop() {
  unsigned long now = millis();

  if (now - last_time >= dur[state]) { // якщо час поточного стану вийшов
    digitalWrite(13, led[state]);      // вмикаєм або вимикаєм світлодіод
    last_time = now;
    state = state + 1; // переходим у наступний стан
    // але максимально можливий номер стану - "3"
    // якщо це був останній - переходим у початковий стан "0"
    if (state > 3) {
      state = 0;
    }
   }
}

Тепер зверніть увагу, що в масиві led всього два варіанти значень для digitalWrite: HIGH і LOW, і вони чергуються. Можна обійтись без цього масиву. Як його позбутись - вам в якості самостійного завдання smile

#19 Re: Програмування Arduino » Нужна помощь начинающему!!! 3-х режимный фонарик » 2024-03-19 23:12:10

спасибо! я обязательно посмотрю! smile
=========================================

просто зайшов пише:

рекомендую изучить "полный справочник по С" Герберт Шилдт
https://glagolew2010.narod.ru/
квалификаторы типов
и области видимости.

#20 Re: Програмування Arduino » Нужна помощь начинающему!!! 3-х режимный фонарик » 2024-03-19 23:11:06

попробовал ваш код, но я так понимаю нужно инвертировать !HIGH и !LOW ? так как сейчас LED мигает наоборот smile
вот проект https://wokwi.com/projects/392815604378833921
==============================================

просто зайшов пише:

как-то так...

unsigned long last_time;

void setup() {
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW); 

}

bool on = false; // поточний стан. з початку - вимкнено;

void loop() {
  unsigned long now = millis();
  static unsigned char task=0;
switch (task)
  {
	  case 0:   
       if (now - last_time >= 2000) { // пройшло 1000 мс ?
          digitalWrite(13, HIGH); // вмикаєм
          last_time = now;
          task=1; // переходим к следующей задаче
        }
       break; 
    case 1:   
       if (now - last_time >= 200) { // пройшло 300 мс ?
          digitalWrite(13, LOW); // вимикаєм
          last_time = now;
          task=2; 
        }
       break; 
    case 2:     
       if (now - last_time >= 500) { // пройшло 1000 мс ?
          digitalWrite(13, HIGH); // вмикаєм
          last_time = now;
          task=3;
        }
       break; 
    case 3: 
        if (now - last_time >= 2000) { // пройшло 300 мс ?
           digitalWrite(13, LOW); // вимикаєм
           last_time = now;
           task=0;
        }
       break; 
    default :
       break; 	
  } 


}

#21 Re: Програмування Arduino » Нужна помощь начинающему!!! 3-х режимный фонарик » 2024-03-19 22:58:47

огромное спасибо вам! я еще почитаю тогда об этом smile
=================================

просто зайшов пише:

"static unsigned char task=0; // це ми тут оголошуємо змінну ? вірно?"
нет, не верно
тут мы присваиваем начальное значение при запуске программы,
если убрать static , то переменная будет устанавливаться каждый раз при вызове функции.

#22 Re: Програмування Arduino » Нужна помощь начинающему!!! 3-х режимный фонарик » 2024-03-19 22:56:11

ой, низький вам усім уклін за вашу доброту та допомогу
до мене нарешті трохи починає доходити smile
тепер все перепробую, потренуюсь та спробую виконати ваше завдання smile
=============================================

dimich пише:

Ця конструкція:

sxstalker пише:
  if (!on) {
...
  } else if (on) {
...
  } else if (!on) {
...
  } else if (on) {
...
  } 

не має сенсу. Якщо перша умова "if (!on)" виконалась, то решта вже не виконуються. А якщо не виконалась, то обовʼязково виконається друга - "if (on)", бо вона протилежна першій. А дві останні - ніколи не виконаються.

В попередньому прикладі у вас було всього два стани: світлодіод вимкнено, і світлодіод увімкнено. Тому було достатньо змінної типу bool, у якої всього два можливих значення.

В останньому прикладі у вас чотири стани:
* вимкнено перший раз (на 2000 мс)
* увімкнено перший раз (на 200 мс)
* вимкнено другий раз (на 500 мс)
* увімкнено другий раз (на 2000 мс)

Тому для збереження стану потрібна змінна такого типу, щоб могла приймати як мінімум 4 значення. Для простоти візьмем int. Стани будем нумерувати від 0 до 3. І для ясності перейменуєм змінну з "on" на "state".

int state = 0; // поточний стан. з початку - "0";

void loop() {
  unsigned long now = millis();

  if (state == 0) { // в стані "0"?
    if (now - last_time >= 2000) {
      digitalWrite(13, HIGH);
      last_time = now;
      state = 1; // переходим в стан "1"
    }
  } else if (state == 1) { // в стані "1"?
     if (now - last_time >= 200) {
      digitalWrite(13, LOW);
      last_time = now;
      state = 2; // переходим в стан "2"
    }
  } else if (state == 2) { // в стані "2"?
    if (now - last_time >= 500) {
      digitalWrite(13, HIGH);
      last_time = now;
      state = 3; // переходим в стан "3"
    }
  } else if (state == 3) { // в стані "3" ?
     if (now - last_time >= 2000) {
        digitalWrite(13, LOW);
       last_time = now;
       state = 0; // переходим в початковий стан "0"
    }
  }
}

Абсолютно те ж саме, тільки switch/case замість if/else. Так більш читабельно:

int state = 0; // поточний стан. з початку - "0";

void loop() {
  unsigned long now = millis();

  switch (state)
  {
    case 0:
      if (now - last_time >= 2000) {
        digitalWrite(13, HIGH);
        last_time = now;
        state = 1;
      }
      break;
    case 1:
      if (now - last_time >= 200) {
        digitalWrite(13, LOW);
        last_time = now;
        state = 2;
      }
      break;
    case 2:
      if (now - last_time >= 500) {
        digitalWrite(13, HIGH);
        last_time = now;
        state = 3;
      }
      break;
    case 3:
      if (now - last_time >= 2000) {
        digitalWrite(13, LOW);
        last_time = now;
        state = 0; // переходим в початковий стан "0"
      }
      break;
  }
}

Тепер зверніть увагу на те, що дії при переході між станами практично однакові. Відрізняються тільки
тривалості: 2000, 200, 500, 2000
значення, що передається у digitalWrite: HIGH, LOW, HIGH, LOW
номер наступного стану: 1, 2, 3, 0, 1, 2 ...

Таким чином можна використати один і той же код для циклічного переходу між станами. Тривалості та значення для digitalWrite помістимо у масиви, а значення з масивів вибиратимем по номеру стану:

unsigned int dur[4] = { 2000, 200, 500, 2000 };  // масив тривалостей (duration) для кожного стану
byte led[4] = { HIGH, LOW, HIGH, LOW };          // масив значень digitalWrite для кожного стану
int state = 0; // поточний стан. з початку - "0";

void loop() {
  unsigned long now = millis();

  if (now - last_time >= dur[state]) { // якщо час поточного стану вийшов
    digitalWrite(13, led[state]);      // вмикаєм або вимикаєм світлодіод
    last_time = now;
    state = state + 1; // переходим у наступний стан
    // але максимально можливий номер стану - "3"
    // якщо це був останній - переходим у початковий стан "0"
    if (state > 3) {
      state = 0;
    }
   }
}

Тепер зверніть увагу, що в масиві led всього два варіанти значень для digitalWrite: HIGH і LOW, і вони чергуються. Можна обійтись без цього масиву. Як його позбутись - вам в якості самостійного завдання smile

#23 Re: Програмування Arduino » Нужна помощь начинающему!!! 3-х режимный фонарик » 2024-03-19 22:44:37

блін, це ж просто дійсно smile я чомусь собі вбив в голову що case можна використовувати тільки напрклад при опитуванні кнопки, і ось цей код не зрозумів поки що
static unsigned char task=0; // це ми тут оголошуємо змінну ? вірно?
switch (task)
=========================================================

просто зайшов пише:

как-то так...

unsigned long last_time;

void setup() {
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW); 

}

bool on = false; // поточний стан. з початку - вимкнено;

void loop() {
  unsigned long now = millis();
  static unsigned char task=0;
switch (task)
  {
	  case 0:   
       if (now - last_time >= 2000) { // пройшло 1000 мс ?
          digitalWrite(13, HIGH); // вмикаєм
          last_time = now;
          task=1; // переходим к следующей задаче
        }
       break; 
    case 1:   
       if (now - last_time >= 200) { // пройшло 300 мс ?
          digitalWrite(13, LOW); // вимикаєм
          last_time = now;
          task=2; 
        }
       break; 
    case 2:     
       if (now - last_time >= 500) { // пройшло 1000 мс ?
          digitalWrite(13, HIGH); // вмикаєм
          last_time = now;
          task=3;
        }
       break; 
    case 3: 
        if (now - last_time >= 2000) { // пройшло 300 мс ?
           digitalWrite(13, LOW); // вимикаєм
           last_time = now;
           task=0;
        }
       break; 
    default :
       break; 	
  } 


}

#24 Re: Програмування Arduino » Нужна помощь начинающему!!! 3-х режимный фонарик » 2024-03-19 22:34:33

як правильно написати код для такого мигання LED? можливо треба використати масив?

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