Если вы не против, несколько покритикую MilesTag II протокол.
Факт: стрельба, передавать нужно максимально быстро, желательно с избыточным кодом (с исправление ошибок).
Факт: железка работает от батареек, а значит нужно экономить на них. (хотя соглашусь экономия на ИК сомнительна)
Итак. MilesTag II (о физике)
1. Использует кодирование Pulse-Length Modulation, а значит на каждый логическую "1" затрачивает избыточное количество времени.
2. Использует долгое время сигнал (подаёт модуляцию на светодиод) для передачи "1", с одной стороны это "перегревает" светодиод, то есть чем больше он "включён", тем
меньший ток на него можно подавать, что бы он не перегорел, например для TSAL5100 можно подать до 1 A, при импульсе в 100 uS. С другой
стороны это лишний расход энергии.
3. Очень большой заголовок, вместо которого можно было бы передать целых два бита CRC.
4. Импульс в 600 uS это много. В любом случае в домашних условиях у на TSAL5100 и TSOP34836 для реакции вполне достаточно 200-250 uS (см.
http://3zu.ru/projects/lasertag/wiki/%D ... 1%87%D0%B8)
Как вариант можно рассмотрел IrDA протокол(его делало куча бородатых дядек из крутых компаний), в качестве передачи он использует 8-битный код + проверка чётности (аналогично UART протоколу).
Правда хочется бы добавить какой-нибудь код для восстановления.
MilesTag II (о протоколе стрельбы)
1. Зачем в стрельбе передавать избыточную информацию? Если завести простую табличку в EEPROM, которая будет сохранять
информацию о том какой ID игрока к какой группе относится, можно сэкономить аж целых 2 бита.
2. Зачем передавать "0" в ID игрока? Служебную информацию можно передавать другим способом кодирования. (если интересно, распишу)
3. Если играет 20 человек, имея 3 вида оружия, зачем так много бит тратить на ID и урон? Можно перед игрой рассылкой служебного кода настраивать
необходимое кол-во бит для указания номера ID игрока и типа урона.
Итого, если плюнуть на способ модуляции, мы можем съкономить 6 бит, если учесть заголовок, то 8 бит.
А теперь об игре. Вот вы бежите, побегаете к аптечке и стреляете в неё, в ответ вам приходит код:
"Игроку номер ID добавить 30 HP", или не приходит?
Да, не приходит, протоколом этого не поддерживается. (в протоколе можно прибавить HP только ВСЕМ игрокам)
Последнее замечание появилась из-за осмысления как можно играть в LaserTag,
если интересно это описано тут:
http://3zu.ru/projects/lasertag/wiki/%D ... 0%95%D0%99P.S. Прошу прощение за столь большой "выхлоп", просто накипело, а поныть некому
P.P.S. У меня плохо с русским языком и формулировкой мысли, так же я человек и могу ошибаться. Так что если что-то непонятно, ложно и тп. Не злитесь, укажите на это место, я поясню или поправлю(сь).