[image]

Уроки программирования Arduino

Перенос из темы «Чайные радиоэлектронные вопросы»
 
1 2 3 4 5 6 7
RU GOGI #07.02.2019 12:14  @Валентин_НН#07.02.2019 08:54
+
-
edit
 

GOGI

координатор
★★★★

В.Н.> я это всё понимаю. надо просто заставить себя начать этим заниматься - проскочить какую-то начальную мертвую точку - какую-то боязнь/неуверенность, штоле.
А ты в чем код пишешь? И как отлаживаешь?
   52.052.0
RU Валентин_НН #07.02.2019 12:34  @GOGI#07.02.2019 12:14
+
-
edit
 

Валентин_НН

литератор
★★☆
В.Н.>> я это всё понимаю. надо просто заставить себя начать этим заниматься - проскочить какую-то начальную мертвую точку - какую-то боязнь/неуверенность, штоле.
GOGI> А ты в чем код пишешь? И как отлаживаешь?

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

пробовал ставить какой-то пакет "visual studio" штоле. он кучу времени качался, потом ещё дольше ставился. я потом нем потыркался, отложил до лучших времен. Задумал ещё потыркаться - выяснилось, что срок годности у этого пакета вышел и он предлагает купить себя.

еще есть некоторая проблемка. всю жись работал с программами, которые управляются всякими шорткатами, командами. Поэтому мне непривычно писать всё врукопашную. Подсознательно хочется нажать, к примеру [DR, нажать пробел] и чтоб появилась команда DigitalRead или там Alt+P это Print.
просто непривычно, что надо штрямкать, как на печатной машинке :)
   1919
RU GOGI #07.02.2019 13:03  @Валентин_НН#07.02.2019 12:34
+
-
edit
 

GOGI

координатор
★★★★

В.Н.> дык, в этой ардуиновской IDE.
Она просто ужас. Это не IDE, это г...
>написал, загрузил. смотришь - так лампочка загорается или не так. если не так, то сидишь и втыкаешь в этот листинг - что пошло не так.
Попробуй все-таки что-то, что содержит нормальный симулятор, AVR Studio или IAR EWB.
Ты увидишь, как это прекрасно, поставить брикпоинт прямо на функцию, которая должна мигать и потом по шажочкам смотреть, что там происходит.
И кстати, прежде чем переходить на темную сторону Lua и прочего, попробуй поставь Bascom AVR - среда для разработки на бейсике. Я начал программировать для контроллеров в ней, о чем ничуть не жалею.
Никаких тебе регистров, хренистров и прочей чуши. За день можно освоить и начать творить.
   52.052.0
RU Валентин_НН #08.02.2019 11:33  @GOGI#07.02.2019 13:03
+
-
edit
 

Валентин_НН

литератор
★★☆
GOGI> Попробуй все-таки что-то, что содержит нормальный симулятор, AVR Studio или IAR EWB.
вчера поставил Atmel Studio
Стало ещё страшней :D
попробовал загрузить туда ардуиновский скетч.
при его трассировке по шагам офигел, сколько скрывается за каким-нибудь простеньким digitalWrite.

ПС а есть надежный поставщик Proteusa? ну, чтоб без троянов и прочих радостей
   1919
RU GOGI #08.02.2019 11:53  @Валентин_НН#08.02.2019 11:33
+
-
edit
 

GOGI

координатор
★★★★

В.Н.> при его трассировке по шагам офигел, сколько скрывается за каким-нибудь простеньким digitalWrite.
Во-во.
В.Н.> ПС а есть надежный поставщик Proteusa? ну, чтоб без троянов и прочих радостей
Я последний раз его лет 5 назад ставил.
Причем, точно помню, что ставил его в виртуальную машину. Почему - не помню :) Точно не из-за троянов и прочего.
   52.052.0
LT AleksejLt #08.02.2019 22:20  @Валентин_НН#05.02.2019 23:55
+
-
edit
 

AleksejLt

опытный

В.Н.> фигасе :eek: а так можно говорить в приличном обществе? в морду не дадут? :D

За правду не страшно и пострадать :) Просто С/С++ это ЯП для настоящих разработчиков. Народ попроще пользуется более высокоуровневыми языками и не жужжит.

