www.open-tager.ru

открытый лазертаг форум
Текущее время: 21 ноя 2024, 22:39

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


Реклама

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


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



Начать новую тему Ответить на тему  [ Сообщений: 359 ]  На страницу Пред.  1 ... 16, 17, 18, 19, 20, 21, 22 ... 36  След.
Автор Сообщение
 Заголовок сообщения: Re: прошивки на систему LTagKirov
СообщениеДобавлено: 13 сен 2014, 13:50 
Не в сети
Аксакал форума

Зарегистрирован: 29 авг 2011, 11:08
Сообщений: 1849
http://we.easyelectronics.ru/STM32/ir-u ... ast-1.html
IR for STM32

_________________
"За 2 месяца максимум можно чертёж сделать, еще за 3 фундамент." (c) Номернабис


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: прошивки на систему LTagKirov
СообщениеДобавлено: 23 окт 2014, 12:33 
Не в сети
Аксакал форума

Зарегистрирован: 29 авг 2011, 11:08
Сообщений: 1849
Свершилось - немножко исходников(не полный комплект) для любителей самоделок 8-)
Исходники позволяют настроить параметры маркера и собрать прошивку для выбранного варианта. Сейчас включено реагирование на собственный пакет и частота ИК сигнала 36Кгц (для доступных датчиков). Процессор At168, At328 (arduino). Кроме конфигурации доступно редактирование логики выстрела, если есть пожелания пишите письма , не стесняйтесь. Добавил архив с вариантом синтезированного звука, поместите его в папку build.

ЗЫ. Архив с паролем, пришлите отметку в личку - отпишу пароль, хочу узнать кому действительно интересен исходник.
Можете и забрутфорсить пароль, он простой ;)


Вложения:
sound.zip [7.09 KiB]
Скачиваний: 539
laser_4dig.zip [307.91 KiB]
Скачиваний: 613

_________________
"За 2 месяца максимум можно чертёж сделать, еще за 3 фундамент." (c) Номернабис
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: прошивки на систему LTagKirov
СообщениеДобавлено: 23 окт 2014, 14:43 
Не в сети
Аксакал форума

Зарегистрирован: 29 авг 2011, 11:08
Сообщений: 1849
Цитата:
Интересны исходники с целью посмотреть и поучиться.


Из того на что стоит обратить внимание

1. Основной цикл int main(void) - вызов автоматов по времени определённому для каждой группы автоматов отдельно. Выполнение автоматов происходит асинхронно от прерываний таймера и не задерживает(не блокирует) их.

2. Обработчик прерывания от таймера ISR(TIMER0_OVF_vect) тактирующий всю программу, больше аппаратных(UART не в счёт) прерываний в программе нет. Используется для операций опроса/вывода внешних сигналов.

3. Пример реализации одного из автоматов в исходных кодах void LogicFire(void). Явное выделение состояний с переходами по событиям, отмеривание временных промежутков от тактовой(виртуальной) частоты автомата. Опять таки никаких обращений к аппаратным таймерам в игровой логике.

Уровень аппаратной изоляции в программе недостаточный, чтобы переставить биты по ножкам, приходится заходить в различные заголовочные файлы, сейчас бы переписал по другому, но уже лениво ;) В выложенных исходниках дефайны править бесполезно они уже в откомпилированных объектных файлах, поэтому придётся использовать схему от LTK V2 без изменений.


ЗЫ. Пока заинтересовались всего два человека 8-)

_________________
"За 2 месяца максимум можно чертёж сделать, еще за 3 фундамент." (c) Номернабис


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: прошивки на систему LTagKirov
СообщениеДобавлено: 23 окт 2014, 16:48 
Не в сети
Аксакал форума

Зарегистрирован: 29 авг 2011, 11:08
Сообщений: 1849
LTagKirov писал(а):
Пример реализации одного из автоматов в исходных кодах


Гулять так гулять :mrgreen:
Пример игровой логики - обычный вариант игры ( весь целиком, всего 200 строк )
Приём пакета, две зоны с бронежилетом, отработка шока/ранения, вызов звуков и тд.

