цифровая электроника
вычислительная техника
встраиваемые системы

 
» » » Генератор чисел на Arduino для создания лотереи своими руками

Генератор чисел на Arduino для создания лотереи своими руками

Автор: Mike(admin) от 15-10-2017, 16:45

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


Генератор чисел на Arduino для создания лотереи своими руками

Такой вид времяпрепровождения очень интересен и захватывающ. Более того, его можно организовать самостоятельно с помощью популярной в наши дни платформы для разработчиков и радиолюбителей Arduino. Реализовав генератор случайных чисел на Arduino, можно сделать некое подобие довольно интересной лотереи.


В данном материале будет описан проект под названием Randuino, то есть Arduino с имплементацией генератора случайных чисел (random number generator), который позволит вновь и вновь получать новые числа, совершенно не похожие на предыдущие цифры. Как раз именно это является залогом настоящей лотереи, поскольку генерируемые новые числа не должен знать никто. В качестве средства отображения таких чисел используется стандартный двухстроковый LCD-дисплей.


Прежде чем приступить к демонстрации кода, следует уточнить, как именно получаются такие случайные числа. Дело в том, что структура ядра микроконтроллера (как и у всех компьютеров и прочих вычислительных устройств, основанных на кремниевой технологии) является «жесткой», то есть все вычисления здесь строго детерминированы и отсутствует вообще любой элемент случайности. В связи с этим использовать само ядро микроконтроллера для генерации случайных чисел, которые будут лишь псевдослучайными, нельзя, поскольку такую лотерею можно будет запросто взломать, просто поняв последовательность, с которой генерируются новые числа.


Поэтому нужно искать источник настоящих случайностей извне. И его можно найти с помощью АЦП. Дело в том, что документация на Arduino предполагает, что аналоговые линии микроконтроллера могут обнаруживать имеющиеся вокруг нас микроволновые или радиоволновые сигналы, которые после их поступления на канал АЦП можно выразить как число от 0 до 1023, а затем использовать это число в качестве основы для генерации случайных чисел. В итоге только такой механизм позволит реализовать настоящую лотерею, подобную pubg лотереи. Код для Arduino с генератором случайных чисел для построения механизма лотереи представлен ниже.


#include <LiquidCrystal.h>

LiquidCrystal lcd(4, 5, 6, 7, 8, 9);

const int seedPin = A0;
const int button = 2;
int buttonState;
int prevButtonState;
int totalNumbersGenerated = 0;

void setup() {
    
    lcd.begin (16,2);
    
    pinMode (seedPin, INPUT);
    pinMode (button, INPUT);
    int randSeed = analogRead (seedPin);
    int generatedSeed = random (-randSeed, randSeed);
    randomSeed (generatedSeed);
    prevButtonState = digitalRead (button);
    
    PrintToLcd (
        "Rng: " + String (-randSeed) + " - " + String (randSeed),
        "Seed: " + String (generatedSeed)
        );
}

void loop() {
    buttonState = digitalRead (button);
    if (buttonState != prevButtonState && buttonState == HIGH)
    {
        totalNumbersGenerated++;
        PrintToLcd (
            "Result #" + String (totalNumbersGenerated),
            String (random (-999999999, 999999999))
            );
        delay (200);
    }
    prevButtonState = buttonState;
}

void PrintToLcd (String line1, String line2)
{
    lcd.clear ();
    lcd.print (line1);
    lcd.setCursor (0, 1);
    lcd.print (line2);
}



© digitrode.ru


Теги: Arduino




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий