Задать вопрос
  • Почему код останавливается и не работает?

    TemaSM
    @TemaSM
    Fullstack, DevOps, InfSec
    Проблема заключается в том, что strip.show() является блокирующей функцией, которая отправляет данные на ленту и ждет, пока они будут обработаны. Таким образом, если strip.show() вызывается внутри цикла, он будет блокироваться каждый раз, когда выполняется. Это может привести к блокировке программы и невозможности обработки других событий, таких как чтение данных с ИК-приемника.

    Вы можете решить эту проблему, вызывая strip.show() только тогда, когда есть новые данные с пульта. Для этого вы можете привести код к такому виду:
    void loop(){
      if(ir.available()){     //проверка "если поступили данные на ИК транзистор"
        mode = ir.readCommand();     //присваиваем значению переменной значение с ИК транзистора
        Serial.println(mode);     //выводим в порт значение с ИК транзистора
    
        strip.setPixelColor(1, strip.Color(0, 0, 255));     //помечаем 1 пиксел синим цветом
        strip.show();     //подаем сигнал на ленту
      }
    }

    - strip.show() будет вызываться только тогда, когда поступит новый сигнал с пульта.

    Вы также можете изменить функцию irIsr() следующим образом:
    void irIsr(){
      ir.tick();
      strip.show();     //подаем сигнал на ленту
    }

    Также, можно попробовать использовать неблокирующий способ чтения данных с ИК-приемника, чтобы избежать блокировки программы при ожидании данных. Например, можно использовать библиотеку IRremote и метод irrecv.decode() для проверки наличия данных с приемника без блокировки программы.

    Если ответ помог или считаете что может быть полезен другим - не забудьте отметить его как решение вашего вопроса. Успехов!
    Ответ написан
    Комментировать
  • Как утроена файловая система ВКонтакте?

    если во ВКонтакте миллионы пользовательских аккаунтов, то, получается, что для каждого из них существует отдельная папка/файл на сервере

    Это предположение в корне неверно. Большинство веб-фреймворков сейчас позволяют настраивать механизмы обработки URL по шаблонам, и большинство страниц сайта генерируются, а не хранятся на диске готовыми.

    Почитайте как вообще сейчас устроен веб-бэкенд у большинства сайтов. По сути это всё исполняющиеся на сервере программы (а на крупных сайтах - целый комплекс программ, расположенных на многих серверах и взаимодействующих между собой), которые могут сделать кучу разных действий (сходить в базу данных, переработать полученные от пользователя входные данные, прочитать файлы на диске, сделать запросы к другим сервисам) и в конечном счёте генерируют ответ в виде HTML-страницы, или же в машиночитаемом формате, который затем обрабатывается на клиентской стороне, например в формате JSON или XML.

    Если очень-очень сильно упростить, то задача программиста, специализирующегося на backend-разработке - писать программы, которые принимают HTTP-запросы, обрабатывают их, и генерируют ответ в виде HTML/JSON/ещё чего-нибудь. Другое дело, что "обработка запроса" может быть очень сложной операцией и состоять из сотен более мелких.
    Ответ написан
    Комментировать
  • Как утроена файловая система ВКонтакте?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    Адресная строка давно не означает путь по "папкам" на сервере. Такое давно не используют, а используют роутинг.
    Адресная строка разделяется на составные части, которые могут означать что угодно. Это зависит от фантазии разработчика. Например, https://site.ru/books/1
    Здесь ты видишь основной домен site.ru, затем раздел books, а 1 - это номер книги.
    По этому пути на сайте вообще может не быть ни файла 1, ни папки books. А будет запущен код роута books, который выполнит запрос к БД и достанет данные книги с id - 1.
    Ответ написан
    Комментировать