www.open-tager.ru

открытый лазертаг форум
Текущее время: 25 ноя 2024, 02:00

Часовой пояс: UTC + 3 часа [ Летнее время ]


Реклама

Правила форума


В разделе запрещены - обсуждение оборудования не поддерживающего открытых протоколов, реклама и ссылки на готовые продукты лазертага, обсуждение политики производителей и самих производителей. Виден всем.



Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
СообщениеДобавлено: 17 окт 2014, 05:48 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Поступило предложение добавить в настройки количество жизни при старте игры.
На данный момент этот параметр = 100% и не настраивается.
Давайте сделаем его настраиваемым.

Чтобы при выключении тага значение параметра не терялось, хранить его будем в энергонезависимой памяти - eeprom (внутренняя контроллера, есть у нас ещё и внешняя микруха для звука - не путать!)

Теперь определимся с максимальным значением, от этого будет зависеть, какой тип должна иметь наша переменная.
Предлагаю максимальное значение - 100 (проценты, как-никак).
Значит нам достаточно типа
uint8_t - беззнаковый, целый, 8 бит размером.

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 окт 2014, 07:24 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Теперь давайте дадим какое-либо осмысленное название переменной.
предлагаю
life_after_start

Ну все - давайте определим её.
Все глобальные переменный объявлены в файле
global_variables.c

Добавим туда строку

volatile EEMEM uint8_t life_after_start; //Количество "жизни" после запуска новой игры


Макрос EEMEM говорит компилятору, что переменная должна храниться в eeprom памяти контроллера

Теперь, чтобы наша переменная была видна и из других файлов прошивки мы должны её задекларировать в заголовочном файле
ltag_ascetic.h

Добавим в него строку
extern volatile EEMEM uint8_t life_after_start; //Количество "жизни" после запуска новой игры

макрос extern говорит компилятору, что переменная уже определена в другом файле, не надо её создавать при компиляции очередного файла. Иначе у нас будет столько переменных с именем life_after_start, сколько раз мы будем использовать в файлах
#include ltag_ascetic.h

И между ними не будет ничего общего, кроме названия.

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 окт 2014, 07:35 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
eeprom такая штука, что не угадаешь, что там будет лежать после прошивки контроллера.
И по адресу нашей переменной может лежать недопустимое значение.
Поэтому проверим нашу новоиспеченную переменную до старта игры и настроек.
Есть функция, которая это делает, называется
void check_eeprom(void);//проверим корректность значений переменных, хранимых в eeprom

Подправим её - добавим проверку значения новой переменной
if (eeprom_read_byte(&life_after_start)>100) eeprom_write_byte(&life_after_start,100);

как видете, напрямую обращаться к переменной, находящейся в eeprom памяти контроллера мы не можем, для этого существуют функции для работы с eeprom
мы воспользовались для чтения функцией
eeprom_read_byte(...)

для записи

eeprom_write_byte(...)

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 окт 2014, 11:03 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Теперь нам надо дать пользователю возможность внести эту настройку с ЖКИ.

Для этого в прошивке предусмотрена функция
get_int_settings(char* text, uint8_t* var_adress, uint8_t max_value)

где первый параметр text - это тот текст, который будет отображаться на экранчике в верхней строке.
Сюда мы передадим название параметра - "Жизнь"
так как экранчик на 8 символов в строке, этот текст не должен быть длиннее.

второй параметр var_adress - адрес нашей переменной, чтобы получить адрес переменной, а не её значение, перед именем переменной ставиться знак &

третий параметр max_value - максимально допустимое значение, которое может принимать переменная. В нашем случае - 100

Все настройки выполняются в функции get_all_setings();

Добавим в неё строку
get_int_settings("Жизнь", &life_after_start, 100);

Код:
void get_all_setings(void)
{
   get_int_settings("ID игр.", &eeprom_player_id, 127); //нажата центральная кнопка
   set_player_id(eeprom_read_byte(&eeprom_player_id));   //Устанавливаем идентификатор игрока
   get_int_settings("ID ком.", &eeprom_team_id, 3); //нажата центральная кнопка
   set_team_color(team_id());   //Устанавливаем идентификатор (цвет) команды
   get_enum_settings("Урон", &eeprom_damage, &damage_value, Damage_100);
   set_gun_damage(gun_damage());      //Устанавливаем мощьность оружия (урон)
   get_enum_settings("IR_F KHz", &eeprom_ir_carr_freq, &ir_f0_value, freq_56KHz);   
   get_ir_protocol();
   reinit_timer2();
   get_int_settings("Патронов", &eeprom_bullets_in_clip, 90); //нажата центральная кнопка
   get_int_settings("Обойм", &eeprom_clips, 90);
   get_int_settings("Перез. с", &eeprom_reload_duration, 8);
   get_ir_power_settings();
   curr_ir_pin=eeprom_read_byte(&eeprom_curr_ir_pin);
   get_friendly_fire_settings();
        get_int_settings("Жизнь", &life_after_start, 100);

}

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 окт 2014, 11:12 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Ну и последний штрих.
Осталось перед стартом игры считать настройку из eeprom и присвоить её значение переменной.
На ЖКИ отображается значение жизни из глобальной переменной

