Логирование данных и оптимизация скетчей для Arduino

Поделиться
HTML-код
  • Опубликовано: 17 ноя 2024

Комментарии • 44

  • @rapidshe1
    @rapidshe1 8 лет назад +8

    Не поленился найти видео это, что б сказать !!!СПАСИБО!!! за подсказку с объявлением строк внутри функций. 90% глобально объявленных переменных переделал в локальные. пропали глюки) а ведь видео начал смотреть исключительно изза работы в SD картой...)

  • @ИванЯрков-м8ч
    @ИванЯрков-м8ч 8 лет назад +11

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

    • @iomoio3897
      @iomoio3897  8 лет назад

      Спасибо. Ok!

    • @astronom100
      @astronom100 7 лет назад +1

      музончик реально отвлекает.. лучше вообще без музыки..

  • @frostbearer
    @frostbearer 2 года назад

    Вы в курсе, что ваше видео помогает мне делать диплом?)🔥🌟

  • @otherattack6125
    @otherattack6125 5 лет назад +1

    Ура!!! Человеческое описание скетча! Спасибо Вам за ваш труд!

  • @Vladislav55rus
    @Vladislav55rus 7 лет назад

    Лучше Ваших уроков просто не существует! Спасибо Вам огромное! С нетерпением жду новых видео) Единственная просьба - это делать музыку тише)

  • @DmPirocraft
    @DmPirocraft 8 лет назад +1

    Огромная благодарность автору за такие полезные и содержательные видеоуроки! Всё очень чётко и доступно, ничего лишнего. Собираюсь заказать на Экспрессе Ардуинку и приблуды к ней, тогда буду реализовывать описанные здесь и в других видео схемы и с благодарностью вспоминать автора. Желаю и дальше снимать ещё больше познавательного материала!

  • @danynafik
    @danynafik 8 лет назад +7

    автор красавчик смотрю все видео без перемотки, жду не дождусь когда будет подробный обзор по esp8266 и wifi-iot

    • @iomoio3897
      @iomoio3897  8 лет назад +1

      В ближайших выпусках размеренно приступим к этой теме. ;)

  • @rapidshe1
    @rapidshe1 8 лет назад +3

    Не думаю, что открою Америку, но поделюсь "лайфхаком" :)
    Здорово экономить динамическую память(правда за счет памяти устройства) помогает следующая конструкция:
    Serial.print(F("Can't open file"));
    Этот прием не везде можно использовать, но все-равно заметно облегчает жизнь
    А вообще спасибо, почерпнул новое)

  • @potatofan9490
    @potatofan9490 5 лет назад

    Супер. Спасибо, Александр. Все по существу и подробно. Успехов Вам!

  • @ВасильДрач-р4з
    @ВасильДрач-р4з 3 года назад

    Сори за РИП-пост, но меня эта фишка сильно выручила в своё время. Вот вам ещё один из способ освободить динамическую память за счёт флеш-памяти! Всякие предупреждения нужно просто писать вот так: Serial.print(F("Текст ошибки")); В таком случае, текст сообщения не висит в памяти, а хранится на флеше. Это немного замедляет скетч, но очень незначительно. Если же скорость крайне важна, а памяти уже катастрофически не хватает, то все сообщения нужно загнать в один массив типа char errors[] = {“error1”, “error2”, “error3”}; и в Serial.print уже скармливать нужное значение из массива, например Serial.print(errors[2]); Более быстрый вариант менее удобен, освобождает меньше памяти, но немного быстрее.

  • @lvitasp
    @lvitasp 6 лет назад

    Добрый день. Очень полезный урок. Возник вопрос. Нужно снимать информацию с нескольких датчиков. Какие изменения надо сделать в скетче?

  • @SergeyKardakov
    @SergeyKardakov 7 лет назад +1

    Привет! А можно ли как-то считывать этот лог дистанционно? С андроид-телефона, например?
    ...ну или по проводам, не вынимая SD-карту?

  • @based3765
    @based3765 2 года назад

    спасибо, подскажите пожалуйста что можно сделать если данные поступают каждые 20мс и нужно их сразу же записывать в файл? как записывать их не блокируя процесс?

  • @ВасильДрач-р4з
    @ВасильДрач-р4з 3 года назад

    И ещё момент, что бы график был более красивый, значение температуры нужно оставить во float, а не раундить его в int тогда будут десятые и сотые доли градуса, и график будет без "полочек". Но будет немного "дёрганым" за счёт погрешности датчика на десятых и сотых.

  • @МихаилСкворцов-в2г

    Если названию файла указать расширение "*.csv" (тут следует отметить что выводимый формат, разделители точка с запятой, соответствует формату CSV) по умолчанию excel подхватит его без заморочек.

    • @iomoio3897
      @iomoio3897  7 лет назад

      У меня не получилось так. Но спасибо!

  • @ИванМальцев-р6ш
    @ИванМальцев-р6ш Год назад

    А почему, используя в схеме RTC, минуту отсчитывать задержкой, а не считывать текущее время и каждую минуту неспеша считывать температуру и записывать ее на SD карту

  • @АлексейГулин-з7л
    @АлексейГулин-з7л 8 лет назад

    молодец, спасибо за подробный разбор строчек программы

  • @red-sun-set
    @red-sun-set 7 лет назад +1

    Доброго времени суток, Александр.
    А можете «ковырнуть» библиотеку iarduino_RTC.h для часов DS1302, DS1307, DS3231 ?
    Мне кажется что она более удобна, правда в ней нет функции получения температуры, ибо датчик находится на кристалле и отображает не температуру окружающей среды, а температуру кристалла находящегося в корпусе микросхемы DS3231.

    • @iomoio3897
      @iomoio3897  7 лет назад

      Сейчас пока в ящике все незадействованные RTC-модули валяются. Если какой-то проект будет с ними, то посмотрю эту библиотеку. Спасибо за наводку!

  • @alexandrlapin3641
    @alexandrlapin3641 7 лет назад +1

    у вас delay(59500) О какой оптимизации может идти речь?

  • @СветаЕсть
    @СветаЕсть 4 года назад

    А если я напишу в Воид Луп не FILE_WRITEN ,а захочу что-бы он мне ГОВОРИЛ прослушанную информацию?
    Мне нужно будет записать FILE_TELL или что-то другое?

  • @ЭдуардТимоха-й2ю
    @ЭдуардТимоха-й2ю 6 лет назад

    Здравствуйте , а подскажите пожалуйста. При попытке загрузить Ваш скетч, выдает ошибку:
    C:\Documents and Settings\Admin\Мои документы\Arduino\logirovanie_dannih\logirovanie_dannih.ino:5:230: fatal error: OneWire.h: No such file or directory
    compilation terminated.
    exit status 1
    Ошибка компиляции для платы Arduino/Genuino Uno.
    С чем это связано? Зарание спасибо!!!!

  • @виталиймаксимов-л6ь

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

    • @astronom100
      @astronom100 7 лет назад

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

  • @scalesair4658
    @scalesair4658 7 лет назад

    Здравствуйте. Я использую для добавления 0 "sprintf (string, "%02i day %02i:%02i:%02i ", d, h, m, s );" string объявлен так "char string[16]; ". К примеру "%02i" можно прочитать так.
    %- указываем что будет
    0-начинающееся с 0
    2-двухзначное число
    I-имеющее тип int. (просто число, можно и byte использовать и т.п.)
    Если мой метод плох, подскажите чем. Я новичок просто, пользуюсь тем что нашел в сети.

    • @iomoio3897
      @iomoio3897  7 лет назад +1

      sprintf достаточно прожорливая функция в плане потребления ресурсов микроконтроллера (объем памяти, время обработки). Но если у Вас все работает и проблем с ресурсами не возникает, то использование данной функции ничем не плохо. =)

  • @rapidshe1
    @rapidshe1 8 лет назад +1

    Не могли бы помочь оптимизировать скетч? если возможно... За основу брал ваш скетч.
    хочу сделать универсальный логер на pro mini, что бы можно было подключить его к разрабатываемому устройству (не удобно держать устройство всегда подключенное к компу).
    Сейчас кончились про мини 328, остались только про мини 168. а на даже не инициализируется карта(
    #include
    #include
    File myFile;
    String val ="";
    void setup() {
    Serial.begin(9600);
    SD.begin(10);
    }
    void loop() {
    if (Serial.available()) { //обработка Serial данных
    while (Serial.available())
    { //сохраняем строку в переменную val
    char ch = Serial.read();
    val += char(ch);
    delay(10);
    }
    File dataFile = SD.open("log.txt", FILE_WRITE); // Открываем файл для записи логов
    if (dataFile) { // Если удалось открыть файл
    dataFile.println(logString()); // Записываем строку логов в файл
    dataFile.close(); // Закрываем файл
    }
    }
    }
    String logString() { // Функция для генерации логов
    DS3231 rtc(A0, A1);
    rtc.begin();
    String dataString = String(rtc.getDateStr()) + F(" ") + String(rtc.getTimeStr()) + F("|") + F("|") + val;
    val="";
    return(dataString);
    }

    • @iomoio3897
      @iomoio3897  8 лет назад

      1Kb ОЗУ на ATmega168 слишком мало. Думаю, что вариант - поискать другую библиотеку для часов. Эта очень прожорливая.

  • @ilonapr3781
    @ilonapr3781 8 лет назад

    Здравствуйте! Скажите, пожалуйста, как называется переходник от внешней батареи (маркировка или серийный номер, по которому можно найти в интернете для заказа) для подключения ее в качестве источника питания для Arduino?

    • @iomoio3897
      @iomoio3897  8 лет назад

      Если на aliexpress, то по ссылке goo.gl/QZnSj9 - штучно и goo.gl/kl6khT - кучей.
      Если по русски, то переходник Крона (6F22) на Power jack 5,5/2,1мм (внешний контакт - минус, внутренний - плюс)

  • @astronom100
    @astronom100 7 лет назад +1

    Работа шикарная.. Но музон мешает..

    • @iomoio3897
      @iomoio3897  7 лет назад

      Спасибо! Учту в будущих обзорах.

  • @АндрейМихайлов-о6я3ц

    переменная String dataString - локальная для функции logString, её нельзя возвращать по return. то, что она чудом работает - это значит, что по чистой случайности её никто не затёр, так как она лежит в стеке, доступном для использования другими функциями после возврата из logString. не надо так.

    • @iomoio3897
      @iomoio3897  7 лет назад

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

    • @АндрейМихайлов-о6я3ц
      @АндрейМихайлов-о6я3ц 7 лет назад

      Да, видимо это я перепутал с массивом символов. Тут действительно возвращается из функции копия объекта dataString (он где-то на 10 байт длиннее строки символов, которую содержит), которая потом снова копируется при передаче в dataFile.println(). Это для меня пока что дико, я с Arduino работаю недавно. В обычной жизни никто объекты по значению в функции не передаёт и обратно не возвращает, тем более в микроконтроллерах. Но в Arduino всякое бывает... Возможно, компилятор это всё оптимизирует, и особой беды не будет. Но учитывая, что функция предназначена для вызова не один раз, а часто, я бы так не стал делать.

  • @TimeOut17
    @TimeOut17 7 лет назад

    сенсей... так где храняться объекты. это не виндус.

  • @alexandrpeshkov1726
    @alexandrpeshkov1726 6 лет назад

    А разве хорошо кажый раз открывать и закрывать файл, от этого больше шансов файл запороть. Не правильнее будет в setup() открыть файл, цикл пустить чтоб отработал нужное число раз и закрыть. И delay() как то не красиво

  • @vicusvanbacvic8618
    @vicusvanbacvic8618 2 года назад

    Я бы дослушал до конца, но музон совсем забил речь лектора! Жаль!

  • @lagunenkovpiter548
    @lagunenkovpiter548 7 лет назад +2

    Отлично! Музыку убери!