Изменение шим по нажатию кнопки.

VoltX
VoltX аватар
Offline
Зарегистрирован: 21.02.2017

Помогите пжалста допилить код.

Алгоритм такой, при подаче питания на мк, начинает плавно расти шим, при отжатой кнопке до 100%, а при нажатой до 50%. Это всё работает.



Нужно дополнительно , что бы при достижении 100% и нажатии кнопки, шим плавно снижался до 50%, а при отпускании кнопки плавно рос обратно до 100.

Всё это дело будет в аттини13.

 

byte E1=1; // Управление мощностью – подключение к 1 выходу
unsigned long StartTimer; // счетчик время для плавного пуска
int StartTimeStep=10; // Интервал изменения мощности двигателя, в мс
int StartPowerStep=1; // Один шаг изменения мощности двигателя
int motorPower; // Мощность двигателя
int button_pin = 4; // пин кнопки

void setup()
{
pinMode(button_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
pinMode (E1, OUTPUT); // Задаем работу соответствующих пинов в качестве выходов
motorPower=0; // Начальная мощность - 0
}

void loop()
{
if (digitalRead(button_pin) == LOW) {
if (motorPower<255) // Увеличиваем скорость до тех пор, пока не достигнем максимума
if ((millis()-StartTimer)>= StartTimeStep) // Проверяем, сколько прошло с последнего изменения скорости
// если больше, чем заданный интервал – увеличим скорость еще на один шаг
{
motorPower+= StartPowerStep; // увеличение скорости
analogWrite (E1, motorPower); // На выводе ENABLE управляющий сигнал с новой скоростью
StartTimer=millis(); // Начало нового шага
}
}
else
{
if (motorPower<125) // Увеличиваем скорость до тех пор, пока не достигнем максимума
if ((millis()-StartTimer)>= StartTimeStep) // Проверяем, сколько прошло с последнего изменения скорости
// если больше, чем заданный интервал – увеличим скорость еще на один шаг
{
motorPower+= StartPowerStep; // увеличение скорости
analogWrite (E1, motorPower); // На выводе ENABLE управляющий сигнал с новой скоростью
StartTimer=millis(); // Начало нового шага
}
}
}

 

b707
Offline
Зарегистрирован: 26.05.2017

не увидел описания, в чем у вас проблема

VoltX
VoltX аватар
Offline
Зарегистрирован: 21.02.2017

Нужно дополнительно , что бы при достижении 100% и нажатии кнопки, шим плавно снижался до 50%, а при отпускании кнопки плавно рос обратно до 100. 

Проблема, что после выхода шим на 100%, не возможно зажатием кнопки снизить шим до 50% и обратно до 100.

b707
Offline
Зарегистрирован: 26.05.2017

VoltX пишет:

Проблема, что после выхода шим на 100%, не возможно зажатием кнопки снизить шим до 50% и обратно до 100.

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

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

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

VoltX пишет:

Проблема, что после выхода шим на 100%, не возможно зажатием кнопки снизить шим до 50% и обратно до 100.

Ну, раз кнопкой "не возможно", придумайте какой-нибудь другой способ "снижения шим" - без кнопки.

sadman41
Offline
Зарегистрирован: 19.10.2016

Не вижу ни одного фрагмента, где величина ШИМ снижается. Полагаю, что нужно их дописать.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

...а девкой был бы краше...
 

byte E1 = 1; // Управление мощностью – подключение к 1 выходу
unsigned long StartTimer; // счетчик время для плавного пуска
int StartTimeStep = 10; // Интервал изменения мощности двигателя, в мс
int StartPowerStep = 1; // Один шаг изменения мощности двигателя
int motorPower; // Мощность двигателя
int button_pin = 4; // пин кнопки

void setup()
{
  pinMode(button_pin, INPUT); // Инициализируем цифровой вход/выход в режиме входа.
  pinMode (E1, OUTPUT); // Задаем работу соответствующих пинов в качестве выходов
  motorPower = 0; // Начальная мощность - 0
}

void loop()
{
  if (digitalRead(button_pin) == LOW) {
    if (motorPower < 255) // Увеличиваем скорость до тех пор, пока не достигнем максимума
      if ((millis() - StartTimer) >= StartTimeStep) // Проверяем, сколько прошло с последнего изменения скорости
        // если больше, чем заданный интервал – увеличим скорость еще на один шаг
      {
        motorPower += StartPowerStep; // увеличение скорости
        analogWrite (E1, motorPower); // На выводе ENABLE управляющий сигнал с новой скоростью
        StartTimer = millis(); // Начало нового шага
      }
  }
  else
  {
    if (motorPower < 125) // Увеличиваем скорость до тех пор, пока не достигнем максимума
      if ((millis() - StartTimer) >= StartTimeStep) // Проверяем, сколько прошло с последнего изменения скорости
        // если больше, чем заданный интервал – увеличим скорость еще на один шаг
      {
        motorPower += StartPowerStep; // увеличение скорости
        analogWrite (E1, motorPower); // На выводе ENABLE управляющий сигнал с новой скоростью
        StartTimer = millis(); // Начало нового шага
      }
  }
}

 

b707
Offline
Зарегистрирован: 26.05.2017

ua6em - могу только повторить то. что уже сказано ТС - "не вижу в коде ни одного намека на снижение ШИМ"

mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Обломали мальчика, старпёры! А он так старался...

VoltX
VoltX аватар
Offline
Зарегистрирован: 21.02.2017

Сделал уже как требовалось.

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

sadman41
Offline
Зарегистрирован: 19.10.2016

Без оскорблений не умеешь что ли, на форумах общаться?

b707
Offline
Зарегистрирован: 26.05.2017

VoltX пишет:

Сделал уже как требовалось.


ну вот - только спросил, и уже все сделал. Форум то работает!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

VoltX пишет:

...не возможно зажатием кнопки...

VoltX пишет:

Сделал уже как требовалось.

Вот и верь после этого людям...

 

PS. А форум-то помог, если сумел сделать невозможное.

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

VoltX пишет:

Сделал уже как требовалось.

... как псы ...

Это такое своеобразное "спасибо" за то, что проблема решилась?