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

TynuK
Offline
Зарегистрирован: 05.02.2017

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

T.Rook
Offline
Зарегистрирован: 05.03.2016

TynuK пишет:

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

В приклееной теме "Работа с кнопками. В помощь новичку" (вторая сверху в раздела Программирование) как раз все описано.

TynuK
Offline
Зарегистрирован: 05.02.2017

да читал я там все страницы прочитал, от туда и взял как подключить

ладно спасибо всем за помощь

Sanyaba
Sanyaba аватар
Offline
Зарегистрирован: 27.07.2015

Прошелся по ветке и понял че ни"рена не понял..

Если нажали кнопку на пине 2 то дальше просто в коде игнорируйте все кнопки на пине 1 или сбрасывайте значение в исходное - типо ничего не нажималось.

* по поводу пинов цифровых и налоговых тут подробнее, особенно дойдите до обзаца:

Примечание:
Аналоговые входы могут использоваться как цифровые входы/выходы, при обращении к ним по номерам с 14 (аналоговый вход 0) по 19 (аналоговый вход 5) "

Кстати я часто использую несколько кнопок на одном аналоговом пине, зачастую две вот так:

Logik
Offline
Зарегистрирован: 05.08.2014

Ну таким подходом только две.

А в общем "тупик" удался, потупили знатно. 

Для простого подключения нескольких, пусть четырех, кнопок с возможностю распознания одновременного нажатия надо 5 резисторов. Возможны два подхода, с паралельным или последовательным включением. Рассмотрим последовательное включение. Резистор с сопротивлением >> остальных, он токозадающий,  включен между плюсом и вводом. Цепочка из остальных 4-х резисторов соединенных последовательно подключается от ввода к земле. Каждая кнопка закорачивает один из резисторов. Их номиналы близки к  R*2^N. В нашем случае при токозадающем 1000 Ом остальные резисторы например 10, 20, 40 и 80 Ом. 

При отсутствии нажатия ток через них 4,3 мА а с напряжение на входе 0,658В а с АЦП 133 ед. При нажатии кнопки коротящей резистор 10 Ом напряжение падает до 0,615а с АЦП 125 ед. итд В таблице не нажатые кнопки отмечены 1.

 

5 1000 80 40 20 10       R Uвх АЦП
    0 0 0 0 0 0 0
          1 10 0,049505 10
        1   20 0,098039 20
        1 1 30 0,145631 29
      1     40 0,192308 39
      1   1 50 0,238095 48
      1 1   60 0,283019 57
      1 1 1 70 0,327103 66
    1       80 0,37037 75
    1     1 90 0,412844 84
    1   1   100 0,454545 93
    1   1 1 110 0,495495 101
    1 1     120 0,535714 109
    1 1   1 130 0,575221 117
    1 1 1   140 0,614035 125
    1 1 1 1 150 0,652174 133

Очевидно что:

1. Код с АЦП уникальный для каждой комбинации и с допустаточными допусками.

2. Подключить сильно много кнопок так не удастся.

3. Игнорировать нажатие любой кнопки удобно после определения ей состояния с помощю масок и логических операций

4. Я несколько наивен, пытаясь утверждать что чтото очевидно в ветке где тупят;)

TynuK
Offline
Зарегистрирован: 05.02.2017

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

TynuK
Offline
Зарегистрирован: 05.02.2017

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

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

Logik пишет:

Возможны два подхода, с паралельным или последовательным включением. 

Если взять кнопки типа (on)-on, то есть и третий варирант - классический R2R. По-моему, очень удобно. Вксь диапазон используется, больше кнопок влещет. И резисторы нужны только двух номиналов (я часто использую один номинал, просто где надо 2R -  две штуки ставлю).

На самом деле, куда ни кинь - всюду клин. Последовательно - проблемы с номинальным рядом, т.к. там важно именно вдвое уменьшать каждый раз. А R2R - такой проблемы нет, зато кнопки вдвое дороже обчных тактовых.

TynuK
Offline
Зарегистрирован: 05.02.2017

а что за кнопки такие "(on)-on"? у меня щас всего 1 на 10 кило-ом,  и 4 по 1, вроде нормально работает, время пройдет посмотим все ли нормально будет, а то какой нибудь дребезг еще появится

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

TynuK пишет:

а что за кнопки такие "(on)-on"? 

Обычная тактовая кнопка (она же "(off)-on") имеет одну пару контактов. В нормальном состоянии контакты разомкнуты, в нажатом - замкнуты.

Кнопка "(on)-on" имеет две пары контактов.  В нормальном состоянии первая пара замкнута, а вторая - разомкнута, в нажатом - наоборот - первая разомкнута, а вторая - замкнута.

TynuK пишет:

а что за кнопки такие "(on)-on"? у меня щас всего 1 на 10 кило-ом,  

У Вас кнопка на 10 кОм? Вы жжёте! :)

TynuK
Offline
Зарегистрирован: 05.02.2017

а теперь понятно, ну у меня простые кнопки 2 контакта разомкнуты, нет не кнопка а сигнал с землей через 10 кОм,а кнопки по 1 кОм, то есть 1 кнопка через 1кОм,2 через 2кОм, и тд.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

TynuK, это называется РЕЗИСТОР.

JasKo
Offline
Зарегистрирован: 21.11.2015

TynuK пишет:

Привет, требуется помощь  точнее совет

Возможно ли сделать так, включение на аналоговых кнопках, а отключение на цмфровой кнопке, имеено той которая нажата на аналоговом?

Как я понимаю, благодаря Вашему умению формулировать, тут еще долго будут мучить Вас попытками наставить на путь истинный, но так как у меня кончился "попкорн" предлагаю Вам решение.

Подключить "аналоговые кнопки" к  входу A0 например по схеме http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku#comment-21466

Подключить "цифровые кнопки" к входам 2-5 и применить вот этот код (для понятности в коментариях использовал Вашу терминологию)


#define BUTTON_NONE   0
#define BUTTON_1  1
#define BUTTON_2  2
#define BUTTON_3  3
#define BUTTON_4  4
#define BUTTON_5  5

int getAnalogButton()  // Функция возвращает значение соответсвующее нажатой "аналоговой кнопке" 
{
  int buttonValue = analogRead(0); // считываем значения с аналогового входа(A0) 
  if (buttonValue < 100) {
    return BUTTON_1;  
  }
  else if (buttonValue < 200) {
    return BUTTON_2;
  }
  else if (buttonValue < 400){
    return BUTTON_3;
  }
  else if (buttonValue < 600){
    return BUTTON_4;
  }
  else if (buttonValue < 800){
    return BUTTON_5;
  }
  return BUTTON_NONE;
}

class MyButton { // класс для определения "цифровой кнопки"
    uint8_t _buttonPin;
    uint8_t State = 0;
    uint8_t lastButtonState = HIGH;
    unsigned long lastDebounceTime = 0;
  public:
    MyButton(uint8_t pin) {
      _buttonPin = pin;
      pinMode(_buttonPin, INPUT_PULLUP);
    }
    byte Read(void) { // метод для определения нажатия "цифровой кнопки"
      uint8_t reading = digitalRead(_buttonPin);
      if (State == 0 && reading == !lastButtonState) {
        lastDebounceTime = millis();
        State = 1;
      } else  if (State == 1 && reading == LOW && lastButtonState == LOW && (millis() - lastDebounceTime) > 5) {
        State = 0;
        return 1;
      }
      lastButtonState = reading;
      return 0;
    }
};

#define DIG_BUTTON1 2
#define DIG_BUTTON2 3
#define DIG_BUTTON3 4
#define DIG_BUTTON4 5

MyButton dig_button_1(DIG_BUTTON1); // создаем объект "цифровая кнопка"
MyButton dig_button_2(DIG_BUTTON2);
MyButton dig_button_3(DIG_BUTTON3);
MyButton dig_button_4(DIG_BUTTON4);

bool button_flag[4] = {false,false,false,false};  //флаги "аналоговых кнопок"
int analog_button;
void setup(){
  
}

void loop() {
  analog_button = getAnalogButton(); // определяем нажатую "аналоговую кнопку"
  switch (analog_button)
  { // взводим соответсвующий флаг в массиве
  case BUTTON_1: // 
    button_flag[0] = true;
    break;
  case BUTTON_2:
    button_flag[1] = true;
    break;
  case BUTTON_3:
    button_flag[2] = true;
    break;
  case BUTTON_4:
    button_flag[0] = true;
    break;
  case BUTTON_5:
    break;
  }
  // проверяем нажатие "цифровых кнопок" и сбрасываем соответсвующие флаги
  if (dig_button_1.Read()) button_flag[0] = false;
  if (dig_button_1.Read()) button_flag[1] = false;
  if (dig_button_1.Read()) button_flag[2] = false;
  if (dig_button_1.Read()) button_flag[3] = false;
  // делаем что то если какие то флаги остались взведенными
  if (button_flag[0]) { // здесь будет твой код для выполнения если был взведен флаг 0
    }
  if (button_flag[1]) { // здесь будет твой код для выполнения если был взведен флаг 1
    }
  if (button_flag[2]) { // здесь будет твой код для выполнения если был взведен флаг 2
    }
  if (button_flag[4]) { // здесь будет твой код для выполнения если был взведен флаг 3
    }
}

 

 

TynuK
Offline
Зарегистрирован: 05.02.2017

спасибо, но уже оставил как есть, если перестанет работать то буду переделывать. Я правильно понял

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

а как работает? нажал и отпустил или надо держать чтоб работало ( на аналоговых кнопках)?

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

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

TynuK, ты в курсе, что аналоговые порты они одновременно и цифровые? и юзать их можно как цифровые?

TynuK
Offline
Зарегистрирован: 05.02.2017

да вкурсе, читал про это  на этом же сайте

T.Rook
Offline
Зарегистрирован: 05.03.2016

 

[оффтоп]

JasKo пишет:

 но так как у меня кончился "попкорн" предлагаю Вам решение.

+ за попытку, но Вы не прониклись  - ибо нужно игнорировать лишь одну "аналоговую" кнопу по нажатой цифровой,   воспринимая другие ( и не смущайтесь схемой подключения "аналоговых кноп" т.к. аппетит приходит во время еды, а ТЗ изменяется во премя приемки) :)

[/оффтоп]

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

TynuK пишет:

да вкурсе, читал про это  на этом же сайте

ок. зачем ты не используешь цифровые пины?

TynuK
Offline
Зарегистрирован: 05.02.2017

а я то думал что не понятно объясняю тут, что меня понять не могут что именно я хочу сделать,а теперь вижу что это не так

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

TynuK пишет:

а я то думал что не понятно объясняю тут, что меня понять не могут что именно я хочу сделать,а теперь вижу что это не так

Перевожу: Это не я "непонятно" объясняю, просто тут народ "непонятливый" собрался. :)

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

TynuK пишет:

а я то думал что не понятно объясняю тут, что меня понять не могут что именно я хочу сделать,а теперь вижу что это не так

переведи с российского наречия русского языка на литературный русский, пожалуйста.

TynuK
Offline
Зарегистрирован: 05.02.2017

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

TynuK
Offline
Зарегистрирован: 05.02.2017

могучий русский язык....

Logik
Offline
Зарегистрирован: 05.08.2014

ЕвгенийП пишет:

На самом деле, куда ни кинь - всюду клин.

Согласен. Потому я никогда аналоговые кнопки не использую. А если выводов нехватает просто смотрю задумчиво на схему и думаю впаралель чего  повесить кнопку с резистором и иногда диодом чтоб не мешало никому. Самое благодатное место - паралельные шины, светодиоды, медленная периферия и пр.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

TynuK пишет:

могучий русский язык....

это не оправдание твоему бурятскому суржику.

JasKo
Offline
Зарегистрирован: 21.11.2015

TynuK пишет:

...

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

Прав - нажал и отпустил.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

TynuK пишет:

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

не существует аналоговых кнопок - тебя обманули

существует аналоговый кнопочный джойстик

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Почему народ подключает одна кнопка один вывод? Потому что народ банально не умеет программировать. Вот и для вас подключение букета  кнопок на один аналоговый вывод стало неподьемной задачей. А ведь есть еще варианты, когда целую клавиатуру подключают на один вывод и главное это еще и работает. Вот только код для новичков ну очень не понятен.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

qwone пишет:

Почему народ подключает одна кнопка один вывод? Потому что народ банально не умеет программировать.

подключи 50 кнопок на один пин - ты же умеешь программировать?

TynuK
Offline
Зарегистрирован: 05.02.2017

просто у меня больше портов не оставалось кроме как аналоговых, а надо было еще 2 кнопки туда запилить, вот и решил 4 которые есть перенести на (аналог), и хотелось переделать логику "где одна кнопка говорит включить,адругая выключить", ведь куда лучьше было бы если одну просто начинать игнорить ивыключать включенное ею действие?

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

TynuK пишет:

просто у меня больше портов не оставалось кроме как аналоговых, а надо было еще 2 кнопки туда запилить, вот и решил 4 которые есть перенести на (аналог), и хотелось переделать логику "где одна кнопка говорит включить,адругая выключить", ведь куда лучьше было бы если одну просто начинать игнорить ивыключать включенное ею действие?

электрическую схему опубликуй.

TynuK
Offline
Зарегистрирован: 05.02.2017

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

TynuK
Offline
Зарегистрирован: 05.02.2017

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

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Клапауций 112 пишет:

подключи 50 кнопок на один пин - ты же умеешь программировать?

Недавно матрицу 4х4 на аналоговый вешал.  http://easyelectronics.ru/multipleksirovanie.html

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

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

qwone пишет:

Клапауций 112 пишет:

подключи 50 кнопок на один пин - ты же умеешь программировать?

Недавно матрицу 4х4 на аналоговый вешал. 

16 != 50

*слив засчитан - отправляйся в питушатню балаболов к Логику.

Logik
Offline
Зарегистрирован: 05.08.2014

Так он матрицы не признаёт. Сколько кнопок- столько пинов, сколько пинов - столько экземпляров класса  велосипед )))

А матрицы только спицы ламают ;)

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Клапауций 112 пишет:

16 != 50

*слив засчитан - отправляйся в питушатню балаболов к Логику.

Ну извини с резистивной матрицей я не работал еще. http://easyelectronics.ru/multipleksirovanie.html

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Logik пишет:

Так он матрицы не признаёт. Сколько кнопок- столько пинов, сколько пинов - столько экземпляров класса  велосипед )))

А матрицы только спицы ламают ;)

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

Logik
Offline
Зарегистрирован: 05.08.2014

Чурка! Матрицу стробировать нада, а твой код толька маструбировать умеет )))

ПС. Я ж писал, что он он вобще про матрицы нибельмеса  не знает. Щас он загуглит и чего отпишет по впечатлениям с википедии.

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Logik пишет:

Чурка! Матрицу стробировать нада, а твой код толька маструбировать умеет )))

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

TynuK
Offline
Зарегистрирован: 05.02.2017

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

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

TynuK пишет:

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

как всё просто оказалось! - расходимся.

TynuK
Offline
Зарегистрирован: 05.02.2017

так тебе давно уже пора идти,а то МАМА наругает

Logik
Offline
Зарегистрирован: 05.08.2014

Он не зеленеет, то его природный цвет лица. И пиарит свое дерьмо вставляя ссылку на тему везде где может.

Нафига тот ЖК экран на ht1621b если шикарные графические ОЛЕДы дешевле грибов.

TynuK
Offline
Зарегистрирован: 05.02.2017

да он просто валялся без дела вот я и решил попробовать, ради опыта да и интересно просто, попробую просто температуру на него вывести с ds18b20. Да щас каких только нету и с сенсером и всякие разные, но пока у меня побывало LSD1612(вроде так), матрица 4x4 (4 штуки) щас погоду на работе показывает, и еще max7219 только не матрица, ну и этот есть, опыт дело наживное  ;)

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

Logik пишет:

И пиарит свое дерьмо вставляя ссылку на тему везде где может.

пиаром моего кода занимешься ты. и, да - везде, где я не запретил.

TynuK
Offline
Зарегистрирован: 05.02.2017

читал где то, чт оможно емкость конденсаторов мерить ардуиной, вот и попробую на него выводить и пусть будет в арсенале, записать на attyni 85 (которая тоже валяется без дела) и будет "прибор"

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

TynuK пишет:

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

Точно! Она и есть. Схемы, инструкции и прочие даташиты - это для чайников!

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

TynuK пишет:

читал где то, чт оможно емкость конденсаторов мерить ардуиной

А то! Ещё как можно! Могу дать бесплатный мастер класс.

Смотрите на картинку:

Длина равна 1 Мега
Радиус = 1 Нано.

Значит, любой, кто учился в школе, сразу скажет. что ёмкость равна 


2πNanoMega.
TynuK
Offline
Зарегистрирован: 05.02.2017

про инструкции и даташиты это уже отдельная тема, а схемы у всех разные при то если сам делаешь то можнои без схемы если, не трудно запомнить куда подключить 6 реле,8 кнопок и одну лампочку. Спасибо,но отвас мне мастер-класс не нужен.