Jump to content
iT4iT.CLUB

Recommended Posts

@alexd6969 Вы проверили скомпилированную мною прошивку?

Я думаю, что ошибки по всем адресам на i2c указывают на проблемы физического характера.

  • Не качественный монтаж линии или устройств на ней
  • Слишком длинная линия
  • Наводки на лини
  • Неисправность одного из устройств на линии

Я сталкивался с таким один раз, при выходе из строя барометра BMP085, в причины выходя из строя я не углублялся т.к отсутствует какое либо специализированное оборудование вроде осциллографа, но думаю, что он начал шумел на шине.

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

Share this post


Link to post
Share on other sites

@alexd6969  

я конечно глупость напишу, но пины заданные в скетче SDA и SCL совпадают с теми, к которым реально подключены датчики? Ну и SDA SCL не перепутаны ли?

И еще кстати, у меня просто esp модуль и когда я вначале развлекался с тестовыми скетчами в среде arduino ide , а датчики висели у меня на пинах 0 и 2, а для загрузки прошивки надо 0 пин на землю коротить, так вот когда я сканер i2c портов загружал и он начинал работать. а я забывал снять перемычку нулевого пина с земли, то тоже наблюдал такой ответ по всем адресам. Потом просто перепаял датчики на другие пины и мог без удаления перемычки работать с i2c устройствами. МОжет быть это натолкнет вас на поиск ошибки. Просто я в те моменты тоже думал что у меня что-то с датчиками, пока этот момент не заметил))

 

Edited by Alex_DIY

Share this post


Link to post
Share on other sites

@Kitsum

через arduino IDE перезалил содержимое вэбсервера. логин пароль для входа в вэб интерфейс меняется сохраняет, имя точки доступа тоже. значит во флеш пишет. А вот через вэбинтерфейс по прежнему не могу удалять файлы. То есть с записью и доступом в флеш память esp проблем нет, то есть что-то с прошивкой получается.

Share this post


Link to post
Share on other sites

@Alex_DIY Давайте разбираться. Данной Вами информации недостаточно чтобы понять в какую сторону копать. Потребуется произвести ряд действий. Я использую Google Chrome и часть действий описывается именно под него. Для других браузеров нужно действовать аналогично.

Необходимо открыть Наcтройки управления -> Дополнительные инструменты -> Инструменты разработчика (Ctrl + Shift + I) и произвести удаление какого-либо файла.

Ashampoo_Snap_2017.06.17_16h29m50s_005_espws2-local - Google Chrome.png

Проверить состояние удаления (ответ микроконтроллера)

Ashampoo_Snap_2017.06.17_16h30m32s_007_espws2-local - Google Chrome.png

Также в Serial мониторе можно увидеть запрос на удаление.

Из-за особенностей работы контроллера с памятью стоит проверить следующее

  • Возможность загрузки файлов через Web интерфейс (можно даже не нужные для работы)
  • Обновить прошивку через Web интерфейс

 

 

 

Share this post


Link to post
Share on other sites

Привет! Пришли наконец-то нужные "железки"... NodeMcu, BH1750, BME280, OLED SSD1306.  В Вашей программе закомментировал SI, BMP заменил на BME чуть подправил и всё заработало идеально... Приколхозил монитор и погодную станцию https://www.instructables.com/id/ESP8266-Weather-Widget/, неделю непрерывно работает - полёт нормальный!

Только вот напряжение явно заниженное показывает, по прибору 3,24 а в веб интерфейсе 2,86... 

Вот что у меня вышло https://yadi.sk/d/7iU8r_xg3KEJD7

Вот оригинал погодной станции от squix https://github.com/squix78/esp8266-weather-station/tree/master/examples/WeatherStationDemoExtendedDST

Edited by EndWar
  • Like 1

Share this post


Link to post
Share on other sites
23 часа назад, Alex_DIY сказал:

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

подключи комп к сети через вай-фай, а не проводом...

Share this post


Link to post
Share on other sites

@EndWar Рад, что у Вас все получилось и заработало без каких-либо проблем.

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

Share this post


Link to post
Share on other sites

да просто внёс в программу небольшую корректировку +0,09 v и всё... 

Спасибо за Вашу работу!

  • Like 1

Share this post


Link to post
Share on other sites

@Kitsum Что-то я перемудрил... Десятые доли температуры пропали... (( Может посмотрите мой скеч, по ссылке выше.?!

2017-06-21_21-15-31 (2).png

Share this post


Link to post
Share on other sites

@EndWar в файле index.htm необходимо поправить конфигурацию сенсоров. Ищите параметр

data-step=".1"

он отвечает за отображение десятых долей и т.д Измените его на ".01"

Share this post


Link to post
Share on other sites

@EndWar проверьте, что по факту передается при запросе показаний с датчиков. Откройте в браузере "Инструменты разработчика", вкладка Network и выберите запрос /api/sensors В его описании будет разбор json строки с показаниями.

Скорее всего, в Вашем варианте метеостанции проблема кроется в типе передаваемых данных с датчика BME280. Это float, а в описании структуры для хранения этих самых показаний используется integer, т.к оригинальный вариант программы рассчитан на работу с датчиком BMP085 который передает данные только в целочисленном виде.

/*
   структура и переменные для хранения показаний датчиков
*/
struct sensor {
  int   data = 0;
  bool  status = false;
};

Измените int на float в описании структуры и проверьте результат.

  • Like 1

Share this post


Link to post
Share on other sites

Здравствуйте!

Пытаюсь повторить но никак не могу залить скетч.((((

ошибка.JPG

Edited by Securbond

Share this post


Link to post
Share on other sites

@Securbond приветствую. Ваша проблема кроется в среде разработки. Ознакомьтесь со следующим комментарием

Выполните все указанные там пункты и все должно заработать.

Share this post


Link to post
Share on other sites
Только что, Kitsum сказал:

@Securbond приветствую. Ваша проблема кроется в среде разработки. Ознакомьтесь со следующим комментарием

Выполните все указанные там пункты и все должно заработать.

Спасибо за быстрый ответ, после установки свежей версии ядра ESP всё прошилось, но теперь не хотят заливаться файлы во flash((( 

Share this post


Link to post
Share on other sites

@Securbond Не хотят заливаться через Arduino IDE? Какой объем Flash памяти у Вашего микроконтроллера?

Перепроверьте все пункты в настройке среды для загрузки файлов через неё. В оставленном ранее комментарии имеется ссылка на инструкцию. Кстати, если открыт Serial монитор, то загрузка файлов не будет работать.

Share this post


Link to post
Share on other sites

вроде бы всё проверил уже. Плата такая же как на картинке - NodeMCU. И да.. ссылка на то как заливать файлы во Flash? битая ...

2.JPG

Share this post


Link to post
Share on other sites

ВсЁ ОК! В другой версии IDE прошивается.

СПАСИБО !

А прошивка только датчики I2C поддерживает? 

DHT или ds18b20 к ней не прикручены ?

Edited by Securbond

Share this post


Link to post
Share on other sites

@Securbond Вы можете использовать любые датчики, вообще абсолютно любую периферию. Данная прошивка просто дает, возможно не лучший, но удобный, на мой взгляд, способ работать с контроллером и получить двустороннюю связь. Все исходники опубликованы в открытом доступе, и Вы можете вносить любые изменения чтобы получить требуемый для вас функционал. По умолчанию реализована работа с тремя, одними из самых распространенных, датчиков. На их принципе Вы можете добавить свою периферию. Если Вам потребуется какая-либо помощь или подсказка в каком направлении двигаться, я постараюсь Вам помочь в приделах своих собственных знаний.

Share this post


Link to post
Share on other sites

Проведена титаническая работа! Страшновато даже браться за копирование этого проекта.

Хотелось бы узнать ваше мнение по следующей проблеме:

Собрал метеостанцию  (ESP8266, BME280), которая  отсылает информацию о температуре, влажности, давлении на е-мейл с помощью php-скрипта.  Ниже приведена  команда из скетча, которая выполняет эту работу - 

 http.begin("http://skorovoda.in.ua/php/un37.php?mymail="+String(adresse)+"&t="+String(t) +"&h="+String(h) +"&pHg="+String(p));

Хотелось бы переменную adresse (адрес е-мейла)  не задавать в скетче, а считывать с окна предварительных настроек, как например, имя Wi-Fi сети, пароль -  у вас для аварийных (начальных) настроек.  Вам встречались библиотеки, где переменная задается на веб-странице и в дальнейшем используется в  скетче?

Share this post


Link to post
Share on other sites

@Cadil доброе время суток. Скорее всего, готовые библиотеки есть, лично я сталкивался с различными реализациями, но в виде модулей или набросков кода. Идеи у всех одинаковые и реализации в принципе тоже:

  1. Хранить информацию (в нашем случае настройки) в удобном виде во Flash памяти, обычно один файл с удобной разметкой (json и т.п)
  2. Ограничить доступ к этому файлу

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

 

  • Like 1

Share this post


Link to post
Share on other sites

Хочу оставить небольшую заметку по поводу гигрометра.

По умолчанию использовался датчик SI7021, сам по себе датчик очень хороший, но мой имел физический дефект в виде деформированной полимерной пленки поверх датчика. Деформация была получена в ходе моей неосторожности. Сама пленка представляет собой белую "ткань" и легко может быть удалена с сенсора, но если это сделать, то показания влажности, естественно, будут искажены. Опытным путем было выявлено, что без пленки показания будут завышены примерно на 20%. Но самое печальное, что при высокой влажности гигрометр переставал отдавать адекватные данные, и доверять можно было только его показаниям температуры. Пытаться восстановить пленку я считаю бессмысленным, проще заказать новый датчик. Тем более, что производитель предупреждает о том, что пленка должна быть в чистоте, не говоря уже о том, что она должна быть без повреждений. Имейте это в виду, если столкнетесь с похожей проблемой.

На данный момент решено было произвести замену на новый HDC1080, он имеет схожие характеристики, но нижний придел температуры, при которой рекомендовано эксплуатировать гигрометр, составляет всего -20 градусов Цельсия. А вот встроенный датчик температуры способен адекватно работать в пределах от -40 до 125 градусов Цельсия. Посмотрим, как он себя покажет, а осенью задумаемся о замене всего парка датчиков.

HDC1080_1.JPGHDC1080_2.JPG

Очень хорошо, что предусмотрел возможность отсоединять будку от базового блока, не пришлось разбирать всю конструкцию и свешиваться с ключами из окна. Также отмечу, что белый PLA-пластик за полгода эксплуатации в уличных условиях начал желтеть, но на "ходовых" характеристиках это не отразилось. Будка по-прежнему довольно крепкая и справляется со своей задачей - защита датчиков.

HDC1080_INSTALL.JPG

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

Избавляемся от старой библиотеки

/*
   датчик температуры
   https://github.com/LowPowerLab/SI7021
*/
#include <SI7021.h>
SI7021 SI7021;

и добавляем новую

/*
   датчик влажности и температуры
   https://github.com/closedcube/ClosedCube_HDC1080_Arduino
*/
#include "ClosedCube_HDC1080.h"
ClosedCube_HDC1080 HDC1080;

Поправим структуру, использующуюся для хранения статуса датчика и его показаний. Для хранения данных будем использовать тип Float

/*
   структура и переменные для хранения показаний датчиков
*/
struct sensor {
  float data = 0;
  bool  status = false;
};

В функции Setup находим, где происходит инициализация старого датчика SI7021

Wire.beginTransmission(64);
if (Wire.endTransmission() == 0) {
  temperature.status = humidity.status = SI7021.begin(pin_sda, pin_scl);
}

и меняем на инициализацию нового датчика HDC1080.

Wire.beginTransmission(64);
if (Wire.endTransmission() == 0) {
  HDC1080.begin(0x40);
  temperature.status = humidity.status = true;
}

Находим в функции readSensors две строки, отвечающие за получение показаний температуры и влажности с датчика SI7021

if (temperature.status) temperature.data = SI7021.getCelsiusHundredths();
if (humidity.status) humidity.data = SI7021.getHumidityPercent();

и меняем их на запросы тех же самых показаний, но с датчика HDC1080

if (temperature.status) temperature.data = HDC1080.readTemperature();
if (humidity.status) humidity.data = HDC1080.readHumidity();

Теперь остается дело за малым. Необходимо избавиться от всех преобразований, которые делались перед передачей показаний. Начнем с API, это функция web_api_sensors. Необходимо найти в ней формирование json объекта

sensor["light"] = light.data;
sensor["temperature"] = temperature.data * 0.01;
sensor["humidity"] = humidity.data;
sensor["pressure"] = pressure.data / 133.3;

и привести к следующему виду т.к для хранения данных мы теперь используем тип Float

sensor["light"] = light.data;
sensor["temperature"] = temperature.data;
sensor["humidity"] = humidity.data;
sensor["pressure"] = pressure.data;

Ну и финальная часть. Необходимо убрать те же самые корректировки, но используемые в функции loop при построении запроса к ресурсу "Народный мониторинг".

query += "&L1=" + String(light.data);
query += "&T1=" + String(temperature.data * 0.01);
query += "&H1=" + String(humidity.data);
query += "&P1=" + String(pressure.data / 133.3);

меняем на

query += "&L1=" + String(light.data);
query += "&T1=" + String(temperature.data);
query += "&H1=" + String(humidity.data);
query += "&P1=" + String(pressure.data);

На этом все преобразования закончены. Компилируем и заливаем прошивку в микроконтроллер. Аналогичным образом заменяются любые датчики или добавляются новые.
Обращу только внимание на инициализацию датчиков. Она происходит по принципу - если на используемом адресе шины i2c что-то есть, то условно, датчик считается обнаруженным, происходит вызов соответствующей функции инициализации датчика и изменение его статуса на true. Чтобы определить фактическое наличие датчика, используется функция, которой в качестве параметра address необходимо передать адрес используемый устройством, но в десятичной системе счисления (DEC). Таким образом, гигрометр с адресом в шестнадцатеричной (HEX) системе счисления 0x40, в десятичной (DEC), будет иметь адрес 64.

Wire.beginTransmission(address)

 

  • Like 1

Share this post


Link to post
Share on other sites

@Kitsum

После вашей подсказки с тем как проанализировать проблему с незагрзкой файлов через вэб интерфес проблема ушла. правда я перед этим перепрошил его таки.

 

Зато обнаружил другие проблемы

1) через вэб интерфейс с помощью IE 11 не удается обновить прошивку - на опознает бинарник за файл прошивки.

2) Через Хром распознает, только вот видимо прошивается не корректно.

после успешной заливки прошивки и рестарта микроконтроллера, в ком порт сыпется бесконечное

Fatal exception (0): 
epc1=0x4022c420, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000

Если же прошиться этой же прошивкой через arduino ide, то все работает. Я так подумал, что, видимо, это связано с тем, что обновление через вэб сбивает разметку флеша, так как у меня модуль 1Мбит, поделен пополам 512кб прошивка, 512кб под спифф.

uint32_t maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000;

я так понимаю, в моем случае я пробовал 0x3FFFFC00, но это не поменяло ситуацию. Это четверь вашего значения, а также 0x1FFFFE00 это 1/8 вашего значения, но безуспешно. 

 

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

  • Similar Content

    • By Kitsum
      Хотите помочь проекту или спонсировать новый?
      Yandex.Money PayPal.me Тема проекта
      Arduino IDE + Project + Libraries + tools: https://yadi.sk/d/jseefFB50NMhAg
    • By Kitsum
      Просмотреть файл [esp8266] Библиотека CMD, реализует настройку микроконтроллера и управление вашей программой через терминал.
      Основная задача библиотеки, это прием пользовательских команд через UART интерфейс, их обработка и выполнение пользовательского кода, связанного с той или иной командой.
      Данная библиотека позволяет реализовать:
      Управление микроконтроллером Любую настройку, будь то WiFi, другие библиотеки или часть Вашей программы Вызывать Ваши задачи (функции) из терминала по команде и передавать им требуемые параметры Использовать контроллер в качестве шлюза между датчиками и программами на PC Внимание: любая команда, передаваемая в терминал обязана заканчиваться символом перевода строки "\n".
      Подключение библиотеки
      #include <cmd.h> Инициализация объекта, к которому мы будем обращаться для добавления команд. В качестве параметра объекту необходимо передать указатель на объект Serial или любой другой схожий по типу интерфейс.
      cmd command(&Serial); В функции Setup описываем какие команды требуется обрабатывать. Например, по команде "test" вызывать пользовательскую функцию с именем "myFunctionName". Имя пользовательской функции может быть абсолютно любым.
      void Setup() { Serial.begin(115200); command.add("test", myFunctionName); } Пользовательская функция будет вызываться каждый раз, когда по интерфейсу Serial поступит команда "test". Если команда будет передана с параметрами, то эти параметры будут переданы в качестве аргументов пользовательской функции.
      В функции loop должна находится команда вызова обработчика.
      void loop() { command.handleEvents(); } Пользовательская функция обязана соответствовать ряду требований:
      Не возвращать никакого результата (быть объявленной с типом void) Принимать в качестве первого аргумента переменную с типом byte в которой будет храниться число равное количеству переданных параметров Принимать в качестве второго параметра переменную с типом char** в которой будет храниться указатель на массив со всеми указателями (char*) на переданные параметры void myFunctionName(byte argc, char** argv) { /* ... */ } Функция всегда должна иметь такой вид, даже если не подразумевается, что ей будут передаваться какие-либо параметры.
      Чтобы перебрать все переданные параметры и вывести их в консоль, можно воспользоваться следующим примером
      void myFunctionName(byte argc, char** argv) { if (0 < argc) { for (uint8_t i = 0; i < argc; i++) { Serial.printf("%i. %s\n", i, argv[i]); } } } Пример вызова пользовательской функции без параметров и с ними
      # test No parameter was passed # test p1 p2 p3 p4 p5 0. p1 1. p2 2. p3 3. p4 4. p5 Помните, что параметры представлены в виде указателей и работать с ними нужно как с обычными переменными не получится т.к указатель содержит не значение переменной (переданный параметр), а указатель на ту область памяти микроконтроллера в которой это значение находится.
      Чтобы сравнить два значения, например, параметр под индексом 0 (идет первым в списке) с каким-либо значением в программе, воспользуйтесь функцией strcmp, которая возвращает целочисленное значение, указывающее на лексическое расхождение строк. Если строки равны, то возвращаемое значение равно 0.
      if (!strcmp(argv[0], "wifi")) { Serial.println(F("Первый аргумент WiFi")); } else { Serial.println(F("Первый аргумент НЕ WiFi!!!")); } Для копирования значения указателя в другую переменную с типом char можно воспользоваться функцией strcpy
      char myVar[20]; strcpy(myVar, argv[0]); if (myVar == "123456") { Serial.prinln(F("ok")); } Также можно обернуть указатель объектом String и получить весь функционал этого объекта, который будет содержать значение параметра
      String param1(argv[0]); // String param1 = argv[0]; Serial.printf("argv[0] length: %i\n", param1.length()); Serial.printf("argv[0] is integer?: %s\n", param1.toInt() ? "YES" : "NO"); if (param1 == "qwerty") { Serial.println(F("Hello QWERTY!")); } С библиотекой идут несколько примеров, в том числе и пример конфигурации WiFi в режиме STA.
      Автор Kitsum Добавлен 05.12.2018 Категория Библиотеки  
    • By Kitsum
      Просмотреть файл [esp8266] Библиотека smartBlink, реализует умное управление штатным светодиодом, что позволяет добавить индикацию состояния вашей программы или микроконтроллера.
      Основная задача библиотеки, это добавление индикации состояния Вашей программы или микроконтроллера. Отображение состояния производится посредством светодиода. Что самое важное, работа библиотеки через прерывание, это позволяет ей поддерживать индикацию даже в то время, когда выполняется длительный код основной программы. Например, Вы можете использовать её для отображения в каком режиме сейчас работает WiFi микроконтроллера, STA или AP и т.д. Или ход выполнения какой-либо операции, например, передача данных на внешний сервер.
      Подключение библиотеки
      #include <smartBlink.h> Чтобы инициализировать управление светодиодом необходимо создать объект, через который мы буем задавать режимы работы индикации.
      smartBlink::smartBlink(byte gpio, bool on = LOW); Объекту необходимо передать два параметра, первый это номер порта, на котором находится светодиод, а второй это уровень логического сигнала, который заставит светодиод работать. Сигнал может быть низким (LOW) или высоким (HIGH), это зависит от схемотехники подключения светодиода.
      Например, штатный светодиод модуля ESP12, использующий GPIO2 (порт 2) можно объявить следующим образом.
      #define led2_pin 2 #define led2_on_signal LOW smartBlink led2(led2_pin, led2_on_signal); Теперь можно в основной программе использовать метод устанавливающий какой режим индикации использовать.
      smartBlink::setMode(mode_t mode); Например, зададим режим светодиода led2 в котором светодиод будет давать одну короткую вспышку раз в секунду.
      led2.setMode(smartBlink::mode_flash1); Режимов работы может быть несколько.
      led2.setMode(smartBlink::mode_off); led2.setMode(smartBlink::mode_flash1); led2.setMode(smartBlink::mode_flash2); led2.setMode(smartBlink::mode_flash3); led2.setMode(smartBlink::mode_flash4); led2.setMode(smartBlink::mode_burn); led2.setMode(smartBlink::mode_inhalf); Чтобы вернуть предыдущий режим индикации для ранее объявленного светодиода led2 используйте следующий метод
      led2.previous(); Благодаря работе библиотеки через прерывания по таймеру, индикация будет работать даже в тех случаях, когда выполняется долгий код.
      С библиотекой идут несколько примеров.
      Автор Kitsum Добавлен 10.12.2018 Категория Библиотеки  
    • By Kitsum
      Основная задача библиотеки, это добавление индикации состояния Вашей программы или микроконтроллера. Отображение состояния производится посредством светодиода. Что самое важное, работа библиотеки через прерывание, это позволяет ей поддерживать индикацию даже в то время, когда выполняется длительный код основной программы. Например, Вы можете использовать её для отображения в каком режиме сейчас работает WiFi микроконтроллера, STA или AP и т.д. Или ход выполнения какой-либо операции, например, передача данных на внешний сервер.
      Подключение библиотеки
      #include <smartBlink.h> Чтобы инициализировать управление светодиодом необходимо создать объект, через который мы буем задавать режимы работы индикации.
      smartBlink::smartBlink(byte gpio, bool on = LOW); Объекту необходимо передать два параметра, первый это номер порта, на котором находится светодиод, а второй это уровень логического сигнала, который заставит светодиод работать. Сигнал может быть низким (LOW) или высоким (HIGH), это зависит от схемотехники подключения светодиода.
      Например, штатный светодиод модуля ESP12, использующий GPIO2 (порт 2) можно объявить следующим образом.
      #define led2_pin 2 #define led2_on_signal LOW smartBlink led2(led2_pin, led2_on_signal); Теперь можно в основной программе использовать метод устанавливающий какой режим индикации использовать.
      smartBlink::setMode(mode_t mode); Например, зададим режим светодиода led2 в котором светодиод будет давать одну короткую вспышку раз в секунду.
      led2.setMode(smartBlink::mode_flash1); Режимов работы может быть несколько.
      led2.setMode(smartBlink::mode_off); led2.setMode(smartBlink::mode_flash1); led2.setMode(smartBlink::mode_flash2); led2.setMode(smartBlink::mode_flash3); led2.setMode(smartBlink::mode_flash4); led2.setMode(smartBlink::mode_burn); led2.setMode(smartBlink::mode_inhalf); Чтобы вернуть предыдущий режим индикации для ранее объявленного светодиода led2 используйте следующий метод
      led2.previous(); Благодаря работе библиотеки через прерывания по таймеру, индикация будет работать даже в тех случаях, когда выполняется долгий код.
      С библиотекой идут несколько примеров.
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...