Главная » Arduino
Призовой фонд
на май 2017 г.
1. Тестер компонентов MG328
Паяльник
2. Осциллограф DSO138
Паяльник
3. Регулируемый паяльник 60 Вт
Паяльник
4. 100 руб.
От пользователей

Похожие статьи:


Курс 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 Поиск в FivelВ блокнот
Макетная платаBreadboard-half1 Поиск в FivelВ блокнот
ПьезоизлучательПассивный1 Поиск в FivelВ блокнот
Кнопка тактоваяБез фиксатора2 Поиск в FivelВ блокнот
Соединительные провода"Папа-Папа"1 Поиск в FivelВ блокнот
Добавить все

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

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

Теги:

Опубликована: 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (4) | Я собрал (0) | Подписаться

0
Серёга #
Почему "tone(BUZ, 3000, 500);" работает только в этом примере. Пробовал вставлять в другие проекты, компилятор выдаёт ошибку.
Ответить
0

[Автор]
Симилячник #
Код, пожалуйста!
Вы переименовывали пин BUZ? Может быть ошибка синтаксиса. Если будет код, постараюсь помочь.
Ответить
0
Серёга #
Вот во вложении файл.
Прикрепленный файл: IK-peredat.ino
Ответить
0
Серёга #
Tone.cpp.o (symbol from plugin): In function `timer0_pin_port':

(.text+0x0): multiple definition of `__vector_7'

libraries\RobotIRremote\IRremote.cpp.o (symbol from plugin):(.text+0x0): first defined here

collect2.exe: error: ld returned 1 exit status

exit status 1
Ошибка компиляции для платы Arduino/Genuino Uno.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Arduino UNO
Arduino UNO
Печатная плата для усилителя "LM3886 + AD825" Pickit 2 - USB-программатор PIC-микроконтроллеров
вверх