#26 2016-08-13 17:07:23

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 876

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

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

Неактивний

#27 2016-08-13 20:17:46

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

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

Вы ничего там не поняли. Как определить кнопка нажата или не нажата. Просто уровень вывода. Как определить вот только что произошло нажатие, отжатие . Понятно что померить уровень до и после нажатия с учетом дребезга. А вот "танцы с бубном" начинаются если надо создать функцию которая определяет. 0 - кнопка не нажата, 1 кнопка нажата была не долго. и 2 кнопка нажата была долго. И при наличии дребезга.  Так что  last_millis это не последний millis , а последний  millis когда кнопка была не нажата . Точнее последнее измерение, которое показало, что кнопка была не нажата. И это зафиксировано в last_millis. Разумеется можно было назвать переменную "последний millis когда была кнопка не нажата и близкое к будущему нажатию кнопки". Чтобы по разнице и опредилить, что кнопка долго или коротко была нажата.

Остання редакція qwone (2016-08-13 20:19:05)

Неактивний

#28 2016-08-14 09:05:07

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

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

Ох и любит народ из простого делать сложное. Прям, тащатся от собственной заумности!
Обхожусь без millis-ов. Короткое нажатие определяю в момент отжатия, длинное - по продолжительности нажатия, отжатие не волнует.

Неактивний

#29 2016-08-14 09:32:59

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

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

Green пише:

Ох и любит народ из простого делать сложное. Прям, тащатся от собственной заумности!
Обхожусь без millis-ов. Короткое нажатие определяю в момент отжатия, длинное - по продолжительности нажатия, отжатие не волнует.

Ну да. Сказал бы прямо. Для трепа на форуме вам рабочий код не надо. Мол обхожусь без него.

Неактивний

#30 2016-08-14 10:13:48

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

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

Да уж. Ход Ваших мыслей такой же как и Ваш "рабочий" код.

Неактивний

#31 2016-08-14 10:59:11

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

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

Ну да. Я шизофенией не страдаю. Как знаю, как думаю, так и пишу. Или у вас ваши мысли по алгоритму и ваш код различаются. Хотя если у вас нет кода, тогда и разницы нет. Логично.

Неактивний

#32 2016-08-15 14:26:04

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

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

Я где то тут давал пример для кнопки. Обычное нажатие, минимум-минимор. Для Вашего случая додумаете сами.

Неактивний

#33 2016-08-16 14:07:04

NoName
Customer
З Київ
Зареєстрований: 2014-07-08
Повідомлень: 1,446

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

Green CODE:

loop()
{
  delay(1);
  if (KeyExe())
    counter++;
}

bool KeyExe()
{
  static bool key_pressed;
  static uint8_t debounce_timer;
  
  if (key_pressed != !digitalRead(KEY)) {
    key_pressed = !key_pressed;
    debounce_timer = DEBOUNCE_TIME;
  }
  else if (debounce_timer && !--debounce_timer && key_pressed)
    return true;
  return false;
}

неплохой пример, но не хватает neural network, для определения, нажатие короткое или длинное  )

Неактивний

#34 2016-08-16 15:06:56

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

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

Мм, neural network... Хорошо бы! Но у нас по старинке. Ещё порядка +10 строк.))

Неактивний

#35 2016-08-16 18:59:52

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

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

С использование энкодера и маленькой хитрости, можно вообще обойтись без длиного нажатия.

Неактивний

#36 2016-08-16 19:56:38

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

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

Жаль что не у всех энкодеры. Как и маленькие хитрости. А варианты всегда есть. С одной кнопкой можно и кодом морзе разговаривать. Всего лишь только выучить нужно...

Остання редакція Green (2016-08-16 19:58:28)

Неактивний

#37 2016-08-16 20:32:12

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

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

Мне проще. Я знаю.)))

Неактивний

#38 2016-08-19 22:23:02

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

Нет слов...бля, бля.... Ну кто ни будь, скажите  qwone что без обработчика прерывания его код  ( за исключением хорошего оформления) яйца выеденного не стоит  sad . Он (код) сам  по себе работать возможно и работает ( возможно прекрасно) но вставить его в другой код, он будет "тупить" или вызывать такое  раздражение (словами не передать), проверил, опыт есть smile работы с энкодером. Вообще то ТС не плохо было прежде чем изобретать "велосипед" посмотреть код библиотеки для энкодера и анотацию к ней lol

Остання редакція Nefreemen (2016-08-19 22:45:51)

Неактивний

#39 2016-08-19 22:57:13

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

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

"День мы сидим, другой день сидим, а на третий день Орлиный Глаз заметил, что у сарая нет одной стены."
А для тех кто сидит в сарае повторю. Старые библиотеки и старый стиль программирования тут не работает. Здесь немного другой принцип.

