Курс 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.
В C++ змінні, оголошені всередині циклу, не будуть доступні в інших циклах, так як вони діють тільки всередині цього циклу. Це робиться для того, щоб запобігти помилкам у програмуванні. Коли код програми розростеться, ти зрозумієш, про що я говорю.
Щоб змінна була доступна для кількох операторів, потрібно зробити її глобальною. Тобто, оголосити змінну поза функціями.
millis(); Повертає кількість мілісекунд, що пройшли з запуску програми.
Нам вона потрібна для того, щоб вимірювати кількість часу, що минуло від подачі сигналу до натискання на кнопку.
random(min, max); Це генератор «випадкових» чисел. Приймає два значення. Він генерує число в діапазоні від min до max.
«Випадкові» числа тому, що це певна послідовність значень. Дуже довга, але одна і та ж. Для того щоб отримувати різні послідовності, варто скористатися Random Seed();
Вона, функція, ініціалізує генератор. А якщо задати параметром випадковий, то ми будемо отримувати потрібні нам послідовності. Однакова послідовність буде, якщо параметр буде фіксованим.
Висновок
Тепер ти можеш тренувати свою реакцію за допомогою власноруч зробленого пристрою. А можеш продовжувати займатися далі.
Список радіоелементів
Позначення | Тип | Номінал | Кількість | Примітка |
---|---|---|---|---|
Плата Arduino |
Arduino Uno
|
1 | ||
Макетна плата | Breadboard-half | 1 | ||
П'єзоелемент | Пасивний | 1 | ||
Кнопка тактова | Без фіксатора | 2 | ||
З'єднувальні провода | "Папа-Папа" | 1 |
Прикреплені файли:
- Time.ino (1 Кб)