Опубликовано: 24.06.2017 01:33
Автор: jazon
Всем доброго!!! Многие люди, которые играют в игру CS:GO конечно же видели счетчик Stattrak на игровом оружии. Не будем вдаваться в подробности по описанию этой штуки, на это есть русская фандомная вики по этой теме. В этой статье попробуем изготовить демонстрационный прототип такого счетчика и установить его на страйкбольное оружие. За основу в общем то можно взять несколько компонентов: плата Digispark Attiny85, дисплей на базе драйвера MAX7219 и тактовую кнопку. Всё это будет обвязано косичкой из проводов, так сказать для удобства. Прежде чем расписывать что к чему - всё же хотелось бы познакомить читателя с тем что мы получили на выходе, об этом вы узнаете из видео ниже:
Начнем поподробнее, нам потребуется:
Для начала нужно залить скетч в плату Attiny85, но перед тем как сделать это, нужно чтобы от платы были отключены все компоненты, при условии конечно что они к ней подключены(кроме собственно USB - кабеля). Скетч, который будет залит в плату, невозбранно можно скопировать прямо из статьи:
#include "LedControl.h"
// Объявляем привязки к пинам модуля дисплея
#define DIN 1 //Синий DATA IN
#define CLK 3 //Серый CLK
#define CSL 2 //Белый LOAD[CS]
//Привязка к пина к кнопке
#define BUT 4 //Коричневый к кнопке
//Прототип функции обновления экрана
void DisplayUpdate();
//Прототип функции для подавления дребезга кнопки
boolean DebounceButton(int ScanPort, boolean last);
//Создаём объект LC класса LedControl для работы с дисплеем
LedControl LC = LedControl(DIN, CLK, CSL, 1);
//Теущий временый счетчик
static unsigned long currentCounter = 0;
bool BUTCurr = false;
bool BUTPrev = false;
unsigned long previousMillis = 0;
int resetCounter = 0;
int period = 500;
//Массив численных символов без точки
byte Digit[10] = {126, 48, 109, 121, 51, 91, 95, 112, 127, 123};
void setup()
{
//Устройство(7-ми сегментный дисплей) выводим из спящего режима
LC.shutdown(0, false);
//Установить яркость дисплея на 8
//Всего возможных режимов яркости от 0 до 15
LC.setIntensity(0, 8);
//Очистить дисплей
LC.clearDisplay(0);
//
pinMode(BUT, INPUT);
}
void loop()
{
unsigned long currentMillis = millis();
if(digitalRead(BUT))
{
if(currentMillis - previousMillis > period)
{
resetCounter ++;
if(resetCounter == 7)
{
currentCounter = 0;
}
previousMillis = currentMillis;
}
}
else
{
resetCounter = 0;
}
//Проверка кнопки инкремента - нажатие и обработка "Антидребезг"
BUTCurr = DebounceButton(BUT, BUTPrev);
if(BUTPrev == false && BUTCurr == true)
{
if(currentCounter == 99999999)
{
currentCounter = 0;
}
else
{
currentCounter ++;
}
}
BUTPrev = BUTCurr;
DisplayUpdate();
}
//Функция подавления дребезга контактов концевого датчика
boolean DebounceButton(int ScanPort, boolean last)
{
boolean current = digitalRead(ScanPort);
if(current != last)
{
delay(10);
current = digitalRead(ScanPort);
}
return current;
}
void DisplayUpdate()
{
unsigned long intValue = currentCounter;
unsigned long divValue;
for(int i = 0; i < 8; i ++)
{
divValue = intValue % 10;
intValue = intValue / 10;
//Блок программы если не нужно выводить нули влево
//if(divValue == 0 && intValue == 0)
//{
// continue;
//}
//else
//{
// LC.setRow(0, i, Digit[divValue]);
//}
//Если раскомментировать вышестоящий блок
//то строку ниже надо закомментировать
LC.setRow(0, i, Digit[divValue]);
}
}
Итак, скетч успешно залит в плату. Далее - нужно соединить все компоненты по схеме коммутаций, она показана на чертеже ниже:
После того как все компоненты скоммутированы по вышеприведённой схеме, остаётся только включить и испытать собранное оборудование, и, если оно не установлено - установить его не отвлекаясь ни на что, даже на любимый сериал. Ну а мы в свою очередь хотим пожелать вам творческих успехов, если понравилось - палец вверх, и не забывайте оставлять свои комментарии в конце статьи. Всем спасибо.
Если у Вас есть опыт в работе с Arduino и собственно есть время для творчества, мы приглашаем всех желающих стать авторами статей публикуемых на нашем портале. Это могут быть как уроки, так и рассказы о ваших экспериментах с Arduino. Описание различных датчиков и модулей. Советы и наставления начинающим. Пишите и размещайте свои статьи в соответсвующей ветке форума.