Время и рандом. Реакция
В этот раз мы узнаем, что такое «Случайные» значения, а также научимся работать со временем.
Нам понадобятся:
- Кнопка тактовая
- Пищалка
- Провода соединительные «ПАПА- ПАПА»
Реакция
Наша задача на сегодня – собрать схему, которая позволяет узнать быстроту нашей реакции.
При нажатии на левую кнопку, раздается сигнал через «случайное» время. А при нажатии на правую, отмечается, сколько времени прошло с писка до нажатия на правую кнопу.
Кто скилловый – пробует сам, а мы смотрим на схему.
Код
#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();
Она, функция, инициализирует генератор. А если задать параметром случайный, то мы будем получать нужные нам последовательности. Одинаковая последовательность будет, если параметр будет фиксированным.
Вывод
Теперь ты можешь тренировать свою реакцию с помощью собственноручно сделанного устройства. А можешь продолжать заниматься дальше.
Список радиоэлементов
Обозначение | Тип | Номинал | Количество | Примечание | Магазин | Мой блокнот |
---|---|---|---|---|---|---|
Плата Arduino | Arduino Uno | 1 | ||||
Макетная плата | Breadboard-half | 1 | ||||
Пьезоизлучатель | Пассивный | 1 | ||||
Кнопка тактовая | Без фиксатора | 2 | ||||
Соединительные провода | "Папа-Папа" | 1 | ||||