14.03.2017, 19:45 | #51 |
Заглянувший
Регистрация: 15.01.2012
Адрес: Минск
Сообщений: 30
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 7
Поблагодарили 12 раз(а) в 7 сообщениях
:
0 за это сообщение 0 Всего Репутация: на пути к лучшему (12)
|
В общем вот мой код
Код:
void loop(void) { buttonState1 = digitalRead(buttonPin1); buttonState2 = digitalRead(buttonPin2); if (previousMillis1 == 0) { if (buttonState1 == HIGH) { digitalWrite(ledPin1, HIGH); myservo1.attach(28); if (ServoState1 == 45) { ServoState1 = 135; } else { ServoState1 = 45; } myservo1.write(ServoState1); tft.fillScreen(BLACK);tft.setCursor(1, 1); tft.setTextColor(BLUE); tft.println("Servo 1 " + String(ServoState1)); tft.setTextColor(RED); tft.println("Servo 2 " + String(ServoState2)); previousMillis1 = millis(); } } else { if (millis() - previousMillis1 > 750) { myservo1.detach(); digitalWrite(ledPin1, LOW); previousMillis1 = 0; } } if (previousMillis2 == 0) { if (buttonState2 == HIGH) { digitalWrite(ledPin2, HIGH); myservo1.attach(30); if (ServoState2 == 45) { ServoState2 = 135; } else { ServoState2 = 45; } myservo1.write(ServoState2); tft.fillScreen(BLACK);tft.setCursor(1, 1); tft.setTextColor(BLUE); tft.println("Servo 1 " + String(ServoState1)); tft.setTextColor(RED); tft.println("Servo 2 " + String(ServoState2)); previousMillis2 = millis(); } } else { if (millis() - previousMillis2> 750) { myservo2.detach(); digitalWrite(ledPin2, LOW); previousMillis2 = 0; } } } |
|
14.03.2017, 20:00 | #52 |
Пользователь
Регистрация: 23.06.2016
Адрес: Санкт-Петербург
Сообщений: 925
Сказал(а) 'не согласен(а)'!: 25
Сказали 'не согласен'! 11 раз(а) в 11 сообщениях
Сказал(а) спасибо: 1,321
Поблагодарили 606 раз(а) в 318 сообщениях
:
0 за это сообщение 0 Всего Репутация: - это имя известно всем (618)
|
Andrew78, Вы сделали тот-же delay(750), только в другом виде.
|
|
14.03.2017, 20:04 | #53 |
Заглянувший
Регистрация: 15.01.2012
Адрес: Минск
Сообщений: 30
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 7
Поблагодарили 12 раз(а) в 7 сообщениях
:
0 за это сообщение 0 Всего Репутация: на пути к лучшему (12)
|
AleksSF, в каком месте?
|
|
14.03.2017, 21:20 | #54 | |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
проверил. у меня все работает нормально, в разных комбинациях нажатий-отпусканий
|
|
|
14.03.2017, 21:25 | #55 |
Пользователь
Регистрация: 23.06.2016
Адрес: Санкт-Петербург
Сообщений: 925
Сказал(а) 'не согласен(а)'!: 25
Сказали 'не согласен'! 11 раз(а) в 11 сообщениях
Сказал(а) спасибо: 1,321
Поблагодарили 606 раз(а) в 318 сообщениях
:
0 за это сообщение 0 Всего Репутация: - это имя известно всем (618)
|
Не совсем правильно выразился. У вас идет управление движением сначала одной сервы, а потом второй. Нужно по состоянию кнопок установить флаги. Затем вызывать процедуру движения серв. И двигать их маленькими шашками, например по 1 градусу. Тогда будет видимость, что они двигаются параллельно. Я же писал уже в 32 посту. Почитайте, мгновенно все не приходит. Вот еще
http://techi-news.com/Arduino/Незави...водами_Таймеры |
|
Пользователь сказал cпасибо: |
14.03.2017, 21:51 | #56 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
и если вы через 750 миллисекунд не отпустили кнопку, то серва опять аттачится и цикл по ее "переводу" снова запускается...
Проверять нужно не текущее состояние кнопки, а факт изменения ее состояния. Антидребезг аппаратный? Экран для чего? Дебаг в консоль лучше выводить. Поставьте в начале loop вывод previousMillis1 и previousMillis2. Посмотрите, что выдает при нажатой кнопке. и, на всякий случай, надеюсь они у вас unsigned long? ---------- Сообщение добавлено в 21:39 ---------- Предыдущие сообщение было в 21:36 ---------- там так и сделано. вовсе не обязательно КМК, проблема именно в том, что фиксируется текущее состояние кнопки, а не факт его изменения. 750мс довольно маленькое время и цикл перевода два раза как минимум выполняется. ---------- Сообщение добавлено в 21:51 ---------- Предыдущие сообщение было в 21:39 ---------- Вообще - копипаст зло... Вы во втором обработчике цепляете серву на тотже объект, что и в первом myservo1 |
|
14.03.2017, 22:01 | #57 |
Заглянувший
Регистрация: 15.01.2012
Адрес: Минск
Сообщений: 30
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 7
Поблагодарили 12 раз(а) в 7 сообщениях
:
0 за это сообщение 0 Всего Репутация: на пути к лучшему (12)
|
BNSF9399, точно, спасибо. Сейчас соберу, проверю. Ну и это не копипаст, это час ночи.
|
|
14.03.2017, 22:11 | #58 |
Местный
Регистрация: 08.07.2015
Адрес: МО
Сообщений: 2,866
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 4,667
Поблагодарили 3,281 раз(а) в 1,177 сообщениях
:
0 за это сообщение 1 Всего Репутация: репутация неоспорима (3292)
|
Как это необязательно шажками? Есть какой-то другой способ кроме итераций, чтобы серва не двигалась как бешеная муха?
|
|
14.03.2017, 22:18 | #59 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
автор вопроса ничего не говорил про скорость - значит его устраивает дефолтная.
---------- Сообщение добавлено в 22:18 ---------- Предыдущие сообщение было в 22:14 ---------- а если у вас будет 8 серв, у вас восемь кусков одинакового кода, отличающегося только переменными, будет? посмотрите, как это у меня реализовано. загоняете переменные в массив и гоняете внутри loop их по циклу, с подстановкой в код нужных переменных. |
|
14.03.2017, 22:44 | #60 |
Заглянувший
Регистрация: 15.01.2012
Адрес: Минск
Сообщений: 30
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 7
Поблагодарили 12 раз(а) в 7 сообщениях
:
0 за это сообщение 0 Всего Репутация: на пути к лучшему (12)
|
BNSF9399, в массивы загоню, пока тренируюсь.
А с экраном я лопухнулся, думал что сенсорный заказал, хотел с экрана управлять. Теперь буду просто выводить инфу. |
|
14.03.2017, 22:49 | #61 |
Местный
Регистрация: 08.07.2015
Адрес: МО
Сообщений: 2,866
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 4,667
Поблагодарили 3,281 раз(а) в 1,177 сообщениях
:
0 за это сообщение 1 Всего Репутация: репутация неоспорима (3292)
|
Есть еще вариант. Взять готовый скетч от декодера, например на 17 серв (если он управляет сервами как надо), убрать все про DCC, а в проце-обработчике, которая перехватывает DCC-команду перевода стрелки, найти как автор скеча инициирует перевод стрелки и переделать на вызов кнопками. Отсечь лишнее, так сказать
|
|
14.03.2017, 23:03 | #62 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
есть готовый скетч для управления с кнопок, но маршрутами...
КМК, разобраться в чужом коде гораздо сложнее, тем более чтото отсекать от него. Задача примитивная. Нужно просто алгоритм действий продумать сразу, чтобы потом мучительно долго не переписывать весь код. что за сенсорный? если как у меня - Nextion, весьма сомнительное удовольствие. |
|
14.03.2017, 23:32 | #63 |
Местный
Регистрация: 08.07.2015
Адрес: МО
Сообщений: 2,866
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 4,667
Поблагодарили 3,281 раз(а) в 1,177 сообщениях
:
0 за это сообщение 1 Всего Репутация: репутация неоспорима (3292)
|
AlexSF дельные вещи пишет - "линейный" подход к программированию, как в посте 51, для мульти-серво декодера, да еще и с дисплеем - не есть надежный путь, имхо. Для ардуино-кода желателен/обязателен итерационный подход ко всему, от обработки кнопок(флаги) до вывода на дисплей(кусочно, раз там сериал).
Думаю "заказчик" вряд ли будет доволен, когда жмешь кнопку, но реакции нет - а такое будет вполне возможно с тем кодом, например. |
|
15.03.2017, 10:05 | #64 | |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
Цитата:
У Andrew78 - нет. Но я так понимаю, что камрад только разбирается с ардуиной (я тоже далеко не профи), постепенно поймет, что к чему и придет к правильному построению кода. |
|
|
15.03.2017, 18:43 | #65 | ||
Заглянувший
Регистрация: 15.01.2012
Адрес: Минск
Сообщений: 30
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 7
Поблагодарили 12 раз(а) в 7 сообщениях
:
0 за это сообщение 0 Всего Репутация: на пути к лучшему (12)
|
Цитата:
В общем, нашел в чем косяк. Во первых, копи-паст, а во вторых - жутко тормозной экран. Вот без экрана. Сейчас буду загонять в массив в функции ,что бы loop не загромождать. |
||
|
15.03.2017, 20:11 | #66 |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
нет, я имел ввиду какой хотели сенсорный. чего от него ожидали?
рисовать картинки на нем не выйдет. по крайней мере на Nextion на нем при помощи его же редактора для ПК, определяются некоторые области определенных типов, при тыке в которые он выдает в порт последовательность 16-ти битных данных, разобрав которую можно понять на какую область нажали или отпустили. Ну текст еще можно поменять. или фон |
|
18.03.2017, 22:33 | #67 |
Пользователь
Регистрация: 12.04.2013
Адрес: Санкт-Петербург
Сообщений: 343
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 1,850
Поблагодарили 450 раз(а) в 122 сообщениях
:
0 за это сообщение 0 Всего Репутация: - луч света в тёмном царстве (450)
|
Порекомендуйте,пожалуйста, медленные сервы. Программно сделать ещё не дорос, а с обычной сервой паровозик HOe просто сносит с поворотного круга.
|
|
18.03.2017, 23:05 | #68 |
Местный
Регистрация: 26.05.2008
Адрес: Москва
Сообщений: 4,514
Сказал(а) 'не согласен(а)'!: 24
Сказали 'не согласен'! 10 раз(а) в 10 сообщениях
Сказал(а) спасибо: 711
Поблагодарили 4,624 раз(а) в 2,055 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (4635)
|
ESUшные. Пользую для стрелок и ворот депо. Артикул 51805
http://www.esu.eu/produkte/switchpil...ntrieb-metall/ |
|
2 пользователя(ей) сказали cпасибо: |
18.03.2017, 23:44 | #69 |
Пользователь
Регистрация: 12.04.2013
Адрес: Санкт-Петербург
Сообщений: 343
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 1,850
Поблагодарили 450 раз(а) в 122 сообщениях
:
0 за это сообщение 0 Всего Репутация: - луч света в тёмном царстве (450)
|
|
|
19.03.2017, 00:02 | #70 |
Местный
Регистрация: 08.07.2015
Адрес: МО
Сообщений: 2,866
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 3 раз(а) в 2 сообщениях
Сказал(а) спасибо: 4,667
Поблагодарили 3,281 раз(а) в 1,177 сообщениях
:
0 за это сообщение 1 Всего Репутация: репутация неоспорима (3292)
|
Программу допилить вполне реально, выложите текущую версию и можно будет подумать. Вот только использовать серву чтобы позиционировать круг - тут есть сомнения в точности такого способа. Или там есть "уловители" для нужного положения?
|
|
19.03.2017, 02:18 | #71 | |
Пользователь
Регистрация: 12.04.2013
Адрес: Санкт-Петербург
Сообщений: 343
Сказал(а) 'не согласен(а)'!: 0
Сказали 'не согласен'! 1 раз в 1 сообщении
Сказал(а) спасибо: 1,850
Поблагодарили 450 раз(а) в 122 сообщениях
:
0 за это сообщение 0 Всего Репутация: - луч света в тёмном царстве (450)
|
Цитата:
|
|
|
19.03.2017, 02:57 | #72 | |
Местный
Регистрация: 06.03.2014
Адрес: Москва
Сообщений: 1,741
Сказал(а) 'не согласен(а)'!: 5
Сказали 'не согласен'! 9 раз(а) в 7 сообщениях
Сказал(а) спасибо: 553
Поблагодарили 2,794 раз(а) в 755 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (2791)
|
посмотрите, как реализован поворот в моем скетче.
серва поворачивается на один градус за интервал времени заданный для нее в массиве. в моем примере - 10 миллисекунд. Таким образом, поворот на 180 градусов осуществляется за приблизительно за 2 секунды. Поставьте 100 и получите 18 секунд |
|
|
Пользователь сказал cпасибо: |
19.03.2017, 09:59 | #73 |
Местный
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,693
Сказал(а) 'не согласен(а)'!: 10
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,942
Поблагодарили 4,844 раз(а) в 1,822 сообщениях
:
0 за это сообщение 1 Всего Репутация: репутация неоспорима (5137)
|
Я их покупал на HK: https://hobbyking.com/ru_ru/hobbykin...1sec-6-8g.html
P.S. Однако мне кажется, что раньше они стоили дешевле, т.е. разница, по сравнению с обычными, была меньше.
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB С приветом из подземки!!! |
|
Пользователь сказал cпасибо: |
19.03.2017, 10:25 | #74 |
Местный
Регистрация: 26.05.2008
Адрес: Москва
Сообщений: 4,514
Сказал(а) 'не согласен(а)'!: 24
Сказали 'не согласен'! 10 раз(а) в 10 сообщениях
Сказал(а) спасибо: 711
Поблагодарили 4,624 раз(а) в 2,055 сообщениях
:
0 за это сообщение 0 Всего Репутация: репутация неоспорима (4635)
|
|
|
19.03.2017, 11:19 | #75 |
Местный
Регистрация: 06.03.2009
Адрес: Питер
Сообщений: 3,693
Сказал(а) 'не согласен(а)'!: 10
Сказали 'не согласен'! 0 раз(а) в 0 сообщениях
Сказал(а) спасибо: 6,942
Поблагодарили 4,844 раз(а) в 1,822 сообщениях
:
0 за это сообщение 1 Всего Репутация: репутация неоспорима (5137)
|
__________________
HO, цифра, OpenDCC, S-88N, OpenCar, BiDiB С приветом из подземки!!! |
|
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Простой блок управления освещением аналогового макета на базе Ардуино Нано | morshamenn | Arduino | 13 | 10.12.2022 22:51 |
Пульт аналогового управления макетом | SergiyW | Электрика и DCC | 46 | 10.05.2016 00:00 |
Управление траверсером | Crown | Электрика и DCC | 34 | 13.11.2012 22:35 |
Управление на ик лучах | GOGA | Электрика и DCC | 38 | 29.12.2008 00:56 |
Цифровое управление | Илья | Электрика и DCC | 26 | 15.07.2008 19:52 |