Проблема всего в 10 раз больше, чем вы ожидаете.Если вы хотите решить это самостоятельно, прежде всего, оставьте клавиатуру в покое и попытайтесь разработать материал.
По сути, у вас есть только одна информация о лампе: включена или выключена.Этого недостаточно для таких сложных операций, как проверка количества вспышек за указанный промежуток времени.Вы должны создать производные .
Прежде всего, вам нужно установить какой-нибудь счетчик или метку времени, которая используется для вычисления временных интервалов, таких как прошедшее время, расстояние между двумя событиями и так далее.Это может быть метка времени (предоставляемая операционной системой или языком, который вы используете), или если ваша программа представляет собой бесконечный цикл, вы можете поместить в нее sleep () и counter ++ и использовать их для измерения времени (ОК,он менее точен, потому что он не учитывается во время выполнения программы, но это не имеет значения в этом случае).
Ваши производные переменные будут выглядеть примерно так:
- изменение света;параметры: путь (вверх / вниз), отметка времени
- мигание: серия событий, в которых первый вверх, второй вниз, параметры: начало, конец и (рассчитывается по этим :) длительности.
Вы должны будете обнаружить и сохранить эти события, как минимум последние N, где N - наибольшее число, которое появляется в ваших условиях (например, если вы хотите обнаружить 3 раза вспышку, вы должны сохранить последние 3 вспышки).по крайней мере).Возможно, лучшим решением является кольцевой буфер.
Если у вас есть серия обнаруженных событий, вы должны проверять свое состояние при каждом изменении, например, проверять, мигает ли лампа в последние X секунд.
Используйте бумагу, нарисуйте временную шкалу, назовите и нарисуйте свои термины (например, событие), запустите свои алгоритмы обнаружения «на бумаге».
Опять же: проблема, с которой вы боретесь, еще больше , чем вы сначала это сделали.Но если вы разделите проблему на более мелкие проблемные слои (уровень 1: атомарные изменения -> события; уровень 2: события -> очередь событий; уровень 3: анализ ряда событий), это небольшие проблемы, которые легко решить.
Во-первых, в этой многослойной конструкции будет трудно думать, и трудно не смешивать слои, но если у вас есть надлежащие низкоуровневые слои, вы можете делать более сложную магию на верхних уровнях.или построить еще более сложные слои, такие как обнаружение сигналов Морзе.