Неактивний

#40 2016-08-20 10:54:49

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

qwone пише:

"День мы сидим, другой день сидим, а на третий день Орлиный Глаз заметил, что у сарая нет одной стены."
А для тех кто сидит в сарае повторю. Старые библиотеки и старый стиль программирования тут не работает. Здесь немного другой принцип.

Угу тут все сидят не то что в сарае а в танке smile , и я в том числе...Вроде не видел "этот немного другой принцип" который по Вашему мнению должен создать видимость "одновременного" (по крайней мере поочередного опроса) выполнения каких то "структур" какого то "структурированного кода" lol . Ржу не могу lol держите меня трое,  в 8 битовой архитектуре АРМа (без ДМА и пр.) без "оси" и на wiring (а значит без доступа к адресному пространству ОЗУ и флэш) пытаться создать "псевдомногопоточность"  lol . "Пупок" в АРМа не развяжется? И еще раз, без обработчика аппаратного прерывания все это только теоретические изыскания и 0 практического применения.

Остання редакція Nefreemen (2016-08-20 11:16:24)

Неактивний

#41 2016-08-20 11:09:25

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

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

Что бы гнуть ложку , надо поверить что Нет никакой ложки.
Ну вот структура дающая "псевдомногопоточность". Но ведь вы не увидете , потому что вы сказали в 8 битовой архитектуре АРМа (без ДМА и пр.) без "оси" пытаться создать "псевдомногопоточность"  lol . "Пупок" в АРМа не развяжется?

uint8_t non_stop_program1(uint16_t span) {
  static uint32_t future = 0;
  if (millis()<future) return 0;
  future += span;
  return 1;
}
uint8_t non_stop_program2(uint16_t span) {
  static uint32_t future = 0;
  if (millis()<future) return 0;
  future += span;
  return 1;
}
uint8_t non_stop_program3(uint16_t span) {
  static uint32_t future = 0;
  if (millis()<future) return 0;
  future += span;
  return 1;
}
void setup() {
  Serial.begin(9600);
}
void loop() {
  if (non_stop_program1(500))  {
// Здесь вы организовываете вывод на экран. Вызывается раз в 0.5 сек
    Serial.println("knok");
 }
  if (non_stop_program2(200))  {
// Здесь вы организовываете ввод с клавиатуры. Вызывается раз в 0.2 сек
  }
  if (non_stop_program3(100))  {
// Здесь сама работа устройства не зависимая от вашего ввода и показа на экран. Вызывается раз в 0.1 сек(может быть по желанию другим)
   }
}
 

Неактивний

#42 2016-08-20 12:24:07

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

Ну вот "опять за рыбу деньги". Вы хотите что бы я принимал дискретность выполнения последовательности за "многопоточность"? И еще раз, без организации одновременного (непрерывного) параллельного хотя бы одного потока, процесса ( на аппаратном уровне, а архитектура АVR это не позволяет ) это все г...
Если идет две или три параллельные дороги и Вы будете переходить с одной на другую и при этом идти только вперед то это вовсе не значит что Вы пройдете все три дороги одновременно, неужели не понятно? В тот момент когда Вы будете находится на первой дороге на второй  будем "яма" (произойдет событие) а вернувшись через uint8_t non_stop_program3(uint16_t span) на нее Вы это событие уже не увидите. И для того что бы создать видимость присутствия на обоих дорогах Ваше uint16_t span должно стремится к 0. Что практически опять же не возможно а тем более при увеличении количества дорог  lol. Ограниченное количество прерываний (как внешних так и внутренних и Ваш принципиальный отказ вообще их использовать) AVR сводит на нет всю затею, тем более wiring не дает возможность работы напрямую с чтением и сбросом флагов прерываний (чего то в Ваше коде ASMa я не видел, который присутствует почти во всех библиотеках как Вы выразились "старого стиля" big_smile ). И называть хорошие добротные библиотеки "старым стилем" это один из библейских грехов smile .  Тем более доказывать что "изобретенный самокат" (еще раз, возможно, код и хорош и идея оригинальна, хотя не нова, но пользы 0 ) вместо давно известного велосипеда lol это круто, просто из "сарая" не всем видно lol .

Остання редакція Nefreemen (2016-08-20 13:48:53)

Неактивний

#43 2016-08-20 13:52:24

Nefreemen
Учасник
З Киев
Зареєстрований: 2015-12-19
Повідомлень: 716

Re: Программа с кнопкой (короткое нажатие и длиное нажатие)

Гы  big_smile . Поскольку по мере возможности ковыряю ARM (STM32) то везде вместо  АВР писал АРМ, поэтому извините big_smile.

Неактивний

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

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

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