Size: a a a

Анархическая электроника

2020 August 06

СT

Сергій Tolmeros... in Анархическая электроника
200+200 = 400 мс - одно мограние
секунда ещё не прошла
мы выходим из wait()
и скорее всего снова в неё попадаем
секунда ещё не прошла, time_a ещё равняется 2

ещё раз моргаем
+400 мс = 800 мс - два моргания

выходим, снова попадаем
секунда ещё не прошла

включаем, ждём 200 мс
секунда уже прошла, но мы внутри условия
по этому выключаем
ждём 200 мс,
это уже 1200 мс,
выходим из wait()
источник

S

Soad in Анархическая электроника
точно..
источник

S

Soad in Анархическая электроника
спасибо!
источник

СT

Сергій Tolmeros... in Анархическая электроника
вам надо
bool time_a_not_executed = false;

по прерыванию таймера когда насчитали time_a до переполнения ставим time_a_not_executed=true

добавляем этот флаг в условие в wait()

а при входе в условие делаем
time_a_not_executed=false
источник

СT

Сергій Tolmeros... in Анархическая электроника
но это какие-то костыли
источник

S

Soad in Анархическая электроника
да нет. я просто в теле таймера буду использовать увеличение переменных с индексами не по условию time==500, а точно так же вместе с основной переменной
источник

S

Soad in Анархическая электроника
у меня один "такт" таймера настроен примерно на 2мс. соответственно переменная равная 500 будет давать примерно 1 секунду
источник

СT

Сергій Tolmeros... in Анархическая электроника
я бы вывод инфы на светодиоды вынес бы в "службу" отдельную.
и делал бы из кода
blink(200,200,LED_GREEN,1);
и управлял бы светодиодом по прерыванию таймера.
такая себе недо-многозадачность
источник

S

Soad in Анархическая электроника
возможно мне это пока трудно понять. Но у меня эти 2 светодиода будут много разной информации давать. Разная частота моргания, разное количество и т.д. поэтому в каждой функции это будет прописано отдельно.
Вообще для меня уже прорыв того, что я весь этот код не в теле основного цикла пишу, а догадался разделить на функции)
источник

S

Soad in Анархическая электроника
вчера вот осваивал ацп. сегодня запустил, правда уже на меге8.
Дошел до того, что нужно обрабатывать нажатия кнопок. Причем разная длительность - разный результат
источник

S

Soad in Анархическая электроника
отсюда и появились эти переменные с разными индексами
источник

S

Soad in Анархическая электроника
Если направите в правильное русло, буду благодарен. но прошу не удивляйтесь - я так учусь)
источник

A

Al in Анархическая электроника
Soad
вчера вот осваивал ацп. сегодня запустил, правда уже на меге8.
Дошел до того, что нужно обрабатывать нажатия кнопок. Причем разная длительность - разный результат
Боюсь представить что там будет в результате.
источник

S

Soad in Анархическая электроника
Al
Боюсь представить что там будет в результате.
Изобретаю велосипед, которым бьют)
источник

СT

Сергій Tolmeros... in Анархическая электроника
Хотя бы вот так
static inline void turn_on_green() {
 GRN=1;
}

static inline void turn_off_green() {
 GRN=0;
}

void blink_green(unsigned int delay1, unsigned int delay2, unsigned char times) {
 for (unsigned char i=0; i<times; i++) {
    turn_on_green();
    delay_ms(delay1);
    turn_off_green();
    delay_ms(delay2);
 }
}
источник

СT

Сергій Tolmeros... in Анархическая электроника
и в коде использовать  turn_on_green(), turn_off_green(), blink_green()
источник

СT

Сергій Tolmeros... in Анархическая электроника
и так же со вторым светодиодом
источник

СT

Сергій Tolmeros... in Анархическая электроника
но если вам нужные сложные перемигивания зелёный красный - это либо отдельные функции ещё к этим, либо надо делать фоновым процессом
источник

СT

Сергій Tolmeros... in Анархическая электроника
я мог бы достать свой старый код, где у меня была динамическая индикация фоновым процессом организована, но там код на asm >.<
источник

A

Al in Анархическая электроника
Сергій Tolmeros
и в коде использовать  turn_on_green(), turn_off_green(), blink_green()
Ну такое себе извращение. Нормально делаешь функцию led() и передашь в неё помигать зелёным с таким интервалом
источник