Курс 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();

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

Вывод

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

Список радиоэлементов

Обозначение Тип Номинал Количество Примечание Магазин Мой блокнот
Плата Arduino Arduino Uno 1
Макетная плата Breadboard-half 1
Пьезоизлучатель Пассивный 1
Кнопка тактовая Без фиксатора 2
Соединительные провода "Папа-Папа" 1