Курс Arduino — Время и Random

Время и рандом. Реакция

В этот раз мы узнаем, что такое «Случайные» значения, а также научимся работать со временем.

Нам понадобятся:

  • Кнопка тактовая
  • Пищалка
  • Провода соединительные «ПАПА- ПАПА»

Реакция

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

При нажатии на левую кнопку, раздается сигнал через «случайное» время. А при нажатии на правую, отмечается, сколько времени прошло с писка до нажатия на правую кнопу.

Кто скилловый – пробует сам, а мы смотрим на схему.

Код

#define BUZ 8
#define START 9
#define STOP 7

int time; //Переменная для синхронизации

void setup()
{
Serial. begin(9600);

pinMode(START, INPUT_PULLUP);
pinMode(STOP, INPUT_PULLUP);
pinMode(BUZ, OUTPUT);
}

void loop()
{
if(digitalRead(START) == 0) // При нажатии на Кнопку СТАРТ..
{
int start_time = millis();// Запомним время нажатия
time = start_time; //Запишем его в глобальную переменную.

int Rand = random(0, 4000); //Сгенерим «случайную» задержку
time = time + Rand; //Прибавим время задержки
delay(Rand); //Подождем
tone(BUZ, 3000, 500); //Пищим!
}
if(digitalRead(STOP) == 0 && digitalRead(START) == 1)// При нажатии на кнопку СТОП…
{
int stop_time = millis(); //Запомним время остановки.
time = stop_time — time; // Вычислим разницу во времени.
Serial.println(«Time: «); // Выведем время в Сериал.
Serial.println(time);
delay(1000);
}
}

//Перед второй попыткой нажимай на кнопку СТАРТ снова.

Пояснения

int time;  Переменным(не всем), при их обозначении, не обязательно задавать какое-либо значение. Эту переменную мы использовали для того, чтобы связать два оператора if.

В С++ переменные, объявленные внутри цикла, не будут доступны в других циклах, потому что они действуют лишь внутри этого цикла. Это делается для того, чтобы предотвратить ошибки в программировании. Когда код программы разрастется, ты поймешь, о чем я говорю.

Чтобы переменная была доступна для нескольких операторов, нужно сделать ее глобальной. Т.е. объявить переменную вне функций.

millis(); Возвращает количество миллисекунд, прошедших с запуска программы.

Нам она нужна для того, чтобы отмерять количество времени, прошедшего от подачи сигнала до нажатия на кнопку.

random(min, max); Это генератор «случайных» чисел. Принимает два значения. Он генерирует число в диапазоне от min  до max.

«Случайные» числа потому, что это определенная последовательность значений. Очень длинная, но одна и та же. Для того чтобы получать разные последовательности, стоит воспользоваться Random Seed();

Она, функция, инициализирует генератор. А если задать параметром случайный, то мы будем получать нужные нам последовательности. Одинаковая последовательность будет, если параметр будет фиксированным.

Вывод

Теперь ты можешь тренировать свою реакцию с помощью собственноручно сделанного устройства. А можешь продолжать заниматься дальше.

Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот

Плата ArduinoArduino Uno1

Макетная платаBreadboard-half1

ПьезоизлучательПассивный1

Кнопка тактоваяБез фиксатора2

Соединительные провода"Папа-Папа"1
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Добавить комментарий

Ваш адрес email не будет опубликован.