Ви не увійшли.
Гы . Поскольку по мере возможности ковыряю ARM (STM32) то везде вместо АВР писал АРМ, поэтому извините .
Ну вот "опять за рыбу деньги". Вы хотите что бы я принимал дискретность выполнения последовательности за "многопоточность"? И еще раз, без организации одновременного (непрерывного) параллельного хотя бы одного потока, процесса ( на аппаратном уровне, а архитектура АVR это не позволяет ) это все г...
Если идет две или три параллельные дороги и Вы будете переходить с одной на другую и при этом идти только вперед то это вовсе не значит что Вы пройдете все три дороги одновременно, неужели не понятно? В тот момент когда Вы будете находится на первой дороге на второй будем "яма" (произойдет событие) а вернувшись через uint8_t non_stop_program3(uint16_t span) на нее Вы это событие уже не увидите. И для того что бы создать видимость присутствия на обоих дорогах Ваше uint16_t span должно стремится к 0. Что практически опять же не возможно а тем более при увеличении количества дорог . Ограниченное количество прерываний (как внешних так и внутренних и Ваш принципиальный отказ вообще их использовать) AVR сводит на нет всю затею, тем более wiring не дает возможность работы напрямую с чтением и сбросом флагов прерываний (чего то в Ваше коде ASMa я не видел, который присутствует почти во всех библиотеках как Вы выразились "старого стиля" ). И называть хорошие добротные библиотеки "старым стилем" это один из библейских грехов . Тем более доказывать что "изобретенный самокат" (еще раз, возможно, код и хорош и идея оригинальна, хотя не нова, но пользы 0 ) вместо давно известного велосипеда это круто, просто из "сарая" не всем видно .
Что бы гнуть ложку , надо поверить что Нет никакой ложки.
Ну вот структура дающая "псевдомногопоточность". Но ведь вы не увидете , потому что вы сказали в 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 сек(может быть по желанию другим)
}
}
"День мы сидим, другой день сидим, а на третий день Орлиный Глаз заметил, что у сарая нет одной стены."
А для тех кто сидит в сарае повторю. Старые библиотеки и старый стиль программирования тут не работает. Здесь немного другой принцип.
Угу тут все сидят не то что в сарае а в танке , и я в том числе...Вроде не видел "этот немного другой принцип" который по Вашему мнению должен создать видимость "одновременного" (по крайней мере поочередного опроса) выполнения каких то "структур" какого то "структурированного кода" . Ржу не могу держите меня трое, в 8 битовой архитектуре АРМа (без ДМА и пр.) без "оси" и на wiring (а значит без доступа к адресному пространству ОЗУ и флэш) пытаться создать "псевдомногопоточность" . "Пупок" в АРМа не развяжется? И еще раз, без обработчика аппаратного прерывания все это только теоретические изыскания и 0 практического применения.
"День мы сидим, другой день сидим, а на третий день Орлиный Глаз заметил, что у сарая нет одной стены."
А для тех кто сидит в сарае повторю. Старые библиотеки и старый стиль программирования тут не работает. Здесь немного другой принцип.
Нет слов...бля, бля.... Ну кто ни будь, скажите qwone что без обработчика прерывания его код ( за исключением хорошего оформления) яйца выеденного не стоит . Он (код) сам по себе работать возможно и работает ( возможно прекрасно) но вставить его в другой код, он будет "тупить" или вызывать такое раздражение (словами не передать), проверил, опыт есть работы с энкодером. Вообще то ТС не плохо было прежде чем изобретать "велосипед" посмотреть код библиотеки для энкодера и анотацию к ней
Мне проще. Я знаю.)))
Жаль что не у всех энкодеры. Как и маленькие хитрости. А варианты всегда есть. С одной кнопкой можно и кодом морзе разговаривать. Всего лишь только выучить нужно...
С использование энкодера и маленькой хитрости, можно вообще обойтись без длиного нажатия.
Мм, neural network... Хорошо бы! Но у нас по старинке. Ещё порядка +10 строк.))
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, для определения, нажатие короткое или длинное )
Я где то тут давал пример для кнопки. Обычное нажатие, минимум-минимор. Для Вашего случая додумаете сами.
Ну да. Я шизофенией не страдаю. Как знаю, как думаю, так и пишу. Или у вас ваши мысли по алгоритму и ваш код различаются. Хотя если у вас нет кода, тогда и разницы нет. Логично.
Да уж. Ход Ваших мыслей такой же как и Ваш "рабочий" код.
Ох и любит народ из простого делать сложное. Прям, тащатся от собственной заумности!
Обхожусь без millis-ов. Короткое нажатие определяю в момент отжатия, длинное - по продолжительности нажатия, отжатие не волнует.
Ну да. Сказал бы прямо. Для трепа на форуме вам рабочий код не надо. Мол обхожусь без него.