Как программно ограничить число нажатий кнопки?

VictorArx

★★✩✩✩✩✩
22 Мар 2021
528
86
что значит: "остановить через потенциометр"?
Делал код с потенциометром, при вращении потенца серва останавливается(потенциометр посередине) и потом можно в обе стороны управлять. Мне нужно через две кнопки. Вот код.
C++:
int SENSOR_PIN  = A0;         //  Номер Pin к которому подключен диод
    //  Переменная в которой хранится уровень яркости (От 0 до 254)

int LED = 11 ;


int sensorValue = 0;





void setup()  {
  pinMode(SENSOR_PIN, INPUT); // Порт 11 (led) будет работать как Выход.
pinMode(LED, OUTPUT);

}
 


void loop() {
sensorValue = analogRead(SENSOR_PIN);
sensorValue = constrain(sensorValue, 0, 1023);
sensorValue = map(sensorValue, 0, 1023, 0, 5);

switch (sensorValue) {
case 1:

digitalWrite(LED,HIGH);


break;


case 2:
analogWrite(LED, 150);





break;

case 3:
analogWrite(LED, 50);



break;
case 4:
analogWrite(LED, 5);
break;





}
}
 

bort707

★★★★★★✩
21 Сен 2020
3,066
914
Делал код с потенциометром, при вращении потенца серва останавливается(потенциометр посередине) и потом можно в обе стороны управлять. Мне нужно через две кнопки. Вот код.
"братва, нас ждет вторая серия" (с) ?

Будем опять в муках рожать кривой и неказистый скетч?

Попробуйте сами написать новый код на основе того, что вы уже узнали в этой ветке. Подсказка - для его написания опять фактически достаточно двух строк brightness++ и brightness-- - с небольшими добавлениями.
 

poty

★★★★★★✩
19 Фев 2020
3,241
944
@VictorArx, приведённый код по функционалу вообще ничем не отличается от управления кнопками. Тот же грубый "прикид". Если показана только идея (хотя, не понимаю, почему бы не привести тот код, который работает в реальности?), то ту же самую функциональность "остановка" можно реализовать с помощью переключения чувствительности кнопок (например, применить энкодер с кнопкой, переключающей чувствительность).
Но, повторяю, будет возможность останавливать привод и запускать его в нужную сторону с разными скоростями. Рассчитать по этим данным положение сервопривода не получится, как и выставить на нужное (даже начальное) положение. Об этом Вы как-то совсем не говорите.
И, я всё же советую Вам написать чёткое ТЗ. Уверен, что всё вышеописанное гораздо легче написать в рамках ООП, чем подгонять результат под не очень большой арсенал известных Вам средств самовыражения в программировании.
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
528
86
Вам написать чёткое ТЗ. Уверен, что всё вышеописанное гораздо легче написать в рамках ООП
В рамках ООП не знаю ,что это такое, по простому нужно было регулировать яркость светика с помощью двух кнопок и потенциометра.

@VictorArx, Что значит "не будет"? Мы уже билеты купили! :ROFLMAO:
Ну раз уже билеты куплены покажу заключительную серию. Мой рабоче-крестьянский код написан малограмотно, с кучей ненужных функций и через заднее крыльцо, но он г-да программисты работает. Может моя ардуинка, когда хавает код, матерится, но его исполняет.
 

bort707

★★★★★★✩
21 Сен 2020
3,066
914
Ну раз уже билеты куплены покажу заключительную серию.
может все-таки не стоит?
Если вас все устраивает - ну и пользуйтесь. А то выложите - сами получите в ответ кучу негатива, а нам придется ваш код разбирать и исправлять...
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
528
86
нам придется ваш код разбирать и исправлять.
Зачем исправлять, если всё работает. Лучшее враг хорошего. У меня 25 строчек, Вы сделаете 5 и Чё? Мой код мне на данном этапе понятен, а дальше видно будет. Программистом мне не быть. Меня терзают смутные сомнения, что многие( за исключением одного человека) не столько хотели мне помочь, сколько показать, кто круче.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,267
1,303
Москва
Мой код мне на данном этапе понятен, а дальше видно будет.
Вот ! хорошая фраза! Прям точная. Обычно в "дальше" все и упирается, так как код в примерах и созданный на их основе обычно не учитывает это самое "дальше". А там и начинаются настоящие затыки.
В лЮбом случае удачи!
 