В.Н.> да хз. по большому счету, мне всё равно что изучать. на самом деле, исходные знания нулевые.

Если ты остаешься на платформе Ардуино, то мучай С++, тут ничего не поделаешь. Гоги посоветовал тебе нормальные ИДЕ для работы, там будет проще писать. Хотя мне хватает Visual Studio Community Edition вместе c Visual Micro.

P.S. И ещё совет - когда пишешь прорамку для ардуинки используй Serial.println, очень помогает отладить.
   66.066.0
RU Валентин_НН #08.02.2019 22:46  @AleksejLt#08.02.2019 22:20
+
-
edit
 

Валентин_НН

литератор
★★☆
AleksejLt>. Народ попроще пользуется более высокоуровневыми языками и не жужжит.
ого. лично я думал, что круче С уже дальше некуда. Не потому что "круче не придумать", а потому что "незачем". ибо всё, что "круче" можно самому себе написать в этом самом Си.
   1919
LT AleksejLt #09.02.2019 21:47  @Валентин_НН#08.02.2019 22:46
+
-
edit
 

AleksejLt

опытный

В.Н.> ого. лично я думал, что круче С уже дальше некуда. Не потому что "круче не придумать", а потому что "незачем". ибо всё, что "круче" можно самому себе написать в этом самом Си.

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

Но у тебя нет другого варианта - только С. Я, конечно, надеюсь, что запилять компилятор Го под ардуинку, но это нескоро.
   66.066.0
+
+1
-
edit
 

tarasv

опытный

AleksejLt> А если заставлять писать на плюсах, то половина застрелится :)

Первыми застрелятся манагеры от бюджетов и сроков ;)

AleksejLt> Я, конечно, надеюсь, что запилять компилятор Го под ардуинку, но это нескоро.

Есть gcc фронт для Go. Но это конечно для очень больших фанатов Go как я понимаю.
   71.0.3578.9871.0.3578.98
+
-
edit
 

AleksejLt

опытный

tarasv> Первыми застрелятся манагеры от бюджетов и сроков ;)

Во многих случаях это было бы спасением для проекта...

tarasv> Есть gcc фронт для Go. Но это конечно для очень больших фанатов Go как я понимаю.

Это не про меня. Хотя я знаю людей, которые запихнули ОпенВПН в пакет Го :eek: Та ещё камасутра была :)
   66.066.0

RU Валентин_НН #18.02.2019 11:54  @Sandro#24.01.2019 07:54
+
+1
-
edit
 

Валентин_НН

литератор
★★☆
В.Н.>> я могу тупо размножить существующий код, но это неправильно и некрасиво.
Sandro> Размножать нужно не код, а данные :)
Sandro> Заводишь массив структур с параметрами на каждую точку и вызываешь на каждую функцию обновления.
Спасибо большое.
На выходных запилил-таки демоверсию будущей подсветки.
Теперь имею три независимых лампочки - каждая со своей скоростью розжига, длительностью горения, своим временем затухания.
всё воскресенье убил на разборки с кодом, но смог продраться через многочисленные нелепые ошибки :)

Но, блин косой, теперь надо к этой ардуине цеплять часы реального времени, чтоб подсветка ночью включалась не на полную катушку, а днем чтоб светила во все лопатки.
также хочется, чтоб при срабатывании сенсора срабатывала не только лампочка, непосредственно связанная с ним, но и вполнакала зажигались соседние - штоп посильнее "размазать" световое пятно.
В общем, начинаем погружение в прикладную радиоэлектронику :)
   1919
RU Валентин_НН #10.03.2019 19:30
+
-
edit
 

Валентин_НН

литератор
★★☆
а можно не совсем про ардуину?
я в этом шарпе пытался смастерить симулятор моей подсветки
кнопки сверху это сенсоры. ползунки снизу это имитаторы яркости соответствующего светодиода.
пока всё вообще никак не работает, т.к. только-только начал погружение в мир программирования
пока набросал вот такой имитатор движения ползунка - при нажатии на кнопку вызывается эта подпрограмма.
ползунок, как и предполагалось - поднимается и опускается пока не опускается (чтоб код поменьше был).
но почему не меняется значение в label4 ?
оно обновляется только после завершения этой подпрограммы.
почему так происходит?

