Pingvin писал(а):
Пишите описание команд.
Краткий вариант, некоторых команд нет (вроде регулировки громкости),
но они несущественны, для начала и этих достаточно.
Некоторые команды работают сразу, некоторые требуют перезапуска маркера по питанию, конкретно касается параметров пули. Пуля создаётся при старте и не меняется до перезапуска. Например можно поменять ИД игрока, пуля до перезапуска останется старой, а реагировать по приёму будет уже как с новым ИД. В то же время можно поменять например время шока и оно будет использоватся в игре, до выключения маркера. А после выключения восстановится время из сохранённых значений. Можно не заморачиватся и после изменения настроек и их сохранения в ЕЕПРОМ командой z5, перезапускать маркер по питанию.
Код:
Значения по умолчанию,
коментарии по границам переменных
Приведены основные параметры
ir_frq = 222; // частота ИК через делитель, по умолчанию 36КГц
playerID = 61; // ID игрока от 0 до 127
teamID = 1; // команда 0-3
damage = 14; // Урон выстрела, от 0 до 15, по умолчанию (75%)
damageG = 15; // Урон гранаты, от 0 до 15, по умолчанию (100%)
frendfire = 0; // Режим дружественного огня, вЫключен
rifle = 0; // Режим стрельбы: автомат =0 /полуавтомат =1
live = 200; // Количество жизней 1-200
nextgame = 10; // Время до начала игры, 1сек, градации 0.1 сек
otsechka = 10; // Патронов в очереди: шт 1-250
для выключения просто ставить очередь длиннее магазина
temp_fire = 3; // Скорострельность, 0.01сек 0..65500
указывается время между выстрелами, а не скорострельность в выстрелах в минуту
максимальная реальная скорострельность около 1500выстр в минуту
Время указывается в единицах времени в 0,01 или 0,1сек
ammo_clip = 50; // Патронов в обойме 1-99
clip_num = 6; // Количество обойм 1-255
clip_time = 5; // Время перезарядки, 0.1сек 0..65500
shok_time = 100; // Время "шока", невозможность стрелять 0.01 1..65500
spas_time = 100; // Неуязвимость при ранении 0.01 1..65500
можно и от ноля считать, программа переваривает
kill_time = 100; // Свечение после "смерти", кол-во вспышек 1..65500
5000вспышек 10минут, точно не мерял
pwm_shot = 20; // Дальность выстрела, 1..70 (56Кгц) 1..110(36Кгц)
pwm_alt = 20; // Дальность выстрела гранатой 1..70
akb_min = 500; // Минимальное напряжение акб, сигнал о необходимости зарядить АКБ
akb_max = 1000; // Максимальное напряжение акб при зарядке
// Верхний порог выключения заряда АКБ.
// Напряжение АКБ измеряется от 1 до 1024
// Количество мв на 1 шаг определяется делителем.
// Например делитель резисторный 0.09, тогда на 12,22В ->1.1В = 1024 или 12мВ на 1
moved_kill = 0; // режим обездвиживания, вЫключен
start_kill = 0; // при включении вне игры
auto_reload = 0; // автоперезарядка выключена
arm_jaket = 1; // минимальная броня, =0 выключеная броня, 15 позиций
pass_ir = 0x5555;
ИК Пароль по умолчанию, правильнее назвать адрес маркера.
Используется для получения доступа при конфигурировании через ИК канал.
Команды приведу попозже. В зоне действия могут находится одновремено несколько маркеров,
но параметры будет принимать только тот маркер в запросах к которому установлен такойже пароль.
Так сказать мой вариант клонирования.
Ответы оборудования на некоторые команды
печатается подсказка и текущее значениие в битовом виде(hex) то есть в том числе и непечатные символы.
Например номер игрока 10 будет принят как один байт 0А, а не два символа '0','А'
" playerID = ",
" teamID = ",
" damage = ",
" frendfire = ",
" rifle = ",
" live = ",
" next.game 0.1sec = ",
" otsechka = ",
" temp.fire 0.01sec = ",
" ammo.clip = ",
" clip.num = ",
" reload.time 0.1sec = ",
" shok.time 0.01 = ",
" spas.time 0.01 = ",
" kill.time 0.1 = ",
" pwm.shot 10..200 = ", // 15
" akb.volt = ", //
" Write EEPROM, 10sec",
" mic.gain, xxx0 0000 = ",
" moved.kill = ",
" out.game on start = ",
" auto.reload = ",
" arm.jaket = ",
" akb.max = ",
" damage.G = ",
" Pass.ir = ",
" pwm.alt = "
Формат команды
символ число запятая возврат каретки ненужен
символ - один байт все доступные от 0 до 255, за исключением запятой ','
Рекомендовано не использовать символы цифр для команды, итого доступно 240 команд
Сначала тратим набор латинских букв потом будем использовать другие.
Проверенные команды
case ('i'):
playerID = cifra_end; // ID игрока от 0 до 127
case ('t'):
teamID = cifra_end; // команда 0-3
case ('d'):
damage = cifra_end; // Урон выстрела, 15 позиций (75%)
case ('f'):
frendfire = cifra_end; // Режим дружественного огня, вЫключен
case ('q'):
rifle = cifra_end; // Режим стрельбы: полуавтомат
case ('l'):
live = cifra_end; // Количество жизней 1-200
case ('g'):
nextgame = cifra_end; // Время до начала игры, 10сек, градации 0.1 сек
case ('o'):
otsechka = cifra_end; // Патронов в очереди 1-50
case ('p'):
temp_fire = cifra_end; // Скорострельность, 0.01сек
case ('m'):
ammo_clip = cifra_end; // Патронов в обойме 1-99
case ('c'):
clip_num = cifra_end; // Количество обойм 1-255
case ('r'):
clip_time = cifra_end; // Время перезарядки, 0.1сек 1-99
case ('h'):
shok_time = cifra_end; // Время "шока", невозможность стрелять
case ('s'):
spas_time = cifra_end; // Неуязвимость при ранении
case ('k'):
kill_time = cifra_end; // Свечение после "смерти",
case ('w'):
pwm_shot = cifra_end; // Дальность выстрела, максимум = ir_frq / 2
case ('a'):
akb_min = cifra_end; // Минимальное напряжение акб, хз ???
// Cлужебные команды, сохранение в EEPROM и Flash
case ('z'): // Использовыать для записи текущих параметров
if (5 == cifra_end) {
// параметры запишутся через 10 секунд
case ('e'): // запустить звук по таблице
need_sound(cifra_end);
case ('j'): // конфигуратор микрофона j
case ('x'): // режим обездвиживания,
case ('G'): // режим при включении вне игры
case ('R'): // автоперезарядка выключена
case ('J'): // бронежилет
case ('A'):
akb_max = cifra_end; // Напряжение акб, для зарядки
примерный вид ответа akb.max = вЕ + ап;
putchar_(cifra_end>>8);
putchar_(cifra_end);
putchar_('+'); // Текущее значение в "попугаях"
putchar_(adc_in>>8);
putchar_(adc_in);
case ('D'):
damageG = cifra_end; // Урон гранаты, 15 позиций (75%)
case ('P'):
pass_ir = cifra_end; // Пароль ИК
case ('W'):
pwm_alt = cifra_end; // Дальность выстрела гранатой
case ('F'):
ir_frq = cifra_end; 222 - 36КГц 143 - 56КГц 200 - 40КГц