Код:
// Автомат логики приёма пакетов 100Гц
void LogicPak(void) {

  switch (StateIRPack)
  {
       case InputPacket:

      if (1 == flShortPacket) {
             StateIRPack = ShortPacket;       
            flShortPacket = 0; // принят к исполнению
            break;
      }

      if (1 == flFullPacket) {
             StateIRPack = FullPacket;       
            flFullPacket = 0;
            break;
      }   
          // нет пакетов, ничего не делать
      break;


       case ShortPacket:

      // TODO:  Запустить звук пролёта пули
      StateIRPack = InputPacket;    
      need_sound(SND_CHIRK);   

      break;

       case FullPacket:

         // Распознать Пакет
         // mlBullet заполняется сам с частотой 100Гц
         if (1 == mlBullet.FirstBit) {

            // конфигурация
               StateIRPack = CfgPacket;    

         } else {
            // пуля бит = 0
            if (playerID != mlBullet.PlayerID) {
               
               // однозначно чужой пакет
               StateIRPack = DamagePacket;       
            } else {

               // получен свой ID игрока ?
               if (mlBullet.TeamID == teamID) {

               //  точно свой - можно отбросить
                  StateIRPack = InputPacket;    
               } else  {
               // чужая команда - ID игроков совпадают
                  StateIRPack = DamagePacket;
               }
            }

         } //пуля
      break;

       case CfgPacket:
 
      //    Принять параметры конфигурации полученные через ИК канал
      
         need_sound(SND_CFG);      // обозначить приём звуком
                              // самый низкий приоритет ??
         StateIRPack = InputPacket;

         LogicCmdMiles();         // применить принятые параметры
                              // может изменится состояние автомата
                              // Убить/взорвать игрока
      break;

       case DamagePacket:
      // сюда попадаем только если есть поражение

      if (1 == flOutGame)    // вне игры
      {
         StateIRPack = InputPacket;
         need_sound(SND_CHIRK);      // "а пули свистят, пули"
         break;      // Больше ничего не делать
      }


      if  ((mlBullet.TeamID != teamID ) || ((mlBullet.TeamID == teamID) && (frendfire > 0))) {
         
         // Чужая команда, уменьшить жисть ж)
         // своя команда, дружественный огонь включен - тоже уменьшить

         // Отработать поведение для нужной группы ИК датчиков
         if (Zone) {

            // Первая зона в броне
            if (damage_table(mlBullet.Damage) > damage_table(arm_jaket)) {

               live_in_game = live_in_game - damage_table(mlBullet.Damage) + damage_table(arm_jaket);
               // пуля сильнее брони: повреждение уменьшается на величину брони
            } else {

               // пуля  слабее/равна броне: вычитаем самый слабый урон - беспокоющее поражение.
               live_in_game = live_in_game - damage_table(0);
            }

         } else {

            // Вторая зона без брони, оставим для совместимости
            live_in_game = live_in_game - damage_table(mlBullet.Damage);   
         }
      }


         StateIRPack = ShockDamageUP;
      break;   // далее отработка поражения


      case ShockDamageUP:

      if (0 < live_in_game) {   // жисть не кончилась

         flEnemyFire = 1;   // получена чужая пуля или запрос на индикацию попадания
                        // флаг блокирует возможость выстрела
         spas_time_cnt = 0;
         StateIRPack = ShockDamage;
         
         set_hit_led(3, LED_ON_SL);    // мигнуть медленно 3 раза #q
         need_sound(SND_RANEN);       // SND_GRENA, SND_UDAR



      } else {
         StateIRPack = KillGamer;
      }   

      break;


       case ShockDamage:
 
          // отработать паузу по приёму
         // пока не пройдёт спасательное время

         spas_time_cnt++;
         if (spas_time_cnt > spas_time)
         {   
            //  пауза кончилась
            // "отбросить" принятые пули
            flFullPacket = 0;   
            StateIRPack = InputPacket;
                  
         }
      break;


       case KillGamer:

       StateIRPack = InputPacket;       
      flOutGame = 1;


      set_hit_led(kill_time, LED_OFF); // мигнуть быстро N раз(*2)
      need_sound(SND_OUTGAME);        // Запустить звук "выход из игры"


      // статистику можно добавить, отправить событие на мигание
      break;


       case ExplodeGamer:

       StateIRPack = InputPacket;       
      flOutGame = 1;

      set_hit_led(kill_time, LED_OFF); // мигнуть быстро 10 раз
      need_sound(SND_GRENA);           // Запустить звук "взрыв"
                               // жужжать вибромотором уже незачем
      break;

   }; //case end
};



ЗЫ. Архив с паролем ;)


Вложения:
inpak.zip [3.21 KiB]
Скачиваний: 552

_________________
"За 2 месяца максимум можно чертёж сделать, еще за 3 фундамент." (c) Номернабис
Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: прошивки на систему LTagKirov
СообщениеДобавлено: 23 окт 2014, 22:03 
Не в сети
Аксакал форума

Зарегистрирован: 29 авг 2011, 11:08
Сообщений: 1849
Pacifist писал(а):
Вы случайно черновики с своим вариантом архитектуры в электронный вид не переводили (ведь всё равно что-то на бумаге зарисовано ;) )? Интереснее было бы взглянуть на структуру - какие именно автоматы, какие события приводят к изменению состояния...


"Давно здесь сидим" - всё уже 100 раз потерялось :mrgreen:
Если что непонятно спрашивайте, специально всё порезал чтобы выделить устройство программы.

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

Как видите логика поведения лазертаг устройства на основе этой обвёртки получается простой и быстро программируемой, если кого интересует реализация особенного устройства для игры обращайтесь от интерестных задач неотказываюсь.

_________________
"За 2 месяца максимум можно чертёж сделать, еще за 3 фундамент." (c) Номернабис


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: прошивки на систему LTagKirov
СообщениеДобавлено: 24 окт 2014, 11:54 
Не в сети
Новосел
Аватар пользователя

