Skip to content

Бот для Discord для управления космическим кораблём на НТО Junior 2021.

License

Notifications You must be signed in to change notification settings

SashkaCosmonaut/ntoj-space-discord-bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Бот для Discord для управления космическим кораблём на НТО Junior 2021.

Весь код обильно покрыт комментариями, чтобы легче было в нём разобраться. Программа бота компилировалась в Microsoft Visual Studio Community 2019. Версия 16.10.3. Код для Arduino компилировался и прошивался в Arduino IDE 1.8.16.

Структура папок

  • ArduinoIRController - папка с кодом для платы Arduino, подключенной по USB к компьютеру, на котором запущена программа бота. По последовательному порту данная плата Arduino принимает команды от программы бота, расшифровывает их и управляет подключенным к её пинам инфракрасным светодиодом, размещённым сверху над столом. Через инфракрасный светодиод пересылаются сигналы на корабли на столе. Используемые библиотеки:
  • NTOJSpaceDiscordBot - папка с кодом проекта консольной программы бота на .net core 3.1, которая запускается на компьютере, принимает команды от бота и передаёт команды на плату Arduino по последовательному порту через USB-кабель. Используемые библиотеки:

Настройка бота

Токен бота берётся из переменной среды NTOJSpaceBotToken, такую переменную среды надо создать и задать ей токен, без кавычек и т.п.

image

Остальные настройки берутся из конфигурационного JSON-файла, который лежит рядом с исполняемым файлом (config.json). В нём прописаны следующие настройки:

  • "PortName": "COM3" - К какому порту подключена плата Arduino.
  • "BaudRate": 9600 - Скорость передачи порта.
  • "ReadTimeout": 1000 - Время ожидания чтения с порта.
  • "WriteTimeout": 1000 - Время ожидания записи в порт.
  • "RequiredChannelId": 913720736546451476 - ID канала, из которого только и будет считывать команды бот (канал "cosmobot").

Общение с ботом

Когда игрок пишет команду в заданный канал ("cosmobot"), бот отвечает, например, написали боту команду "2":

Player — Сегодня, в 14:34
2
RemoteDriveBot БОТ — Сегодня, в 14:34
Player#1111 нажал 2, принято: True

Это означает, что бот принял команду и передал её Arduino. Фраза "принято: True" означает, что плата Arduino передала команду на корабль и ответила. Если произошла какая-то ошибка при передаче команды на Arduino, будет написано False.

Настройка программы на Arduino

Программа принимает символ от консольной программы бота и посылает сигнал нажатия соответствующей кнопки ИК-пульта кораблю (имитируем нажатия на кнопки пульта). Коды сигналов пульта были предоставлены организаторами. Если всё прошло хорошо, программа возвращает консольной программе бота констунту OK_STR, чтобы та понимала, что команда успешно дошла до Arduino и передана кораблю.

  • #define IR_SEND_PIN 13 - для подключения задали такой пин, чтобы удобнее было присоединить кабель.
  • #define ADDRESS 0x0102 - такой адрес был в примере к библиотеке, вроде, можно заменить на 0х0 и всё равно будет работать. У нас работало так, поэтому ничего не меняли. Документация к данной библиотеке этото вопрос покрывает слабо или мы не нашли.
  • // Символьные константы, ожидаемые от программы - сейчас не используются, вначале хотели задать конкретный набор команд, но потом переделали на просто пересылку всего, что приходит от консольной программы бота.

Сопротивление резистора: <TODO: найти, посмотреть и написать>

image

About

Бот для Discord для управления космическим кораблём на НТО Junior 2021.

Resources

License

Stars

Watchers

Forks

Packages

No packages published