Відповісти

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

Назад

Огляд теми (нові повідомленні вгорі)

гоcть
2023-09-16 09:19:28

А вообще, откажитесь от библиотеки FstLed и напишите свое управление лентой. Там не так уж и сложно.

гоcть
2023-09-16 09:04:55

int command = ir.readCommand();
...
void handleIRCommand(unsigned long irValue) {

Заменить на:

    uint8_t command = ir.readCommand();
...
void handleIRCommand(uint8_t irValue) {

vvr
2023-08-15 13:53:23

И переход на стм или есп

г0cть
2023-08-15 12:53:47

144 можливо навіть і замало

А тут уже можно напороться на другую проблему - нехватку памяти

г0cть
2023-08-15 11:13:11
г0cть пише:

А від цього щось залежить?

Ну з меншою кількістю код запрацював, принаймні в симуляторі.


144 можливо навіть і замало

г0cть
2023-08-14 20:11:39

А від цього щось залежить?

Ну з меншою кількістю код запрацював, принаймні в симуляторі.

Honey
2023-08-14 20:09:27

Є ідея реалізації:
Ініціалізуємо 16-бітний таймер з дільником частоти 128, це дискретність 8мкс, переповнення через півсекунди.
В PCINT від IR приймача тупо записуєм в рінгбуфер значення таймера.
Під час вигрузки бітів в стрічку, коли переривання заборонені, цю ж функцію виконує код між вигрузкою бітів.
Коли вільні, вичитуєм з рінгбуфера і декодуємо.
Нажаль, програмування цього всього буде коштувати в рази дорожче, ніж ще одна ардуіна)

г0cть
2023-08-14 19:09:17
г0cть пише:

мені потрібно виводити анімації циклічно

А количество светодиодов принципиально 144?

А від цього щось залежить?

г0cть
2023-08-14 16:27:30

мені потрібно виводити анімації циклічно

А количество светодиодов принципиально 144?

Honey
2023-08-14 14:15:18

Те, що ви хочете, (майже) неможливо реалізувати на одному AVR мікроконтролері.
IR приймач може видавати фронти з мінімальним інтервалом 562.5мкс, їх близько 30 на одне натиснення.
Стрічці потрібно передати один цілий нерозривний потік бітів, "відстань" між якими 1.25мкс, кількість бітів пропорційна довжині стрічки.
При 16MHz це відповідно 9000 і 20 тактів процесора. Якщо дуже гарно постаратися, то в цих 20 тактах можна якось обробляти дані з IR приймача, але це потрібно реалізовувати на ASM.
У вашому випадку краще взяти два мікроконтролери, один буде обробляти сигнали з IR приймача і відправляти в UART один символ на одне натиснення. Інший буде працювати по вашому алгоритму, але читатиме символи з UART, апаратний UART дозволить прийняти один символ під час запису на стрічку.

г0cть
2023-08-14 13:25:26
г0cть пише:

Вот та же проблема хоть и используется друга библиотека
https://qna.habr.com/q/1258298

Дякую, но оскільки мені потрібно виводити анімації циклічно до наступного натискання, це не допоможе мені

г0cть
2023-08-14 13:02:35

Вот та же проблема хоть и используется друга библиотека
https://qna.habr.com/q/1258298

г0cть
2023-08-14 11:34:13
г0cть пише:
Васятко пише:

можливо потрібно якось ефекти переписати?

Хто ж його знає. Ви їх не виклали. Код працює, принаймні в симуляторі з деякими правками, режими перемикаються


Ці два найбільше цікавлять.


void randomLEDs(){
  int indices[NUM_LEDS];
  int numSimultaneous = random(1, MAX_SIMULTANEOUS_LEDS + 1);
  for (int i = 0; i < NUM_LEDS; i++) {
    indices[i] = i;
  }

  // Shuffle the indices array
  for (int i = NUM_LEDS - 1; i > 0; i--) {
    int j = random(i + 1);
    int temp = indices[i];
    indices[i] = indices[j];
    indices[j] = temp;
  }

   for (int i = 0; i < NUM_LEDS; i++) {
    if (i < numSimultaneous) {
      leds[indices[i]] = CRGB::White; // Turn on LEDs
    } else {
      leds[indices[i]] = CRGB::Black; // Turn off LEDs
    }
  }
  delay(CYCLE_DELAY);

  FastLED.show();
}

void policeFlashing() {
  for (int i = 0; i < NUM_LEDS; i++) {
    if (i < NUM_LEDS / 2) {
      leds[i] = CRGB::Blue;  // First half is blue
    } else {
      leds[i] = CRGB::Black; // Second half is dark
    }
  }

  FastLED.show();

  delay(100); // Adjust flashing speed

  for (int i = 0; i < NUM_LEDS; i++) {
    if (i < NUM_LEDS / 2) {
      leds[i] = CRGB::Black; // First half becomes dark
    } else {
      leds[i] = CRGB::Red;   // Second half becomes red
    }
  }

  FastLED.show();

  delay(100); // Adjust flashing speed
}
г0cть
2023-08-14 11:28:07
Васятко пише:

можливо потрібно якось ефекти переписати?

Хто ж його знає. Ви їх не виклали. Код працює, принаймні в симуляторі з деякими правками, режими перемикаються

Васятко
2023-08-14 10:55:25
Васятко пише:

Тоді передавайте у runCurrentEffect() значення mode

Воно знову чекає першого натискання на кнопку, включає відповідний ефект і більше не зчитує сигнали з прийомника, можливо потрібно якось ефекти переписати?

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