Зарегистрирован: 01 мар 2014, 15:38
Сообщений: 69
Добрый день, LTagKirov!
По расшаренным исходникам системы:
Понравилась идея работа с флагами (в main) - нечто подобное я и предполагал.
Вопрос: как ведет себя программа при массированном "обстреле/попадание" и одновременной "стрельбой" длинными очередями? Успевают ли обрабатываться раз в 10мс (100Гц) все последовательно полученные поражения ? Используются большие буферы?
Правильно ли я понял, что Таймер0 используется в неком аналоге режима СТС? Удобно для Атмега8 (возьму себе на заметку :geek: )

Увидел в предоставленном коде "следы" :mrgreen: RFID - получилось ли собрать полноценную, стабильную связь таг-повязка? По какой схеме: "тупой" таг, "тупая" повязка?
Чем импонирует RFID так это то, что идентификацию можно заменить коротким расстоянием срабатывания, что в сочетании с "умной" повязкой дает возможность не привязываться к конкретному тагу и возможность использовать/активизировать стационарные/общие игровые объекты.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: прошивки на систему LTagKirov
СообщениеДобавлено: 24 окт 2014, 12:10 
Не в сети
Местный

Зарегистрирован: 13 июл 2011, 17:05
Сообщений: 475
Откуда: Perm
Ansat писал(а):
Вопрос: как ведет себя программа при массированном "обстреле/попадание" и одновременной "стрельбой" длинными очередями? Успевают ли обрабатываться раз в 10мс (100Гц) все последовательно полученные поражения?
вопрос не ко мне, но чтобы пакеты приходили быстрее 10мс надо обрабатывать несколько зон повреждений, а в ltk2 вроде как одна.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: прошивки на систему LTagKirov
СообщениеДобавлено: 24 окт 2014, 13:24 
Не в сети
Новосел
Аватар пользователя

Зарегистрирован: 01 мар 2014, 15:38
Сообщений: 69
tommy,
Действительно.
Я неправильно подсчитал длительности - (спутал 100 и 1000 Гц) :oops:
Спасибо.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: прошивки на систему LTagKirov
СообщениеДобавлено: 24 окт 2014, 20:25 
Не в сети
Аксакал форума

Зарегистрирован: 29 авг 2011, 11:08
Сообщений: 1849
Ansat писал(а):
Увидел в предоставленном коде "следы" :mrgreen: RFID - получилось ли собрать полноценную, стабильную связь таг-повязка? По какой схеме:


Да получилось: повязка "умная", полностью выполняет игровую логику и сама зажигает светодиод(может и звуки проигрывать), маркер для её работы вообще ненужен. На маркер приходят сигналы о попаданиях и озвучиваниях от повязки. Маркеров можно использовать много(хоть 20шт сразу), протокол от повязки до маркера без квитирования, если на маркер не приходят сигналы от повязки он выключается сам. Максимальная возможная дальность по РФИД получилась 8..10 метров, возможно сделать радиогранаты(примерно +10р к цене обычной гранаты). Повязок можно подключить много(бронежилет, бронештаны и тд), какая раньше всех "сдохнет", та и отключит все доступные маркеры и повязки. Протокол команд Рфид начинал делать как расширение через ИК канал, а потом эти же команды (4 байта - 32бита) перешли на радио. Логика обработки в программе получается как для обычных команд Майлс.


Недостаток самый большой, надо делать самодельные антенны 70..100 витков 50мм диаметром.
На повязке легко разместить, в маркере особенно ММГ уже посложнее. И второй надо как то конфигурировать комплект заранее, автоконфигурирование, так и не написал. Размер платы с РФИД приёмником 40х40мм, с усилителем звука 40х52мм.

tommy писал(а):
Ansat писал(а):
Вопрос: как ведет себя программа при массированном "обстреле/попадание" и одновременной "стрельбой" длинными очередями? Успевают ли обрабатываться раз в 10мс (100Гц) все последовательно полученные поражения?
вопрос не ко мне, но чтобы пакеты приходили быстрее 10мс надо обрабатывать несколько зон повреждений, а в ltk2 вроде как одна.


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

100Гц между пулями это 6000в\мин это очень много, если вы попадёте под такую атаку ничего страшного если даже каждая вторая пуля потеряется :)


ЗЫ. Радио повязка так и осталась на макетке, все эти усложнения хороши для интелектуальных упражнений, а для игры нафиг не сдались 8-)

_________________
"За 2 месяца максимум можно чертёж сделать, еще за 3 фундамент." (c) Номернабис


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: прошивки на систему LTagKirov
СообщениеДобавлено: 25 окт 2014, 11:29 
Не в сети
Аксакал форума

Зарегистрирован: 29 авг 2011, 11:08
Сообщений: 1849
Pacifist писал(а):
А не пробовали с РФИД в качестве среды передачи сигнала использовать тело игрока? Взял в руки ствол - повязка с ним соединилась, можно стрелять.


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

_________________
"За 2 месяца максимум можно чертёж сделать, еще за 3 фундамент." (c) Номернабис


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 359 ]  На страницу Пред.  1 ... 16, 17, 18, 19, 20, 21, 22 ... 36  След.

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


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 34


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

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