public void UaD()
        {
            for (int i=0; i < 100; i++)
            {
                label4.Text = Convert.ToString(i);
                trackBar5.Value = i;
                Thread.Sleep(50);
            }
        }

   1919
Это сообщение редактировалось 10.03.2019 в 19:41
RU Валентин_НН #10.03.2019 19:38  @Валентин_НН#10.03.2019 19:30
+
-
edit
 

Валентин_НН

литератор
★★☆
В.Н.> .....
Прикреплённые файлы:
form.jpg (скачать) [829x531, 53 кБ]
 
 
   1919
RU GOGI #10.03.2019 19:46  @Валентин_НН#10.03.2019 19:30
+
-
edit
 

GOGI

координатор
★★★★

В.Н.> оно обновляется только после завершения этой подпрограммы.
В.Н.> почему так происходит?
Ты не даёшь времени обновиться тексту. Прибавляешь 1 и сразу останавливаешь поток. Используй таймер вместо thread.sleep ну или что-то типа form.refresh используй
   72.0.3626.12172.0.3626.121
RU Валентин_НН #10.03.2019 20:20  @GOGI#10.03.2019 19:46
+
-
edit
 

Валентин_НН

литератор
★★☆
В.Н.>> оно обновляется только после завершения этой подпрограммы.
В.Н.>> почему так происходит?
GOGI> Ты не даёшь времени обновиться тексту.
для меня немного странно это звучит.
а сколько надо дать времени процессору i7, чтоб он успел обновить текстовую метку?
а почему ползунок успевает переползти на новое место?

GOGI> Прибавляешь 1 и сразу останавливаешь поток. Используй таймер вместо thread.sleep ну или что-то типа form.refresh используй
this.Refresh(); помогло, но стало заметно невооруженным взглядом, как перерисовывается сетка.
Видать и впрямь проц слабоват - пора апгрейдить :)
   1919
Это сообщение редактировалось 10.03.2019 в 20:26
RU GOGI #10.03.2019 20:31  @Валентин_НН#10.03.2019 20:20
+
-
edit
 

GOGI

координатор
★★★★

В.Н.> а сколько надо дать времени процессору i7, чтоб он успел обновить текстовую метку?
Да не важно, сколько надо времени.
Программа занята вычислением следующего значения i. А на все остальное время ты замораживаешь программу пока не придёт время вычислить следующее i.
Меняй значения контролов по таймеру, а не через thread.sleep() и будет тебе счастье.
   72.0.3626.12172.0.3626.121
RU GOGI #11.03.2019 08:59  @Валентин_НН#10.03.2019 19:30
+
-
edit
 

GOGI

координатор
★★★★

В.Н.> пока набросал вот такой имитатор движения ползунка - при нажатии на кнопку вызывается эта подпрограмма.
Кстати, в c# оказывается тоже есть Application.DoEvents();
можешь его использовать вместо refresh, должно визуально выглядеть лучше.
   52.052.0
RU Sandro #11.03.2019 14:20  @Валентин_НН#10.03.2019 19:30
+
-
edit
 

Sandro
AXT

инженер вольнодумец
★☆
В.Н.> оно обновляется только после завершения этой подпрограммы.
В.Н.> почему так происходит?

Потому, что нажатия кнопок обрабатываются в потоке пользовательского интерфейса. Который ты заблокировал с помощью Sleep(). Вот он ничего и не делает. Поскольку парализован.

Вообще, обработчики событий пользовательского интерфейса должны возвращать управление как можно быстрее, это аксиома. Если нужен таймер — делай в отдельном потоке.

Create New Thread [C#]

This example shows how to create a new thread in .NET Framework. First, create a new ThreadStart delegate. The delegate points to a method that will be executed by the new thread. Pass this delegate as a parameter when creating a new Thread instance. Finally, call the Thread.Start method to run your method (in this case WorkThreadFunction) on background. The WorkThreadFunction could be defined as follows. By Jan Slama, 2007 //  www.csharp-examples.net
 
   52.952.9

GOGI

координатор
★★★★

Sandro> Если нужен таймер — делай в отдельном потоке.
Ты издеваешься? Человек вчера, наверное, первый раз VisualStudio запустил, а ты ему сразу: "Давай, пили многопоточность!"
Обычного таймера ему в его целях хватит за глаза. Тем более, он как бы моделирует работу контроллера
   52.052.0
RU Валентин_НН #11.03.2019 15:25  @Sandro#11.03.2019 14:20
+
-
edit
 

Валентин_НН

литератор
★★☆
В.Н.>> оно обновляется только после завершения этой подпрограммы.
В.Н.>> почему так происходит?
Sandro> Потому, что нажатия кнопок обрабатываются в потоке пользовательского интерфейса. Который ты заблокировал с помощью Sleep(). Вот он ничего и не делает. Поскольку парализован.
Я не защищаю свой метод - я знаю, что он неправильный.
И если-б не двигались ползунки, то я б был полностью удовлетворен. Но они-то почему-то двигаются!
Почему на передвижение ползунков у программы хватает сил, а на изменение текстовой метки - нет?

Sandro> Если нужен таймер — делай в отдельном потоке.
то, что надо организовывать потоки я уже допетрил, но ещё не знаю, как это делать :)
   1919
RU Валентин_НН #11.03.2019 15:27  @GOGI#11.03.2019 14:28
+
-
edit
 

Валентин_НН

литератор
★★☆
GOGI> Обычного таймера ему в его целях хватит за глаза. Тем более, он как бы моделирует работу контроллера

да, я догадался, что имитировать контроллер надо через таймер, но пока в голове не вырисовалось - кто кого через как должен вызывать. надо ещё эту тему в голове немного покрутить
   1919
RU Валентин_НН #11.03.2019 20:10  @GOGI#10.03.2019 20:31
+
-
edit
 

Валентин_НН

литератор
★★☆
GOGI> Меняй значения контролов по таймеру...

Едут!
Фрагмент из фильма "Формула любви"

в смысле - БЕГАЮТ!
пусть пока не мультипотоково. пусть ваще неоптимально и неправильно, но бегаютъ!

я прям доволен и горд собой :D
   1919
Это сообщение редактировалось 11.03.2019 в 21:31
RU Валентин_НН #12.03.2019 21:33  @Валентин_НН#11.03.2019 20:10
+
-
edit
 

Валентин_НН

литератор
★★☆
В.Н.>...
чёт я не смекаю.
В ардуине я перебирал циклом массив и из соответствующей ячейки массива брал номер пина светодиода, который зажигал или гасил в соответствии с вычислениями.
А здесь как мне в метод передать "номер" label`a, trackBar`a? ведь номер, который присутствует у них в имени это, собсно, вообще не число. Это просто символ из ихнего имени
   1919
CA tarasv #14.03.2019 05:22  @Валентин_НН#12.03.2019 21:33
+
-
edit
 

tarasv

опытный

В.Н.> А здесь как мне в метод передать "номер" label`a, trackBar`a? ведь номер, который присутствует у них в имени это, собсно, вообще не число. Это просто символ из ихнего имени

нет разницы массив чего - номеров пинов или TrackBar.

TrackBar[] trackBars = new TrackBar[9];
// array initialization
trackBars[0] = trackBar1;
// do it for all trackBarX.

и теперь trackBars можно перебирать в цикле.
   72.0.3626.12172.0.3626.121
RU Валентин_НН #14.03.2019 08:05  @tarasv#14.03.2019 05:22
+
-
edit
 

Валентин_НН

литератор
★★☆
tarasv> нет разницы массив чего - номеров пинов или TrackBar.
tarasv> TrackBar[] trackBars = new TrackBar[9];

оба-на
[b]TrackBar[][/b] trackBars = new TrackBar[9];
а вот это для меня явилось откровением. Я думал, что тут может быть только int, bool, string и т.п.
Ну, теперь всё ясно, как божий день :D
спасибо огромное

пс. не хочет движок выделить болдом первый ТракБар в тегах code :(

ппс. щас, на обеде, быстренько набросал черновой код - действительно работает. :)
Ещё раз респект
   1919
Это сообщение редактировалось 14.03.2019 в 12:39
Последние действия над темой
1 2 3 4 5 6 7

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru