Поворот сервопривода при нажатии кнопки

Chizazavr
Offline
Зарегистрирован: 24.09.2018

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

Кнопка находится в программе на телефоне(RoboRemo, если кому интересно), сигнал передается через блютуз передатчик HC-05, сервопривод mg995, сама платформа Arduino Mega 2560. Буду премного благодарен, если кто-то уже имеет решение данной проблемы, всем спасибо!

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Chizazavr пишет:

никак не могу написать код 

Не можете - закажите в специальном разделе.

Chizazavr
Offline
Зарегистрирован: 24.09.2018

Мне нужна просто подсказка как делать, алгоритм по которому можно все это реализовать, а не полностью написанный код

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Chizazavr пишет:

Мне нужна просто подсказка как делать, алгоритм по которому можно все это реализовать, а не полностью написанный код

Смотри, алгоритм:

1. У тебя есть кнопка;

2. У кнопки два состояния - нажата и НЕ нажата;

3. Есть система, включающая, помимо кнопки, сервопривод;

4. У системы есть различные состояния, в нашем случае: "движемся" и "не движемся";

5. Помимо этого - есть и другие вводные, например, скорость углового перемещения вала сервы в радианах за единицу времени, ну и - пороговые значения углов, на которые может двигаться серва (если это только не серва свободного вращения).

По итогу - получаем вот такой алгоритм:

СостояниеСистемы состояние = СостояниеСистемы.Покой;
Кнопка кнопка;
Серва серва;

void loop()
{
		switch(состояние)
		{
			case СостояниеСистемы.Покой:
			{
				if(кнопка.Нажата())
				{
					состояние = СостояниеСистемы.Движение;
				}
			}
			break;
			
			case СостояниеСистемы.Движение:
			{
				if(кнопка.НеНажата())
				{
					состояние = СостояниеСистемы.Покой;
				}
				else
				{
					// тут двигаем сервой, как хочется.
				}
				
			}
			break;
		}
}

 

bwn
Offline
Зарегистрирован: 25.08.2014

Учитывая, что кнопка на экране телефона, рекомендую начать с п.3 и далее, для начала, с физической кнопкой.)))

MacSim
Offline
Зарегистрирован: 28.11.2012

смотри обработчик нажания и отпускания кнопки

нажата- пока удерживается в нажатом шлем команду круитить

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

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

проверяйте с переодичностьясостояное флага, крутите

по приходу команды отпускания кнопки скидывайте флаг

но опять же надо писать часть кода телефонную - обработчик нажатия и отпускания кнопки, и отслеживать наличие связи по бт

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

 

MacSim
Offline
Зарегистрирован: 28.11.2012

и... вашего кода мы так и не увидели, не могу - написал вот что и  и в строке №ххх не получаю... и сделайте за меня разные вещи