Функция генерации случайного значения для Attiny13A
МК Attiny13A не поддерживает функцию random из-за ее большого размера, т.к. в этой микросхеме всего 1024 байт памяти на всю программу. Но иногда необходим генератор хотя бы случайного битного значения: 0 или 1. Такой генератор случайного значения может быть использован в игре Магический куб. При нажатии на кнопку загорается или зеленый или красный светодиод.
Функция на IDE Arduino
boolean random_boolean()
{
// Для пущей надежности будем читать случайные значения с 2 аналоговых пинов микросхемы
pinMode(4, INPUT); // Пин 4 на чтение
pinMode(2, INPUT); // Пин 2 на чтение
int v1 = analogRead(2); // Первое значение
int v2 = analogRead(4); // Второе значение
int v3 = analogRead(2)-1000; // Третье значение
int v4 = analogRead(4)-1000; // Четвертое значение для верности
// Выполняем действия в скобках над переменными и смотрим четность или нечетность полученного результата
if ( ( v1 % v2 % v3 % v4 ) & 1 ) { return true; } else { return false; }
}
Конечно, код можно упростить, но так будет понятнее что и зачем.
Замечу, что значения берутся с аналоговых пинов и поэтому каждая микросхема может вести себя по-разному.
Тест на случайность
Было сгенерировано 9000 нажатий. Положительных ответов 57%, отрицательных 43%. Данные были разделены на группы по 1000 элементов и был проведен расчет корреляции между всеми возможными парами столбцов. Средний коэффициент корреляции получился -0,00927, что говорит об почти полном отсутствии связи между последовательностями ответов.
Считаю, что данный вид случайной генерации можно считать приемлемой.
Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
✓ Live Streaming✓ Interactive Chat✓ Private Shows✓ HD Quality✓ Free Actions
Free to watch • No registration required • HD streaming
ARDUINO DROID @ardudroid-blog - Tumblr Blog | Tumlook