Уроки Ардуино. Работа с текстом, String и char[]

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

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

  • @0lympy
    @0lympy 3 года назад +67

    5:00 str[11] = NULL это неправильно, должно быть = '\0' тогда уж, потому что NULL это константа нулевого указателя (неинициализированного) типа адрес в памяти, а str[11] типа char. Получается лишнее преобразование типов, и в теории на некоторых системах может работать некорректно (если смотреть как на язык С в целом). То есть это все равно что написать str[11] = false, к 0 преобразуется, работать будет, но это лишнее неявное преобразование типов и логически некрасивый код.

    • @ArduNotes
      @ArduNotes  3 года назад +10

      однако да!

    • @dima12011201
      @dima12011201 3 года назад +5

      Вроде все норм. Тк char это 1байт. Null - 32 битный указатель (константа) преобразование 32 -> 8 работает норм и это статически при компиляции. Плохо если нулл используем на 64 бита. Там нужен nullptr

    • @lykabraine2766
      @lykabraine2766 3 года назад

      @@dima12011201 +

    • @lykabraine2766
      @lykabraine2766 3 года назад

      @@dima12011201 +

    • @lykabraine2766
      @lykabraine2766 3 года назад +5

      Вопрос почему я смотрю то шо знаю давно

  • @dms1304
    @dms1304 3 года назад +32

    Спасиьо за труды. Пожалуй, вы лучшее сообщество по этой тематике

    • @inqurity
      @inqurity 3 года назад

      *Лучшее в России, так-то уроков по С++ и Ардуино миллион

    • @MAD_ALEX
      @MAD_ALEX 3 года назад

      @@inqurity неужели в Казахстане есть лучше уроки?)

    • @inqurity
      @inqurity 3 года назад

      @@MAD_ALEX Упс, я имел ввиду на Русском

    • @maksimma_ko6321
      @maksimma_ko6321 3 года назад +2

      Подтверждаю круть да и только из за этого засранца я купил себе ардуинку

    • @АлександрФ-ъ5ь
      @АлександрФ-ъ5ь 3 года назад

      @@maksimma_ko6321 транжира Вы, однако)))

  • @Aptekar_
    @Aptekar_ 3 года назад +44

    Как программист -нетрадиционной- объектной ориентации, пожалуй всё же буду использовать стринги)

  • @StoneTL
    @StoneTL 3 года назад +5

    Как раз этого мне и не хватало в одном проекте месяца 2 назад! Но зато теперь всё понятно и под рукой) Спасибо

  • @iqubik
    @iqubik 3 года назад +2

    Я как раз в конце ждал что-то такое как сделал Алекс. Ведь оно прям напрашивалось! Спасибо

  • @siddha13
    @siddha13 3 года назад +2

    Алекс, огромная благодарность тебе за твои труды! Благодаря твоим урокам хочется изучать более низкоуровневые вещи

    • @XpIOHdeJIb3000
      @XpIOHdeJIb3000 3 года назад

      а нафига ардуинщикам знать низкоуровневые вещи?

    • @АлексейПеченов-ч9и
      @АлексейПеченов-ч9и 2 года назад

      @@XpIOHdeJIb3000 Чтобы с ардуино пересесть на более продвинутые МК и т.д. Ардуино ведь начальный уровень

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

      @@АлексейПеченов-ч9и а по-моему ардуино - это путь куда-то "налево"

    • @АлексейПеченов-ч9и
      @АлексейПеченов-ч9и 2 года назад

      @@XpIOHdeJIb3000 Ардуино - это просто плата с микроконтроллером, и главное в ней именно микроконтроллер. Так что вы можете программировать эту плату хоть на ассемблере, как взрослые дяди это делают, и, также как другие МК программируют, но новичкам это сложно, особенно если они не разбираются в программировании и в архитектурных особенностях того или иного МК.

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

      @@АлексейПеченов-ч9и ардуино как раз таки и приучает не разбираться, а пользовать кривоногими библиотеками.

  • @AlejandroFedorov
    @AlejandroFedorov 3 года назад +2

    Полезненько. Убавит времени копания в доках. Сенкью

  • @cvitaly2033
    @cvitaly2033 3 года назад +4

    Отлично. Надо пересмотреть свои скетчи

  • @Slavasil
    @Slavasil 3 года назад +9

    Зашел не по колокольчику, а по расписанию!)

  • @Disorrder
    @Disorrder 3 года назад +3

    0:30 даа, именно поэтому в ledOS (или как там называется твоя библиотека для светодиодных лент) используется именно String, для обычного вывода строк на экран. Стоит убрать захардкоженные 2 строки и сразу памяти хватит на лишние 30-40 лампочек D:

  • @azikamel5624
    @azikamel5624 Год назад

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

  • @AlexLink-rb5by
    @AlexLink-rb5by 3 года назад +1

    Прикольно.. только всё это проходил на занятиях и сдал экзамены по с++))) спасибо!!! Лайк!!!

  • @konstantingolinskiy4944
    @konstantingolinskiy4944 3 года назад +4

    Чтобы помещать в строки разные значения float int и .т.д а также из строки извлекать их можно воспользоваться функцией sprintf() sscanf()

    • @ArduNotes
      @ArduNotes  3 года назад +5

      одна эта функция тяжелее чем весь String, а выполняется лучше даже не знать сколько))

    • @ИванКрасноярский-е3я
      @ИванКрасноярский-е3я 4 месяца назад

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

  • @Romulus1988
    @Romulus1988 3 года назад +86

    Гайвер наконец-то объяснил, что лучше жить без стрингов

    • @mmiro
      @mmiro 3 года назад +2

      На самом деле нет

    • @Al.Sy.
      @Al.Sy. 3 года назад +2

      "За всё приходится платить." Старий амэрыканский поговорька.

    • @ГеннадийГром-в8ю
      @ГеннадийГром-в8ю 3 года назад +1

      Да, зачот! Ходите в семейниках! 👍😁🤪

    • @ГеннадийГром-в8ю
      @ГеннадийГром-в8ю 3 года назад

      @@Al.Sy. Пронька рулит! 👍😁🤪

    • @Al.Sy.
      @Al.Sy. 3 года назад +2

      @@ГеннадийГром-в8ю В США наши туристы как-то вводили моду на семейные трусы на пляже. И американцы купились, подумав, что это новомодная фишка. :)

  • @МихаилБезруков-е5щ
    @МихаилБезруков-е5щ 3 года назад +2

    Привет! Полезная информация! Приятно слушать!
    А если по факту - всю голову мне сломал)))

  • @alexanderilyin2136
    @alexanderilyin2136 3 года назад +6

    Сделай следующий урок как лекция про указатели и память от А до Я, очень полезно

  • @Codeman47Rus
    @Codeman47Rus 3 года назад +1

    Спасибо. Еще не досмотрел, но уже очень круто и понятно. Может так и до ассемблера дойдем)))

  • @masterkit9517
    @masterkit9517 3 года назад +4

    Побольше бы таких уроков

  • @hutoryanin
    @hutoryanin 3 года назад

    Кайфы) Теперь мне яснее стало как работать с указателями.
    *Л. а. й. к.*

  • @txchumberrxnumber6604
    @txchumberrxnumber6604 Год назад

    Pointer points to variable -- указатель указывает на переменную. Value inside variable --значение внутри переменной.

  • @АлексейБаранов-я9э
    @АлексейБаранов-я9э 3 года назад +1

    Спасибо Алекс Гайвер полезный урок был.

  • @one_love_forever
    @one_love_forever 3 года назад +1

    Ура😬🍻
    Новое, интересное видео🎥
    Спасибо Алексу 👍
    Ждем продолжения 🤓

  • @Nachmed
    @Nachmed 3 года назад +1

    Спасибо за урок и Mstring!

  • @Syjalo
    @Syjalo 3 года назад +30

    Я уже совсем запутался о каких стрингах идет речь

  • @antonzavidov7328
    @antonzavidov7328 3 года назад +2

    Огромное спасибо тебе за этот материал!

  • @eng283
    @eng283 3 года назад +1

    char Str[] = "Температура = Z00.0 C";
    uint8_t Znak, Tcel, Tdrob; // 1, 28, 3
    Str[14] = "-+"[Znak]; // 0 = "-" 1 = "+"
    Str[15] = "0123456789"[Tcel/10];
    Str[16] = "0123456789"[Tcel%10];
    Str[18] = "0123456789"[Tdrob];
    Результат получается строка "Температура = +28.3 C"
    Всегда так строки выводил. Работает очень быстро, памяти надо только на саму строку.

    • @ArduNotes
      @ArduNotes  3 года назад +1

      а также на три строки по 10 байт =)

    • @eng283
      @eng283 3 года назад

      @@ArduNotes Если таких строк много, то ее можно вынести константой 10 байт. Кста 16 байт стокой можно 16тиричные числа выводить)

    • @ArduNotes
      @ArduNotes  3 года назад

      слышал про индусский код? Вот тут можно почитать lurkmore.to/%D0%98%D0%BD%D0%B4%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D0%BE%D0%B4
      По сабжу - единичная цифра переводится в символ прибавлением кода символа 0, то есть например символ цифры 5 можно получить как 5 + '0'. А не вот этот трэш что выше))))

    • @eng283
      @eng283 3 года назад

      @@ArduNotes Спасибо. Как я раньше не догадался, знал же что символ заканчивается /0
      Str[15] = Tcel/10+'/0';
      Str[16] = Tcel%10+'/0';
      Str[18] = Tdrob+'/0';
      Вот так все работает)

  • @ВасилийДонильченко
    @ВасилийДонильченко 3 года назад +2

    Видеоурок улеттт!

  • @АнатолийСергеев-д2б
    @АнатолийСергеев-д2б 3 года назад +1

    Благодарю за уроки!!!

  • @Gameplayer55055
    @Gameplayer55055 3 года назад +49

    Указатель, это когда по очереди пробуешь text *text &text, пока линтер не перестанет ругаться

  • @antonmoshkovich492
    @antonmoshkovich492 3 года назад +2

    Спасибо! Очень полезно!

  • @against_all
    @against_all 3 месяца назад

    Шикарно, шикарно.

  • @АндрейМалов-с4м
    @АндрейМалов-с4м 3 года назад +1

    Шикарный урок!

  • @inqurity
    @inqurity 3 года назад +2

    Отличный урок!

  • @maxim190840
    @maxim190840 3 года назад

    Алекс, ты супер молодец!

  • @werdy64
    @werdy64 3 года назад

    Заставка с труселями просто огонь.

  • @hottabychable
    @hottabychable 3 года назад +1

    Давайте еще опишем многомерные массивы, будем использовать указатель на указатель, потом использовать операцию разыменовывание, потом создадим на основе этого структуру и будем думать использовать стрелку или точку))))

    • @ArduNotes
      @ArduNotes  3 года назад

      указатель на указатель - да, типичная схема хранения и использования строк =) в том числе в программной памяти

  • @v61kz
    @v61kz 3 года назад +5

    Большая разница в скорости💪
    Но - не так просто и не так удобно как стринги🙃

  • @КлайвСинклер-е6ю
    @КлайвСинклер-е6ю 3 года назад

    С ходу лайк. Все думал заняться разбором работы со строками, да как обычно то работа, то домашнее хозяйство ... а тут как раз Гайвер.... Полезно иногда захаживать на "тюбик"

  • @KelevraSelevin
    @KelevraSelevin 3 года назад

    Здоровья тебе большого и крепкого )

  • @alexlinuxoid3507
    @alexlinuxoid3507 3 года назад +2

    3:40 есть проблема в формулировке, для обычного массива чаров валидно, но при прибавлении чаисла к указателю он сместится не на этл число байтов, а на sizeof(тип_на_который_ссылаемся) * число

    • @ArduNotes
      @ArduNotes  3 года назад +1

      да, через байт прыгает, массив указан специально byte =)

  • @jamesblack7412
    @jamesblack7412 3 года назад +1

    Офигеть, только вчера решил поковырять микроконтроллер, где пытался вспомнить указатели си)

  • @некит1
    @некит1 Год назад

    1 задача: решение через sprintf
    2 задача: atoi
    3 задача: sscanf

  • @azatfr
    @azatfr 3 года назад +2

    Расскажите пожалуйста про оверсемплинг и способы программного увеличения точности встроенного АЦП.

    • @ArduNotes
      @ArduNotes  3 года назад +1

      урок по фильтрам есть на канале

    • @azatfr
      @azatfr 3 года назад

      @@ArduNotes тема дизеринга не раскрыта еще.

  • @сергейбаглаев-ф3х
    @сергейбаглаев-ф3х 3 года назад +1

    В задаче 3 cstr и comma при копировании в строку это количество символов до и после запятой?

  • @andrewgromow1112
    @andrewgromow1112 3 года назад +1

    Хорошая темка! ))

  • @dmitryefimkin6550
    @dmitryefimkin6550 Год назад +1

    Круто. А как быть с данными падающими с UART?

  • @wad600
    @wad600 3 года назад +1

    Вау, шик блеск красота

  • @joinmods556
    @joinmods556 3 года назад +1

    Гайвер у меня есть для тебя интересная задача.
    Вот допустим у тебя есть дачик и ты его читаешь в виде float (а точность тебе важна) и надо через шины данных i2c, spi или через nRF передать другому устройству без потери точности, но там только передается unsigned byte или его массив. Как можно это релизовать? (да та еще извращения, но интересно увидеть задумки)

    • @alexkart9239
      @alexkart9239 3 года назад +2

      Это не "интересная задача", это типичная проверка на знание фундаментальных основ программирования. Такие "задачки" нередко используют, чтобы отсеять гo%нокoдеров на собеседованиях. В 32х-разрядной системе, массив из 4х штук uchar эквивалентен одному float. Можно легко распилить float на байты, при помощи битового сдвига:
      float sens_data=2.345678;
      unsigned char trans_data[4];
      trans_data[0]=*((unsigned int *)&sens_data);
      trans_data[1]=*((unsigned int *)&sens_data)>>8;
      trans_data[2]=*((unsigned int *)&sens_data)>>16;
      trans_data[3]=*((unsigned int *)&sens_data)>>24;
      ..затем передать, и точно также потом скукожить обратно на стороне получателя.

    • @rematender4269
      @rematender4269 3 года назад

      @@alexkart9239 Спасибо за разбор!

  • @topalek
    @topalek 3 года назад +1

    крутяк, спасибо

  • @energy_of_nature
    @energy_of_nature Год назад

    Хорошее видео!
    Но подскажите почему mString и описание и реализация в одном заголовочном файле?
    Пробовал свои создавать в cpp не работают, а в заголовочном реализация работает.
    Благодарю!
    👍

  • @TheDCSamara
    @TheDCSamara 3 года назад +9

    2:15 "Неуобно"... Хорошо что хотя бы О, а не Ё :)

    • @TheDCSamara
      @TheDCSamara 3 года назад +4

      Вкурил: это String потерял букву. Дырявые стринги ёпсель.

  • @salmantechnologies282
    @salmantechnologies282 3 года назад +6

    Сэр, пожалуйста, добавьте к видео английские субтитры

  • @neonbrickchannel2136
    @neonbrickchannel2136 3 года назад

    Алекс Гайвер: там короче все символы в одной цепочке хранятся, и надо короче к ним обращаться как к номерам и т.п.
    Я, который пришел из web: ...что?...
    Короче, Espruino - мой вариант)))

  • @absoriann
    @absoriann 3 года назад +1

    2:16 очепятка

  • @ПолищукНикита-м5ъ
    @ПолищукНикита-м5ъ 3 года назад +1

    Доброго времени суток , немогли бы вы заделать проект "Аквариумный контролер " у меня есть аквариум, и управлять большим аквариумом, и следить постоянно за ним очень сложно а в ардуино я не очень понимаю. Спасибо
    Что должно быть в контролере:
    Таймеры
    Экран управления
    Желатель дозатор удобрения
    Авто долив воды
    Расвет- закат
    Если возможно WiFi управление
    Автоматическое включение охлаждения

    • @MrYbs-ie1jj
      @MrYbs-ie1jj Год назад

      Контроллер теплицы не устраивает?

  • @Werbard
    @Werbard 3 года назад +1

    2:15 "НЕУОБНО" получилось )

  • @MrBondarrr
    @MrBondarrr 3 года назад

    Во млин и в нашей сфере пошел C++, ну как же успеть за всем)

  • @РадиоЛюбитель-м9т
    @РадиоЛюбитель-м9т 3 года назад

    Здравствуйте!
    А не хотите сделать уроки по Flprog? По созданию пользовательских блоков.

    • @ArduNotes
      @ArduNotes  3 года назад +1

      здравствуйте, нет

    • @kalobyte
      @kalobyte 3 года назад

      про это есть у самого автора флпрог и там ничего сложного как раз нет

  • @ДимаКуликов-ы1п
    @ДимаКуликов-ы1п 3 года назад

    Чтобы не заниматься всеми этими сложениями строк и поисками индексов символов человечество придумало замечательные функции sprinf и scanf.

    • @ArduNotes
      @ArduNotes  3 года назад

      ага, только вот придуманы они для десктопа, потому что отжирает эта замечательная функция около 2.5кб Flash, а форматирование простейшей строки занимает целую вечность даже по меркам String. Не для микроконтроллеров этот индийский код используется

    • @ДимаКуликов-ы1п
      @ДимаКуликов-ы1п 3 года назад

      @@ArduNotesЧто то является частью libc, что другое и индуским кодом это можно называть с большой натяжкой. А что касаемо скорости, то как только речь заходит о формировании строк для дальнейшего вывода (в файл на sd карту к примеру), то тут время затраченное на форматирование строки просто меркнет по сравнению со скоростью работы IO операций, а вот удобочитаемости добавляет сушественно.

  • @MimakaGamleT
    @MimakaGamleT 3 года назад

    Ухх, от души)

  • @chinarulit1126
    @chinarulit1126 3 года назад +7

    Уроаи ардуино превращаются в уроки по
    C++🙂🙂🙂🙂

    • @ArduNotes
      @ArduNotes  3 года назад +6

      ну ардуино программируется на С++, не по питону же уроки делать =)

    • @Gameplayer55055
      @Gameplayer55055 3 года назад +2

      @@ArduNotes esp8266 micropython :)
      Скорее как сетап для обучения информатике, практической пользы нет

  • @КостяУгаров-э6с
    @КостяУгаров-э6с 3 года назад +3

    запиши плз ролик по micropython на esp8266 или esp32

  • @Lesperi
    @Lesperi 3 года назад

    А код на теплицу перепишешь? Воздаю должное это самый крутой и полезный проект. Безмерно благодарен за проект "теплица".

    • @MAD_ALEX
      @MAD_ALEX 3 года назад

      Там нечего переписывать

  • @erlingsigurdson3064
    @erlingsigurdson3064 3 года назад

    Почему на 5:19 sizeof возвращает 2? Про strlen понятно (длина строки равна 5, от 0 до 4), а про sizeof не очень.

    • @ArduNotes
      @ArduNotes  3 года назад +1

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

    • @enter0prise
      @enter0prise 3 года назад

      Потому что sizeof возвращает размер аргумента в байтах. Если передан массив - возвращает его размер (размер буфера), если указатель (не важно куда указывающий) - размер типа указателя.
      Собственно, это одно из практических отличий массивов (T[]) от указателей на буферы (T*).

  • @persontashik_z
    @persontashik_z Год назад

    Как int преобразовать в char?

  • @AlexanderGorshkov
    @AlexanderGorshkov 3 года назад

    Время потроллить Гувера - го микропайтон)

  • @Gartenzwerg
    @Gartenzwerg 3 года назад

    На 5:52 не понял, зачем "str+" при инициализации переменной. И это гарантированно, что после объявления переменная пустая?

    • @ArduNotes
      @ArduNotes  3 года назад +1

      "str+" чтобы показать, как работает указатель и как сдвигается индекс. Переменные при создании могут быть не пустые, поэтому нужно самому инициализировать, о чём дальше рассказано

    • @Gartenzwerg
      @Gartenzwerg 3 года назад

      @@ArduNotes понятно, я так и думал.

  • @ЮрийВилков-р2н
    @ЮрийВилков-р2н 3 года назад

    Где можно найти полный список функций работы с char

    • @ArduNotes
      @ArduNotes  3 года назад

      в текстовом уроке по ссылке в описании, либо как показано в видео - в доках на avrlibs

  • @denial3874
    @denial3874 Год назад

    Заметки Ардуинщика: Когда будет урок по указателям, это можно сказать самая важная тема и она не раскрыта.

  • @Terabyte_Channell
    @Terabyte_Channell 7 месяцев назад

    0:34 хочу купить!)

  • @fakeesp1
    @fakeesp1 3 года назад

    Го урок по твоей библиотеке для тг

  • @goiiia3774
    @goiiia3774 3 года назад

    Какой объём можно разово послать в монитор порта ?? Есть одна идея, но боюсь упереться в какое нибудь ограничение.

    • @ArduNotes
      @ArduNotes  3 года назад +1

      в целом ограничений нет, если отправная строка уже сформирована

    • @goiiia3774
      @goiiia3774 3 года назад

      @@ArduNotes , мм, это очень хорошо )

  • @ilyamedvedev8943
    @ilyamedvedev8943 Год назад

    У меня у одного возникла сразу идея про авторизацию по логину паролю через Ардуино🤣

  • @ПавелГлюк-э1с
    @ПавелГлюк-э1с 3 года назад

    Коммент в момент четыре пять!

  • @BaHeK1994
    @BaHeK1994 3 года назад

    5:18, почему на 8-ой строке sizeof вернуло 2?

    • @Al.Sy.
      @Al.Sy. 3 года назад +2

      strP - указатель на char, в строке 8 вычисляется его размер (2 байта, т.е. может адресовать до 64 килобайт).

  • @lazyNavel
    @lazyNavel 3 года назад

    Очень интересно но ничего не понятно😅👍 Как говорил мой препод в далёком 2010 читай документацию пиши код, а там разберемся 😂😂😂

  • @sliders116
    @sliders116 3 года назад +2

    А утечка памяти?

    • @ArduNotes
      @ArduNotes  3 года назад

      куда?

    • @olexangrstetsiuk3092
      @olexangrstetsiuk3092 3 года назад

      @@ArduNotes , наверное вопрос о : уничтожении динамических массивов, которые загрузят всю оперативку.

    • @ArduNotes
      @ArduNotes  3 года назад +1

      уничтожаются конечно. Но при неудачном менеджменте программы можно создать жуткую дефрагментацию и п*дец

    • @olexangrstetsiuk3092
      @olexangrstetsiuk3092 3 года назад

      @@ArduNotes , ой, создай урок как не надо делать, чтобы не получить звездулину в работе МК.

  • @VadymTytan
    @VadymTytan 3 года назад +2

    Если mString либа действительно резкая как понос, то я в деле

  • @CatYoutuberTV
    @CatYoutuberTV 3 года назад +6

    Скоро: GyverString
    Через 2 года: GyverInt

    • @AlexanderTheMiddle
      @AlexanderTheMiddle 3 года назад +4

      Gyverduino

    • @ArduNotes
      @ArduNotes  3 года назад +3

      на самом деле уже есть gyver float, но он не даёт особого прироста в скорости. Но имеет смысл =)

    • @Isemenuk27
      @Isemenuk27 3 года назад +5

      GyverBoolean...

    • @antonpetrusevich
      @antonpetrusevich 3 года назад

      @@ArduNotes Неужто переплюнул gcc по эффективности програмной реализации плавучки? Для Арудино больше фикс смысл имеет.

  • @technotroll-pro
    @technotroll-pro 3 года назад

    На esp8266 (если кодить в среде ардуино) String гарантировано приносит проблемы в половине случаев

    • @ArduNotes
      @ArduNotes  3 года назад

      да? А в каких именно? Я не сталкивался, так как стараюсь делать всю обработку строковыми алгоритмами

    • @technotroll-pro
      @technotroll-pro 3 года назад

      @Заметки Ардуинщика wemos, nodemcu

    • @technotroll-pro
      @technotroll-pro 3 года назад

      При чтении ответа с сервера по http

    • @ArduNotes
      @ArduNotes  3 года назад

      до 15 тысяч символов он может принять, и сам возвращает стринг. Я много с таким работал, ничего не ломалось

    • @technotroll-pro
      @technotroll-pro 3 года назад

      @Заметки Ардуинщика дело не в самом стринге, а в том, что он подвешивает программу причём это как правило сразу не видно. Код нормально заводится. Все работает, но периодами плата подвисает. Вылечилось только чистым Си

  • @vovanikotin
    @vovanikotin 3 года назад

    Как 8 байтный double от GPS антенки переделать в ардуиновский 4 байтный float без потери точности в 6 и 7 знаке?

    • @ArduNotes
      @ArduNotes  3 года назад

      никак. Хранить в каком нибудь своём составном типе данных, например байт на целые и лонг на дробные

    • @vovanikotin
      @vovanikotin 3 года назад +1

      @@ArduNotes ок, а как тогда дробную часть корректно засунуть в лонг?
      Конкретный пример, 44.00000012
      12 запишется в лонг как 12, но нули перед 12 пропадут, и их никак не получается учесть.

    • @U2VR_Channel
      @U2VR_Channel 3 года назад

      @@vovanikotin А зачем плодить переменные + код, если можно использовать ардуиновский double?

    • @vovanikotin
      @vovanikotin 3 года назад

      @@U2VR_Channel avr-овские чипы не поддерживают double, double компилятором превращается во float, а все что после 6-7 знака превращается в рандом - из-за этого есть проблемы с координатами gps.

    • @ArduNotes
      @ArduNotes  3 года назад

      ардуиновский double урезан до 4 бит

  • @СемёнАндреев-т4ш
    @СемёнАндреев-т4ш 3 года назад

    Уважаемый автор видео,как можно с вами связаться?

    • @ArduNotes
      @ArduNotes  3 года назад

      под каждым видео почта указана

  • @absoriann
    @absoriann 3 года назад

    Чем отличается String из ардуино и string в c++?

    • @ArduNotes
      @ArduNotes  3 года назад +2

      реализацией и синтаксисом

    • @alexkart9239
      @alexkart9239 3 года назад

      C++ объектно-ориентирован, т.е. всё, что вы найдёте в std:: является классами, от которых можно производить и наследовать. К примеру, я могу, в теории, создать дочерний класс от std::string и добавить то, чего там, по моему мнению, не хватает. Вот так
      class ololoString : std::string
      {
      public:
      void blowjob();
      };
      Теперь я могу создавать инстансы нового класса ololoString, которые умеют делать blowjob.

  • @АлександрСановский-д9д

    Нужна лёгкая библиотека ЕЕПРОМ для счётчика, который пишет в еепром и не делает ему износа....

    • @androidpasha
      @androidpasha 3 года назад

      Пиши просто в следующую ячейку после максимального значения. В конце eeprom пиши в первую. Это самый щадящий способ будет. Одним циклом управишься. При первом старте только обнулить весь епром нужно (если ячейка1==2). Итого два цикла.

  • @int_DrBass
    @int_DrBass 3 года назад

    а как же сишные sprinf и sscanf? проще и поддерживают создание строки с форматированием, а itoa и atoi надо крайне осторожно использовать
    а вообще мне не понятно почему в крайне ограниченных ресурсах сделали плюсы а не чистый си, который более компактый, пусть и более сложный

    • @ArduNotes
      @ArduNotes  3 года назад +2

      никто не делал плюсы, писать можно и на с и на cpp, компилятор разберётся. По sprintf - тема для отдельного урока. Ну и к слову sprintf гораздо тяжелее и медленнее даже чем String, на МК использовать это прям самоубийство

    • @enter0prise
      @enter0prise 3 года назад

      То есть размер бутлоадера - это ОК, а плюсы помешали?) Исключения отключены, rtti отключен, стандартной библиотеки нет. Все во благо минимального размера хексов. Зато от плюсов есть шаблоны, constexpr, лямбды и в конце-концов классы с нормальным RAII. Вопрос в том, почему ардуинщики этими благами цивилизации практически не пользуются?...

    • @int_DrBass
      @int_DrBass 3 года назад +1

      @@enter0prise лично мне чистый си ближе чем плюсы. лябмдами и rall не пользуюсь даже на компе, так как нафиг это надо

    • @ArduNotes
      @ArduNotes  3 года назад

      потому что ардуинщики - не сеньоры C++, а полные новички в программировании?

    • @enter0prise
      @enter0prise 3 года назад

      @@int_DrBass я к тому, что перейдя С-компилятор критически ничего выиграть не получится, а потерять - запросто.

  • @edgarfedosov1440
    @edgarfedosov1440 3 года назад +1

    С тем объемом памяти, что в ардуинках, лучше сразу забыть о типе string.

  • @opi03
    @opi03 3 года назад +1

    Сложно, скучно, но необходимо

  • @АлексейМирошниченко-ь8ю

    У тебя ест отпуск? А где ты работаешь?

  • @olexangrstetsiuk3092
    @olexangrstetsiuk3092 3 года назад +2

    Эх , если бы Алекс взял свои прежние опубликованные скетчи и наглядно показал нам как можно изменить ,,стринги,, для экономии памяти и быстродействия. Я мало что понял , и вообще ничего взять себе на заметку не получилось...

    • @ArduNotes
      @ArduNotes  3 года назад +1

      я редко использую стринги, показывать нечего

    • @olexangrstetsiuk3092
      @olexangrstetsiuk3092 3 года назад

      @@ArduNotes , а как же : String runningTexti , ведь именно эту строку я без вашего спроса нещадно эксплуатирую в своих опубликованных на канала скетчах. Кстати научил выводить в бегущий текст буквы Ё, ё (эх, насмартфонной клаве нет таких...).

    • @ArduNotes
      @ArduNotes  3 года назад

      @@olexangrstetsiuk3092 там от стринг ничего плохого нет в целом

    • @olexangrstetsiuk3092
      @olexangrstetsiuk3092 3 года назад

      @@ArduNotes , нет нет ничего против не имею , просто для аналогии изменив как в этом уроке увидеть всю подноготную. Ну как это все сочетается ... наверное...

  • @nananight8473
    @nananight8473 3 года назад +1

    Здравствуйте! Нужен желательно быстрый ответ. Я работаю в программе ардуино. Проблема состоит в том, что бизер играет тогда, когда датчик линии находится над белой поверхностью. Как сделать так, чтоб бизер играл тогда, когда датчик линии находится над черной поверхностью? Заранее, спасибо!

  • @DART2WADER
    @DART2WADER 3 года назад

    Не ожидал увидеть шаблоны, тогда может github.com/hanickadot/compile-time-regular-expressions на атмеге запустить.

    • @ArduNotes
      @ArduNotes  3 года назад

      тяжеловато для МК. Есть облегченная либа regexp спецом под аврки

  • @АнисияСомова
    @АнисияСомова 3 года назад

    Скобочек нет, массивов нет, меня нет 🤯 мы в матрице

  • @dreyryba4328
    @dreyryba4328 3 года назад

    Так в уроках по Ардуино Гайвер объяснил, почему современные игры с графикой 10 летней давности и тупости физики требуют нынешних вычислительных мощностей.

  • @ВасилийШумилов-о8ь
    @ВасилийШумилов-о8ь 3 года назад

    Хех, Алекс по итогу свои стринги сделал 🤣

  • @prostojproekt
    @prostojproekt 3 года назад

    2:15 явно устал (неуобно)

  • @pochka7195
    @pochka7195 3 года назад

    У нас новое слово в видео появилось: неуобно

  • @dj2080s
    @dj2080s 3 года назад

    2:12 не неуобно а неудобно

  • @TheShura2
    @TheShura2 3 года назад

    После фразы "а на самом деле никаких массивов нет" я зависаю и пергружаюсь

  • @mmiro
    @mmiro 3 года назад +1

    Уж очень не всегда это оправдано.
    Тот же код с string можно оптимизировать без лишнего создания строки для числа
    int val=atoi(str.c_str()+ ++comma)
    Да и тоже можно заменить str[comma]='\0';
    Чтобы тоже вывести println(str.c_str())
    К тому же вы немного вводите начинающих в заблуждение о расходах памяти.
    Каждое последующее использование string будет увеличивать использование не больше чем если все делать на чистом Си, а иногда и меньше, ведь даже в данном примере, под число вы создали char[10], а число может быть даже из одного символа.
    +В жизни вы скорее будете вынуждены использовать динамические строки, а это и сложнее, и утечки легко получить да и много ещё всего.
    Используйте стриги и не партесь) в 90% ситуаций это будет более чем оправдано. Время и силы самый дорогой ресурс😉

    • @ArduNotes
      @ArduNotes  3 года назад

      Не соглашусь, чушь. Зачем вызывать atoi у буфера String, если String имеет свой встроенный toInt?
      println(str.c_str()) - ещё больший маразм, потому что у класса Print есть поддержка вывода String, которая как раз сама и делает c_str(). Если уж и делать за компилятор всю его работу, то проще работать с char[].
      По памяти - начнём с того, что есть RAM, а есть Flash, это сильно разные вещи. Строки будут занимать одинаковый объём sram, да, но сам класс String накидывает пару килобайт на Flash, иногда это критично. Также стринги при неаккуратном использовании приводят к фрагментации памяти, что очень опасно для программы. А время на отладку программы может быть потрачено больше, чем на её написание с приложением чуть бОльших мыслительных усилий

    • @mmiro
      @mmiro 3 года назад

      @@ArduNotes а вы запустите, и сравните время выполнения) вот затем.
      Создание отдельной строки только лишь для того чтобы сразу ее превратить в int и больше нигде не использовать, вот это маразм

    • @mmiro
      @mmiro 3 года назад

      @@ArduNotes читайте внимательно, прежде чем делать выводы.
      Print(c_str()) имеет смысл если сделать
      str[comma]='/0', как вы показали в видео, чтобы вывести только первую часть.

    • @mmiro
      @mmiro 3 года назад

      @@ArduNotes а уж как неаккуратная работа с указателями чревата последствиями, так ещё и сложноуловимыми, вы должны знать)

  • @iAlexTube
    @iAlexTube 3 года назад +1

    2:13 неуйобно