Ви не увійшли.
Вы ничего там не поняли. Как определить кнопка нажата или не нажата. Просто уровень вывода. Как определить вот только что произошло нажатие, отжатие . Понятно что померить уровень до и после нажатия с учетом дребезга. А вот "танцы с бубном" начинаются если надо создать функцию которая определяет. 0 - кнопка не нажата, 1 кнопка нажата была не долго. и 2 кнопка нажата была долго. И при наличии дребезга. Так что last_millis это не последний millis , а последний millis когда кнопка была не нажата . Точнее последнее измерение, которое показало, что кнопка была не нажата. И это зафиксировано в last_millis. Разумеется можно было назвать переменную "последний millis когда была кнопка не нажата и близкое к будущему нажатию кнопки". Чтобы по разнице и опредилить, что кнопка долго или коротко была нажата.
Остання редакція qwone (2016-08-13 20:19:05)
Неактивний
Ох и любит народ из простого делать сложное. Прям, тащатся от собственной заумности!
Обхожусь без millis-ов. Короткое нажатие определяю в момент отжатия, длинное - по продолжительности нажатия, отжатие не волнует.
Неактивний
Ох и любит народ из простого делать сложное. Прям, тащатся от собственной заумности!
Обхожусь без millis-ов. Короткое нажатие определяю в момент отжатия, длинное - по продолжительности нажатия, отжатие не волнует.
Ну да. Сказал бы прямо. Для трепа на форуме вам рабочий код не надо. Мол обхожусь без него.
Неактивний
Ну да. Я шизофенией не страдаю. Как знаю, как думаю, так и пишу. Или у вас ваши мысли по алгоритму и ваш код различаются. Хотя если у вас нет кода, тогда и разницы нет. Логично.
Неактивний
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, для определения, нажатие короткое или длинное )
Неактивний
Жаль что не у всех энкодеры. Как и маленькие хитрости. А варианты всегда есть. С одной кнопкой можно и кодом морзе разговаривать. Всего лишь только выучить нужно...
Остання редакція Green (2016-08-16 19:58:28)
Неактивний
Нет слов...бля, бля.... Ну кто ни будь, скажите qwone что без обработчика прерывания его код ( за исключением хорошего оформления) яйца выеденного не стоит . Он (код) сам по себе работать возможно и работает ( возможно прекрасно) но вставить его в другой код, он будет "тупить" или вызывать такое раздражение (словами не передать), проверил, опыт есть работы с энкодером. Вообще то ТС не плохо было прежде чем изобретать "велосипед" посмотреть код библиотеки для энкодера и анотацию к ней
Остання редакція Nefreemen (2016-08-19 22:45:51)
Неактивний
"День мы сидим, другой день сидим, а на третий день Орлиный Глаз заметил, что у сарая нет одной стены."
А для тех кто сидит в сарае повторю. Старые библиотеки и старый стиль программирования тут не работает. Здесь немного другой принцип.
Неактивний
"День мы сидим, другой день сидим, а на третий день Орлиный Глаз заметил, что у сарая нет одной стены."
А для тех кто сидит в сарае повторю. Старые библиотеки и старый стиль программирования тут не работает. Здесь немного другой принцип.
Угу тут все сидят не то что в сарае а в танке , и я в том числе...Вроде не видел "этот немного другой принцип" который по Вашему мнению должен создать видимость "одновременного" (по крайней мере поочередного опроса) выполнения каких то "структур" какого то "структурированного кода" . Ржу не могу держите меня трое, в 8 битовой архитектуре АРМа (без ДМА и пр.) без "оси" и на wiring (а значит без доступа к адресному пространству ОЗУ и флэш) пытаться создать "псевдомногопоточность" . "Пупок" в АРМа не развяжется? И еще раз, без обработчика аппаратного прерывания все это только теоретические изыскания и 0 практического применения.
Остання редакція Nefreemen (2016-08-20 11:16:24)
Неактивний
Что бы гнуть ложку , надо поверить что Нет никакой ложки.
Ну вот структура дающая "псевдомногопоточность". Но ведь вы не увидете , потому что вы сказали в 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 сек(может быть по желанию другим)
}
}
Неактивний
Ну вот "опять за рыбу деньги". Вы хотите что бы я принимал дискретность выполнения последовательности за "многопоточность"? И еще раз, без организации одновременного (непрерывного) параллельного хотя бы одного потока, процесса ( на аппаратном уровне, а архитектура АVR это не позволяет ) это все г...
Если идет две или три параллельные дороги и Вы будете переходить с одной на другую и при этом идти только вперед то это вовсе не значит что Вы пройдете все три дороги одновременно, неужели не понятно? В тот момент когда Вы будете находится на первой дороге на второй будем "яма" (произойдет событие) а вернувшись через uint8_t non_stop_program3(uint16_t span) на нее Вы это событие уже не увидите. И для того что бы создать видимость присутствия на обоих дорогах Ваше uint16_t span должно стремится к 0. Что практически опять же не возможно а тем более при увеличении количества дорог . Ограниченное количество прерываний (как внешних так и внутренних и Ваш принципиальный отказ вообще их использовать) AVR сводит на нет всю затею, тем более wiring не дает возможность работы напрямую с чтением и сбросом флагов прерываний (чего то в Ваше коде ASMa я не видел, который присутствует почти во всех библиотеках как Вы выразились "старого стиля" ). И называть хорошие добротные библиотеки "старым стилем" это один из библейских грехов . Тем более доказывать что "изобретенный самокат" (еще раз, возможно, код и хорош и идея оригинальна, хотя не нова, но пользы 0 ) вместо давно известного велосипеда это круто, просто из "сарая" не всем видно .
Остання редакція Nefreemen (2016-08-20 13:48:53)
Неактивний