#1 2018-02-15 12:31:59

vesta
Учасник
Зареєстрований: 2018-02-15
Повідомлень: 1

счетчик нажатий

помогите пожалуйста
счетчик нажатия кнопки. прямой счет и обратный счет. должен вести простой счет от 0 до 10. кнопка (-) для коррекции счета если нечаянно ввел неправильную цифру
только начинаю программировать. под конец совсем запутался..

const int button = 2; //  кнопка (+)
const int button1 = 3; //кнопка (-)
int count = 0;         // переменная для подсчета нажатий на кнопку
int button_old = 1; // предыдущее значение
int count1=0;
void setup() {

  Serial.begin(9600);

  pinMode(button, INPUT_PULLUP);
  pinMode(button1, INPUT_PULLUP);
}
void loop() {
  if ((digitalRead(button)==LOW)&&(button_old==1))
  {
    count = count + 1;
    count1=count;
    Serial.println(count);
  }
  if ((digitalRead(button1)==LOW)&&(button_old==1))
  {
    count1 = count -1;
   
    Serial.println(count1);
  }
  button_old = digitalRead(button);
  delay(10);
  if(count==10)
  {count=0;}
}

Неактивний

#2 2018-02-15 12:44:49

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: счетчик нажатий

У кнопок есть дребезг. Наиболее простое решение - делать задержку между опросами и очередное нажатие фиксировать после отжатия. А так просто увеличивайте/уменьшайте счётчик.

Неактивний

#3 2018-02-15 18:55:14

qwone
Учасник
Зареєстрований: 2016-07-25
Повідомлень: 143

Re: счетчик нажатий

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

const int buttonPin = 2; //  кнопка (+)
const int button1Pin = 3; //кнопка (-)
bool button_old = 1; // предыдущее значение button0
bool button1_old = 1; // предыдущее значение button1
int count = 0;         // переменная для подсчета нажатий на кнопку
void setup() {
  Serial.begin(9600);
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(button1Pin, INPUT_PULLUP);
}
void loop() {
  bool button = digitalRead(buttonPin);
  if (!button && button_old) {
    button_old = 0;
    delay(10);// ждем чтобы дребезг прошел
    count = count + 1;
    if (count >= 10) count = 0;
    Serial.println(count);
  }
  if (button && !button_old) {
    button_old = 1;
    delay(10);// ждем чтобы дребезг прошел
  }

  bool button1 = digitalRead(button1Pin);
  if (!button1 && button1_old) {
    button1_old = 0;
    delay(10);// ждем чтобы дребезг прошел
    count = count - 1;
    if (count < 0) count = 10;
    Serial.println(count);
  }
  if (button1 && !button1_old) {
    button1_old = 1;
    delay(10);// ждем чтобы дребезг прошел
  }
}
/*Скетч использует 2436 байт (7%) памяти устройства. Всего доступно 30720 байт.
  Глобальные переменные используют 190 байт (9%) динамической памяти, оставляя 1858 байт для локальных переменных. Максимум: 2048 байт.
*/

Неактивний

#4 2018-02-16 06:38:15

vsta
Гість

Re: счетчик нажатий

с дребезгом проблем нет. могу не программным путем. простая импульсоподавляющая цепь или триггер.

#5 2018-02-16 11:05:06

Green
Учасник
Зареєстрований: 2015-11-08
Повідомлень: 593

Re: счетчик нажатий

Можно и совсем просто. По дурному.)

const int buttonPin  = 2;     // кнопка (+)
const int button1Pin = 3;     // кнопка (-)
const int repeat_time = 500;  // длительность автоповтора
int count;                    // счётчик нажатий


void setup()
{
  Serial.begin(9600);
  pinMode(buttonPin, INPUT_PULLUP);
  pinMode(button1Pin, INPUT_PULLUP);
}

void loop()
{
  if (!digitalRead(buttonPin)) {
    if (++count >= 10) 
      count = 0;
    Serial.println(count);
    delay(repeat_time);
  }
  if (!digitalRead(button1Pin)) {
    if (--count < 0)
      count = 9;
    Serial.println(count);
    delay(repeat_time);
  }
}

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму