Уроки Arduino для начинающих, #2.1, Основы языка C

Поделиться
HTML-код
  • Опубликовано: 19 авг 2024
  • 🐾Желающим оказать материальную поддержку.
    www.donationale...
    🐾Уроки Arduino для начинающих, #2.1, разбираемся с типами данных, переменными и прочей не интересной ерундою.
    🐾Блокнот программиста Arduino:
    arduinolab.pw/w...
    #программирование #arduino #ардуино #уроки

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

  • @timataishubekov3680
    @timataishubekov3680 5 лет назад +15

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

  • @user-tb3mm6dl3z
    @user-tb3mm6dl3z 6 месяцев назад

    Вообще это очень важные и интересные темы!Спасибо что вы снимаете про них!

  • @andreyvavilov803
    @andreyvavilov803 5 лет назад +4

    Очень нравится подача материала, надеюсь на продолжение.

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

    Спасибо за ваш труд.

  • @user-up9ep6gn2b
    @user-up9ep6gn2b 5 лет назад +3

    И снова СУПЕР! ! ! так держать) ждем продолжения.

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

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

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

    17:01 Думаю, правильнее сказать, что их отличие в том что цикл while выполняется пока условие истинно, в то время как цикл for привязан к счетчику, опять же количество итераций цикла for гораздо проще отследить, не используя дополнительные переменные, в отличие от цикла while, где какой-либо счетчик придётся создавать отдельно. Если вы точно знаете сколько раз вам потребуется выполнить какое-то действие, используйте for, в ином случае - while.

  • @user-ml4ww1kv4o
    @user-ml4ww1kv4o 5 лет назад

    Дополню немного. В цикле switch условие default можно не заканчивать операндом break, в отличие от case. Не помню как в Arduino IDE, а во взрослой среде разработке AVR Studio если пропустишь break, то компилятор будет ругаться.
    По циклу if. У него может быть несколько else. Например
    if(a == 0){
    Serial.println(F("0"));
    }
    else if (a == 1){
    Serial.println(F("1"));
    }
    else if (a == 2){
    Serial.println(F("2"));
    }
    Получается эдакий switch. Но в отличие он него в цикле if программа будет проходить по всем else if в не зависимости нашли совпадение ранее или нет.
    По переменным. Если в цикле объявить переменную, то она будет сохранять свое состояние только в нем. Если же необходимо сохранять состояние переменной всегда, то объявлять ее нужно с операндом static.
    void TimeIntervals(){
    static unsigned long LoopLCDLightTime;
    if(millis() > (LoopLCDLightTime + 10000)){ // Выключение подсветки экрана
    Serial.println("Light LCD off");
    LoopLCDLightTime = millis();
    lcd.noBacklight();
    lcd.noDisplay();
    }
    }
    }

  • @user-qk7il7eb4b
    @user-qk7il7eb4b 5 лет назад

    Очень хорошо что приводите примеры из С++ , каждый Ардуинщик рано или поздно захочет придти к нему.

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

      Это С, а не С++

    • @lvanovlvan
      @lvanovlvan 4 года назад

      @@JekaM5 откуда в С ООП? Это самый что ни на есть С++

    • @JekaM5
      @JekaM5 4 года назад

      @@lvanovlvan Где в этом видео ООП? В данном конкретном видео примеры на С.

    • @lvanovlvan
      @lvanovlvan 4 года назад +1

      @@JekaM5 Ардуино IDE = C++, библиотеки - суть классы, классы == ООП. Хотя и язык ардуино - производная от С++.
      Спорить не собираюсь, можешь оставаться при своем мнении.

    • @JekaM5
      @JekaM5 4 года назад

      ​@@lvanovlvan Я прекрасно знаю, что в Arduino IDE есть C++ c ООП, классами, наследованием и т.д. Смотри внимательно, на какой комментарий я изначально отвечал. Это был комментарий Дениса Лазовского - "Очень хорошо что приводите примеры из С++". Мой ответ на его комментарий: в ЭТОМ ВИДЕО нет примеров из С++, это обычный С. Про Arduino IDE, Wiring, и библиотеки я ни слова не сказал, это ты уже сам додумал. Ещё раз: исходный код, который мы видим в этом видео - на языке С.

  • @spajalnikom
    @spajalnikom 5 лет назад +13

    *Хорошие уроки👍🏼👍🏼👍🏼*

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

    Спасибо, приятно было вспомнить начальный курс программиста))

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

    Отлично Мастер! Продолжай в том же духе. Только не останавливайся, побольше про С++ , это основа, это фундамент для всех, дальнейших уроков. У тебя все получится!

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

      С и С++ это разные языки.

  • @andrisrubens2588
    @andrisrubens2588 4 года назад +1

    Спасибо!

  • @user-rm1eo9qq6o
    @user-rm1eo9qq6o 5 лет назад +1

    Сэр да вы профэшионал СПАСИБО очень доступно 👍👍👍👍💪💪💪💪✨🎇🎆🥇🏅🥇

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

    Хорошо объяснил!

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

    Отличное видео.

  • @user-cy9jk9ns9p
    @user-cy9jk9ns9p 5 лет назад +1

    Молодец!!!!!!

  • @user-rg5gd9td8w
    @user-rg5gd9td8w 5 лет назад

    Спасибо большое за пояснение, очень нравится такие уроки..., продолжение следует?

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

    Еще есть чит, можно свой код вставлять в ISR0, будет выполнятся примерно 1000 раз в секунду. Только его найти надо в глубинах Ардуины еще )
    Просто это прерываение есть, настроено, а как использовать неочевидно.

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

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

  • @user-yz3us4qu2u
    @user-yz3us4qu2u 5 лет назад +1

    Было бы хорошо что бы выкладывались примеры что бы загрузить и изучить

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

      arduinolab.pw/wp-content/uploads/2018/12/arduino_notebook_rus_v1-1.pdf

  • @madoppozitman3181
    @madoppozitman3181 5 лет назад +5

    Ничерта не понял, но очень интересно))

    • @user-vlad385
      @user-vlad385 5 лет назад +1

      Глеб! Есть ещё прога flprog.ru/

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

    Супер! я самоучка, но уже более сложные программы пишу, и некоторых моментов не знал, например про uint8_t (причем искал инфу в интернете, такого четкого объяснения ни разу не видел). И про define не знал, тоже думал что аналог const. Вот только не понял: какие это есть недостатки у define? А то я пока использую const для объявления портов, стоит ли перейти на define? И какие у него еще функции? А по поводу цыклов: я бы не увлекался ими, ведь они делают код не прозрачным..

  • @user-dh9cj2rv2l
    @user-dh9cj2rv2l 5 лет назад +10

    А как насчёт уроков по ESP32 с его приколами. Инфы рускоязычной на просторах интернета по нему практически 0, а хотелось бы. А так уроки не плохие, но этого добра уже хватает в сети.
    Вот например сейчас пытаюсь вкурить тему, чем делать задержки в скетче. В ESP8266 delay(), позволяет выполнятся основной прошивке модуля, а циклы по времени нет. На ардуинках наоборот, это вредная функция. А как обстоят дела с ESP32, вообще не понятно. И так со многими приколами данного девайса.

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

      Поддерживаю! Нужна инфа по ESP32! От человека разбирающегося в мануалах.
      P.S. Материал в уроке хорошо подан.

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

      Что у вас за история с delay()? Функция работает одинаково для авр\8266 при условии что мы используем сдк есп8266 для ардуино ide.

    • @user-dh9cj2rv2l
      @user-dh9cj2rv2l 5 лет назад

      @@oscarwilde8949 Уже вроде как подхожу близко к истине, но трудности с переводом от гугла. На сколько я понял, то делай в отличии от врайт по миллис , даёт возможность исполнять основные задачи контроллера , что полезно для дела. А в ардуинке от этого один вред.
      Нашол пример реализации многозадачности, но он в ESP-IDF написаный. А там как таковой delay() нету, а писанина ближе к машинному коду.
      Ещё нашол пример, где нерадотает delay(1);, попробывал у себя, всё работает, может исправили. Суть была в том, что типа при таком условии процик проверяет очередь задач и при их отсутствии продолжает не задерживаясь.
      Вообщем оочень много мелких непонятностей, а в целом глобально всё как бы понятно.
      Убил 1.5 суток на разбор полётов по EEPROM. Всё раборает, но только до исчезновения питания. А оказалось что просто нужно дописывать EEPROM.commit(); и EEPROM.end();. И читать писать лучше через get и put. Хотя в просторах нета пишут что нельзя так и в примерах библиотеки про это ни слова.

    • @user-dh9cj2rv2l
      @user-dh9cj2rv2l 5 лет назад

      @@oscarwilde8949 была проблема с переполнением буфера сериалпорта, решил задержкой в 10 миллис. Вопрос, а сколько надо для Serial.printf()? и зависит ли это от количества передаваемых бит?

    • @user-dh9cj2rv2l
      @user-dh9cj2rv2l 5 лет назад

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

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

    Спасибо! Начинаю нимного понимать. Если можно пожалуйста вы не могли бы объяснять как в первом видео примеры. Как у вас было" эта функция такая,она нужна на пример для работы с реле". так еще более понятно. Спасибо!

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

      Нет никакой специальной функции для работы с реле... Просто работайте с портами ввода-вывода (пинами).

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

    сделайте урок по матричной клавиатуре которая будет не тормозить и поддерживать любое одновременное количество нажатий не меньше 10шт.

  • @lebfrspb
    @lebfrspb 5 лет назад +3

    Момент про пины и define. Правильно понимаю, что подставленные значения занимаю память в которой лежит программа, а не оперативную?

    • @oscarwilde8949
      @oscarwilde8949 5 лет назад +2

      Если простыми словами, то дефайн это указание редактору перед компиляцией заменить все значения, на указанные в дефайне. Это макрос препроцессора перед компиляцией. Как при этом расходуется память... в теории лишняя оперативная память не тратится.

    • @slaitail215
      @slaitail215 5 лет назад +2

      "Правильно понимаю, что подставленные значения занимаю память в которой лежит программа, а не оперативную?"
      Нет. При объявлении любой переменной сразу же выделяется необходимое место в оперативке. Как раз для того что бы не выделялась оперативная память и не было лишних строк кода в памяти программ для этого и используют "Дефайн".

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

      один дефайн позволяет менять одну и ту же константу во многих местах кода @@oscarwilde8949

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

      Директива #define вообще не занимает никакой памяти. Она обрабатывается препроцессором до компиляции. И компилятору отдаётся код уже без #define, все значения директив #define уже подставлены в программе в нужных местах.

    • @user-ku8hx3om4u
      @user-ku8hx3om4u 4 года назад +1

      define это макрокоманда, выполняется на этапе компиляции и просто заменяет весь текст в программе по названию define на его значение.
      То есть было:
      #define PI 3.14
      float a = PI;
      Во время компиляции это замениться на
      float a = 3.14;

  • @pichbah
    @pichbah 5 лет назад +2

    Вроде как не интересная ерунда, но это не так, кое что для себя подметил. Префикс unsigned часто встречал их в коде, но сам не использовал так как не знал что они делают. Также int8_t и uint_16t, читал статьи на вики и других ресурсах, также не понял. А тут все просто и доступно, с живыми примерами. Еще есть префиксы для переменных, и что они делают?

    • @oscarwilde8949
      @oscarwilde8949 5 лет назад +3

      Есть префиксы и каждый гуглится\яндексится, вот например по запросу unsigned arduino в яндексе, вы не поверите, по первой ссылке ткнул и там прямо статья начинается с "Тип данных unsigned int - беззнаковое целое число, также как и тип int (знаковое) занимает в памяти 2 байта. Но в отличие от int, тип unsigned int может хранить только положительные целые числа в диапазоне от 0 до 65535". В целом этот способ подходит, чтобы узнать зачем нужны const\static\volatile

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

      Это не префиксы, это типы данных. Можно набрать в гугле "язык программирования С, типы данных" и почитать. Но есть особенности из-за восьмибитного микроконтроллера (AVR), который применяется в ардуине. Например целочисленный тип данных int для компьютерного процессора имеет размер 4 байта (32 бит), а для AVR всего 2 байта (16 бит). Поэтому придумали типы с явным указанием количества бит: int8_t, int16_t, int32_t и другие.

  • @sameySM
    @sameySM 4 года назад

    Как сделать копию программы (скетч) который уже залит в Arduino

  • @user-ku8hx3om4u
    @user-ku8hx3om4u 4 года назад +1

    Программирование - нудятина?) Да ну, наоборот самая классная часть!

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

    Спасибо за Вашу работу.
    Я уже немного освоился в ардуино (очень немного) :). У меня вопрос такого плана. возможно ли на плате ардуино запрограммировать один из пинов, таким образом, чтобы он стал двунаправленной шиной передачи данных RX/TX ?

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

    Извините, но вроде по С++ полно обучалок. Интереснее бы по обмену данных Ардуина и комп (питон какой-нибудь), или что-то такое, вставки на ассемблере, энергосбережение... хотя думаю в вашем курсе оно и будет что-то такое ))
    ruclips.net/user/results?search_query=%D1%81%2B%2B+%D1%83%D1%80%D0%BE%D0%BA%D0%B8+%D0%B4%D0%BB%D1%8F+%D0%BD%D0%B0%D1%87%D0%B8%D0%BD%D0%B0%D1%8E%D1%89%D0%B8%D1%85

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

    Когда смотришь уроки вроде всё понятно, но когда начинаешь сам что то писать, упираешься в какую нибудь ошибку и все, ступор.

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

      это нормально.

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

      При виде ошибки нужно не впадать в панику, а внимательно прочитать её (если не знаете английского - есть переводчики). Если не понимаете, что написано в ошибке - гугл и сообщество поможет.

  • @user-wh6rt9mv7s
    @user-wh6rt9mv7s 5 лет назад

    продолжай

  • @Dialbist
    @Dialbist 5 лет назад +7

    Как это нудятина?) Это вообще-то самое главное

  • @32Bryansk
    @32Bryansk 5 лет назад

    С чего вдруг? Сначала рассказывать про всякие модули, а затем рассказать людям, как программировать? Т.е. до этого информация доносилась для тех, кто не знает даже про типы данных?)))
    Не, за уроки уважение, просто я немного логики не понял)

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

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

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

    О чём тут ты сам себе объесняеш или кому

  • @user-ei4vw4ox3e
    @user-ei4vw4ox3e 5 лет назад +3

    Очень полезная "нудятина"

  • @Makc-NN
    @Makc-NN 3 года назад +2

    нихера не понятно. отписка

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

    Я не понимаю вас, пишите для начинающих а обьясняете как прлфесионалам

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

      как вы сами в туалет ходите, вообще не понимаю.

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

    Полная шляпа.