life_in_percent

Все переменные инициируются в функции init_var(), найдите её в файле ltag_ascetic.c и вы увидите


life_in_percent = 100;//эту выводим на дисплей

Измените эту строку на

life_in_percent =eeprom_read_byte(&life_after_start);


Все!
Компилируем, прошиваем и в нашем меню настроек появляется новый пункт!

Но это мы только получили возможность настраивать уровень жизни при старте с ЖКИ.

Как сделать, чтобы конфигуратор умел так же работать с этой настройкой - в следующей статье.

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 окт 2014, 11:51 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Ну вот и баг обнаружен!

Дело в том, что функция init_var() вызывается раньше, чем invite() (там настройки выполняются)
Поэтому добавьте и после вызова функции invite() строку
life_in_percent =eeprom_read_byte(&life_after_start);

Это в файле ltag_ascetic.c где то в начале.

Это, конечно - косяк, но просто так поменять порядок вызова функций я боюсь - надо внимательно посмотреть, а то баги могут пойти - замучаешься отлавливать.

Но надо исправить, не кошерно так...

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Последний раз редактировалось Pingvin 17 окт 2014, 12:43, всего редактировалось 7 раз(а).

Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 окт 2014, 12:03 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
Вот прошивка к примеру - жизнь при старте можно настроить с ЖКИ.
Для релиза 3.1


Вложения:
LTAscet_3_1_BT_LCD8x2_wo_joistik_new_ir_tx_algoritm_RC_IRF0_switch_self_ricochet_ignore_ife_adj.zip [338 KiB]
Скачиваний: 522

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!
Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 окт 2014, 13:40 
Не в сети
Новосел

Зарегистрирован: 01 мар 2013, 11:18
Сообщений: 91
Откуда: Мончегорск Мурманская обл.
Pingvin писал(а):
Вот прошивка к примеру - жизнь при старте можно настроить с ЖКИ.
Для релиза 3.1


чтото не работает отправляб пакт выстрела с повреждением 1 жизнь сразуже убивает намертво хоть по умолчанию 100 жизни на 3.1


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 окт 2014, 15:15 
Не в сети
Аксакал форума
Аватар пользователя

Зарегистрирован: 12 авг 2011, 16:55
Сообщений: 7514
Откуда: Барнаул, Алтайский край (не путать с республикой Алтай) :-)
loner32 писал(а):
Pingvin писал(а):
Вот прошивка к примеру - жизнь при старте можно настроить с ЖКИ.
Для релиза 3.1


чтото не работает отправляб пакт выстрела с повреждением 1 жизнь сразуже убивает намертво хоть по умолчанию 100 жизни на 3.1

Проверял - вроде работало.
Из чего стреляли?

После прошивки в eeprom могли быть нули.
И жизнь при старте могла быть - 0.
Заходили в настройки?
Пишите подробней, что и как делали - не понятно ничего!

_________________
Ваше оружие становиться значительно эффективней, если его снять с предохранителя!


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: 17 окт 2014, 17:34 
Не в сети
Новосел

Зарегистрирован: 01 мар 2013, 11:18
Сообщений: 91
Откуда: Мончегорск Мурманская обл.
Pingvin писал(а):
loner32 писал(а):
Pingvin писал(а):
Вот прошивка к примеру - жизнь при старте можно настроить с ЖКИ.
Для релиза 3.1


чтото не работает отправляб пакт выстрела с повреждением 1 жизнь сразуже убивает намертво хоть по умолчанию 100 жизни на 3.1

Проверял - вроде работало.
Из чего стреляли?

После прошивки в eeprom могли быть нули.
И жизнь при старте могла быть - 0.
Заходили в настройки?
Пишите подробней, что и как делали - не понятно ничего!


Все норма просто не было выставлены жизни я не использую дисплей надо будет конфигуратор дописать и через него жизни выставлять


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 38 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: Google [Bot] и гости: 24


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB