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