Изменено:

VictorArx

★★✩✩✩✩✩
22 Мар 2021
528
86
Лбом или любом? Так дальше Вы же поможете разбираться или я не прав? Я не против критики и хотел выложить скетч, так отговаривают.
ЗЫ. Если некоторые считают ниже своего достоинства помогать чайникам, вроде меня , я не в претензии.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,267
1,303
Москва
Что бы помогать вопрос должен быть изложен правильно. Иной раз после нескольких неудачных попыток понять что хочет человек уже просто забиваешь на тему.
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
528
86
Что бы помогать вопрос должен быть изложен правильно
Согласен. Только не могу сказать это ООП, не обучен, поэтому и говорю по народному на великом и могучем языке. Примерно поняли , что я хотел. Не поленитесь и напишите пример, как выглядит регулировка яркости на ООП.
Мне помогали и с критикой и насмешками, вместе собрал все данные и нарисовал код по своему, потому что ещё не освоил прерывания и , как выносить метод за пределы функции loop. На выходных буду изучать и перепишу код.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,267
1,303
Москва
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
528
86
Прочитал. Оказывается и Вас в своё время зубры критиковали
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,267
1,303
Москва
Разница в том что я знаю и понимаю для чего я делают так, а зубры видят (видели к тому моменту) половину результата. Это раз. А потом вариантов достижения одного и того же результата масса.
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
528
86
А потом вариантов достижения одного и того же результата масса.
Конечно. У меня получилась топорная работа, но нигде в интернете я не нашёл одновременного управления яркостью светодиода кнопками и потенцем. Изучу прерывания и как внести отдельную функцию, сделаю более презентабельный вид.
 

poty

★★★★★★✩
19 Фев 2020
3,241
944
нигде в интернете я не нашёл одновременного управления яркостью светодиода кнопками и потенцем
Возможно, в том виде, как Вы это замышляете - нет (не отговариваю, но считаю такой подход абсолютно необоснованным). Но, допустим, управление яркостью LED подсветки с помощью кнопок и фоторезистора есть прямо на этом сайте в нескольких конструкциях.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,267
1,303
Москва
Я уже писал выше, что потенциометр всегда выдает то значение , на которое он установлен, + - дребезг. Кнопка на это значение не может влиять. Мой вопрос о том как вы будете отличать движение потенциомтера Вы проигнорировали. Пример: выставили потенциметром уровень 3, а кнопкой нажали вверх, на 4. Яркость поменялась. Как понять, что опять не надо менять яркость на 3 ? Ведь потенциометр стоит на 3!
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
528
86
Вовсе не проигнорировал, а не совсем понимал, пока Вы не объяснили сейчас. Получается моя затея не имеет решения? Что хочу добавить(прошу прощения если кого утомил), в моём скетче в определённом положении потенца, не знаю , как происходит с научной точки зрения, но работает,всё регулируется кнопками. Сейчас написал код. который мне посоветовали на форуме, правильный , грамотный, но не работает. Если не против его могу показать, он короткий.

C++:
int led = 11;         //  Номер Pin к которому подключен диод
//  Переменная в которой хранится уровень яркости (От 0 до 254)
//  Номер Pin к которому подключена кнопка
#include "GyverButton.h"

#define BTN1 2                // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define BTN2 3        // кнопка подключена сюда (PIN --- КНОПКА --- GND)

GButton butt1(BTN1);
GButton butt2(BTN2);

uint8_t bright = 0 ;

int pot = A0;
void setup()  {

  Serial.begin(9600);

  pinMode(led, OUTPUT); // Порт 11 (led) будет работать как Выход.
  pinMode(pot, INPUT);

}

void loop()  { // Этот цикл будет выполняться бесконечное количество раз.
  changeBright();

  butt1.tick();  // обязательная функция отработки. Должна постоянно опрашиваться
  butt2.tick();

  if (butt1.isClick() && bright < 255)

  {

    bright++;
  }

  if (butt2.isClick() && bright != 0  )


  {

    bright--;
  }
  {
    bright = map(analogRead(pot), 0, 1023, 0, 255);

  }

}

void changeBright()
{

  Serial.print("changing bright to ");
  Serial.println(bright);
  analogWrite(led, bright);
}
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,267
1,303
Москва
Отличная иллюстрация к тому что я говорил. Как бы не нажимались кнопки на сл. цикл значение нажатия сотрется значением потенциометра. Яркость будет меняться только потенциометром.
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
528
86
Вот мой рабочий, рождённый в муках.
C++:
int led = 11;         //  Номер Pin к которому подключен диод
//  Переменная в которой хранится уровень яркости (От 0 до 254)
//  Номер Pin к которому подключена кнопка
#include "GyverButton.h"

#define BTN1 2                // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define BTN2 3        // кнопка подключена сюда (PIN --- КНОПКА --- GND)

GButton butt1(BTN1);
GButton butt2(BTN2);
uint8_t value = 0 ;
int pot = A0;
int bright = 0;

void setup()  {

  Serial.begin(9600);

  pinMode(led, OUTPUT); // Порт 11 (led) будет работать как Выход.

  pinMode(pot, INPUT);
}
void loop()  { // Этот цикл будет выполняться бесконечное количество раз.

  bright = analogRead(pot);
  bright = map(bright, 0, 1023, 0, 5);

  butt1.tick();  // обязательная функция отработки. Должна постоянно опрашиваться
  butt2.tick();
  if (butt1.isClick() && value < 5)
  {
    value ++;
  }
  if (butt2.isClick() && value != 0  )
  {
    value--;
  }

  switch (value) {
    case 0:    // your hand is on the sensor
      Serial.println("dark");
      analogWrite(led, 0);
      break;
    case 1:    // your hand is close to the sensor
      Serial.println("bright");
      analogWrite(led, 50 );
      break;
    case 2:    // your hand is a few inches from the sensor
      Serial.println("medium");
      analogWrite(led, 100 );
      break;
    case 3:    // your hand is nowhere near the sensor
      Serial.println("dim");
      analogWrite(led, 150);
      break;
    case 4:    // your hand is nowhere near the sensor
      Serial.println("pim");
      analogWrite(led, 200);
      break;
    case 5:    // your hand is nowhere near the sensor
      Serial.println("pim");
      analogWrite(led, 255);
      break;
  }

  switch (bright) {
    case 0:    // your hand is on the sensor
      Serial.println("dark");
      analogWrite(led, 0);
      break;
    case 1:    // your hand is close to the sensor
      Serial.println("bright");
      analogWrite(led, 50 );
      break;
    case 2:    // your hand is a few inches from the sensor
      Serial.println("medium");
      analogWrite(led, 100 );
      break;
    case 3:    // your hand is nowhere near the sensor
      Serial.println("dim");
      analogWrite(led, 150);
      break;
    case 4:    // your hand is nowhere near the sensor
      Serial.println("pim");
      analogWrite(led, 200);
      break;
    case 5:    // your hand is nowhere near the sensor
      Serial.println("pim");
      analogWrite(led, 255);
      break;

  }

}
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,267
1,303
Москва
Тоже не должен работать. Попробуйте сдвинуть потенциометр куда нибудь поярче и кнопками сделать потеменее.
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
528
86
Спасибо, что хоть не ругаете. Поясняю, Вы правы, что не во всех положениях потенца действуют кнопки во всём диапазоне. При мах яркости не можно уменьшить кнопкой. Мне нужно только одно положение потенциометра, при котором кнопки работают. Такое положение я могу выставить.
При других положениях потенциометра, кнопки действуют в ограниченном диапазоне.
 

VictorArx

★★✩✩✩✩✩
22 Мар 2021
528
86
Дружище, при всём к Вам уважении, бля буду регулируют. Соберите у себя и проверте. Попробую видео сварганить.