Создание автоматического секундомера для бегунов, спортсменов и спортсменов

Попробуйте наш инструмент устранения неполадок





В этом посте мы собираемся создать секундомер, который автоматически запускает таймер, когда бегун начинает работать, и таймер останавливается, когда бегун достигает конца. Время, прошедшее между начальной и конечной точкой, отображается на ЖК-дисплее размером 16 x 2.

Сначала давайте начнем с изучения того, как настроить простую и чрезвычайно точную схему секундомера Arduino.



Секундомер - это устройство для измерения времени с ручным управлением, предназначенное для измерения времени, которое могло пройти, начиная с определенного момента времени, когда он был активирован, и до момента, когда он был окончательно деактивирован. секундомер, который используется для наблюдения за происходящим на расстоянии и обычно находится на спортивном стадионе и т. д.

Механический против электронного секундомера

Раньше традиционные механические ручные секундомеры были более распространены и использовались всеми для этой цели.



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

Механический стоп-часы в основном работали за счет силы пружины, для чего требовалось заводить период вручную, поворачивая ручку с накаткой в ​​верхней части часового устройства.

Однако по сравнению с современными цифровыми секундомерами их механические типы можно считать довольно примитивными и неточными в диапазоне миллисекунд.

Использование Arduino

И сегодня, с появлением микроконтроллеров, эти секундомеры стали чрезвычайно точными и надежными до микросекундного диапазона.

Схема секундомера Arduino, представленная здесь, является одной из этих современных разработок с питанием от микроконтроллера, которая, как можно ожидать, наиболее точна, чтобы соответствовать коммерческим современным гаджетам секундомера.

Давайте узнаем, как построить предложенную схему стоп-часов Arduino:

Для строительства вам понадобится следующая ведомость материалов:

Требуется оборудование

Экран для ЖК-клавиатуры Arduino (Артикул: DFR0009)

Экран для ЖК-клавиатуры Arduino (Артикул: DFR0009)

Плата Arduino ONE

Arduino UNO

USB-кабель Arduino

arduino usb кабель

После того, как вы приобрели вышеуказанный материал и соединили их друг с другом, нужно просто настроить следующий приведенный код эскиза на вашу плату Arduino и наблюдать за магией функций секундомера.

Код

/*
Standalone Arduino StopWatch
By Conor M - 11/05/15
Modified by Elac - 12/05/15
*/
// call the necessary libraries
#include
#include
// these are the pins used on the shield for this sketch
LiquidCrystal lcd(8, 13, 9, 4, 5, 6, 7)
// variables used on more than 1 function need to be declared here
unsigned long start, finished, elapsed
boolean r = false
// Variables for button debounce time
long lastButtonPressTime = 0 // the last time the button was pressed
long debounceDelay = 50 // the debounce time keep this as low as possible
void setup()
{
lcd.begin(16, 2) // inicialize the lcd (16 chars, 2 lines)
// a little introduction :)
lcd.setCursor(4, 0) // set the cursor to first character on line 1 - NOT needed (it sets automatically on lcd.begin()
lcd.print('Arduino')
lcd.setCursor(3, 1) // set the cursor to 4th character on line 2
lcd.print('StopWatch')
delay(2000) // wait 2 seconds
lcd.clear() // clear the display
lcd.print('Press select for')
lcd.setCursor(2, 1) // set the cursor to 3rd character on line 2
lcd.print('Start & Stop')
}
void loop()
{
CheckStartStop()
DisplayResult()
}
void CheckStartStop()
{
int x = analogRead (0) // assign 'x' to the Arduino's AnalogueInputs (Shield's buttons)
if (x 600 ) // if the button is SELECT
{
if ((millis() - lastButtonPressTime) > debounceDelay)
{
if (r == false)
{
lcd.clear()
lcd.setCursor(2, 0) // needed
lcd.print('Elapsed Time')
start = millis() // saves start time to calculate the elapsed time
}
else if (r == true)
{
lcd.setCursor(2, 0) // needed
lcd.print(' Final Time ')
}
r = !r
}
lastButtonPressTime = millis()
}
}
void DisplayResult()
{
if (r == true)
{
finished = millis() // saves stop time to calculate the elapsed time
// declare variables
float h, m, s, ms
unsigned long over
// MATH time!!!
elapsed = finished - start
h = int(elapsed / 3600000)
over = elapsed % 3600000
m = int(over / 60000)
over = over % 60000
s = int(over / 1000)
ms = over % 1000
// display the results
lcd.setCursor(0, 1)
lcd.print(h, 0) // display variable 'h' - the 0 after it is the
number of algorithms after a comma (ex: lcd.print(h, 2) would print
0,00
lcd.print('h ') // and the letter 'h' after it
lcd.print(m, 0)
lcd.print('m ')
lcd.print(s, 0)
lcd.print('s ')
if (h <10)
{
lcd.print(ms, 0)
lcd.print('ms ')
}
}
}

Добавление 7-сегментного дисплея

Теперь давайте перейдем к деталям построения схемы секундомера с использованием 7-сегментного светодиодного дисплея и Arduino. Мы будем изучать концепции, связанные с прерываниями и ИС драйверов дисплея, которые имеют решающее значение для понимания этого проекта. Этот проект был предложен г-ном Абу-Хафссом, одним из активных читателей этого веб-сайта.

Как мы уже знаем, секундомер - это устройство, которое помогает отслеживать короткий промежуток времени от часов до миллисекунд (в основном). Практически все дешевые цифровые наручные часы оснащены функцией секундомера, но ни одна из них не может дать вам особого удовольствия от их изготовления, а также наличие секундомера с 7-сегментным светодиодным дисплеем - исключительное явление.

Г-н Абу-Хафсс предложил нам разработать конфигурацию секундомера с 4 дисплеями, два для минут и два для секунд (MM: SS). Но для большинства из нас это может оказаться невыполнимым проектом, поэтому мы добавили еще два дисплея для миллисекундного диапазона, поэтому теперь предлагаемый дизайн будет в конфигурации MM: SS: mS.

Если по какой-то причине вам просто нужна конфигурация MM: SS, вам не нужно подключать 7-сегментные дисплеи миллисекундного диапазона и их драйверные ИС, все функциональные возможности схемы по-прежнему не будут затронуты.

Схема:

Предлагаемый секундомер состоит из шести микросхем IC 4026, которые представляют собой драйвер семисегментного дисплея, шести семисегментных светодиодных дисплеев, одной платы Arduino, пары кнопок и пары резисторов 10K.

Теперь давайте разберемся, как подключить IC 4026 к 7-сегментному дисплею.

7-сегментный дисплей может быть любым обычным катодным дисплеем любого цвета. 7-сегментный дисплей может быть легко отключен от источника питания 5 В, поэтому резистор 330 Ом является обязательным для каждого сегмента дисплея.

Теперь давайте посмотрим на схему выводов IC 4026:

  • Контакт №1 - это вход часов.
  • Контакт №2 - это отключение часов, он отключает счетчик на дисплее, если этот контакт высокий.
  • Контакт №3 активен для отображения, если этот вывод низкий, дисплей будет отключен, и наоборот.
  • Вывод № 5 находится в рабочем состоянии и становится высоким, когда IC считает 10.
  • Контакты 6, 7, 9, 10, 11, 12, 13 являются выходами дисплея.
  • Контакт № 8 - GND.
  • Контакт 16 - это Vcc.
  • Вывод №15 сбрасывается, если на этом выводе высокий уровень, счетчик становится равным нулю.
  • Контакты №4 и №14 не используются.

Схема подключения дисплея:

Схема подключения ЖК-дисплея:

Любой из выводов GND 7-сегментного дисплея может быть подключен к земле. Микросхема должна питаться от источника питания 5 В или от выходного контакта 5 В. Arduino.

Приведенная выше схема только для одного дисплея, повторите то же самое для пяти других дисплеев.

Вот остальная часть схемы:

Секундомер с использованием Arduino с 7-сегментным дисплеем

Схема может питаться от батареи 9 В. Здесь есть две кнопки: одна для запуска отсчета времени, а другая для остановки. При нажатии кнопки сброса на Arduino счетчик времени будет сброшен до нуля на дисплее.

Две кнопки подключены к контактам №2 и №3, которые являются аппаратным прерыванием микроконтроллера Arduino / Atmega328P.

Давайте разберемся, что такое прерывание:

Есть два типа прерываний: аппаратное прерывание и программное прерывание. Здесь мы используем только аппаратное прерывание.

Прерывание - это сигнал микроконтроллеру, который заставляет микроконтроллер немедленно реагировать на событие.

На платах Arduino с микроконтроллером ATmega328P контакты №2 и №3 есть только два вывода аппаратного прерывания. Arduino Mega имеет более двух контактов аппаратного прерывания.

Микроконтроллеры не могут выполнять две функции одновременно. Например, проверка нажатия кнопок и подсчет чисел.

Микроконтроллеры не могут выполнять два события одновременно, если мы напишем код для проверки нажатия кнопки и подсчета чисел, нажатие кнопки будет обнаружено только тогда, когда микроконтроллер считывает фрагмент кода обнаружения нажатия кнопки, в остальное время (считает числа) кнопка не работает.

Таким образом, будет задержка в обнаружении нажатия кнопки, и по какой-то причине, если код будет временно остановлен, нажатие кнопки может никогда не быть обнаружено. Чтобы избежать подобных проблем, вводится прерывание.

Сигналу прерывания всегда дается наивысший приоритет, основная функция (основные строки кода) будет остановлена ​​и выполнит функцию (другой фрагмент кода), назначенную для этого конкретного прерывания.

Это очень важно для критичных ко времени приложений, таких как секундомер, системы безопасности и т. Д., Где процессору необходимо немедленно принять меры в ответ на событие.

В Arduino мы назначаем аппаратное прерывание как:

attachInterrupt (0, начало, Восход)

  • «0» означает нулевой номер прерывания (в микроконтроллерах все начинается с нуля), то есть вывод №2.
  • «Start» - это имя функции прерывания, здесь вы можете назвать что угодно.
  • «RISING», если на выводе № 2 (который является нулевым прерыванием) устанавливается высокий уровень, выполняется функция прерывания.

attachInterrupt (1, Стоп, Восход)

  • «1» означает прерывание номер один, которое является контактом №3.
  • «Стоп» - это имя прерывания.

Мы также можем заменить «RISING» на «FALLING», теперь, когда вывод прерывания становится НИЗКИМ, выполняется функция прерывания.

Мы также можем заменить «RISING» на «CHANGE», теперь всякий раз, когда вывод прерывания переходит с высокого на низкий или с низкого на высокий, функция прерывания выполняется.

Функция прерывания может быть назначена следующим образом:

void start () // start - это имя прерывания.

{

// программа здесь

}

Функция прерывания должна быть как можно короче, а функцию delay () использовать нельзя.

На этом мы завершим описание программного прерывания аппаратного прерывания, связанного с Arduino, которое будет объяснено в следующей статье.

Теперь вы знаете, почему мы соединили кнопки пуска и останова для прерывания контактов.

Подключите схему согласно схеме, остальная часть схемы не требует пояснений.

Программа:

//----------------Program Developed by R.GIRISH---------------//
int vmin = 0
int vsec = 0
int vms = 0
boolean Run = false
const int Min = 7
const int sec = 6
const int ms = 5
const int reset_pin = 4
void setup()
{
pinMode(Min, OUTPUT)
pinMode(sec, OUTPUT)
pinMode(ms, OUTPUT)
pinMode(reset_pin, OUTPUT)
digitalWrite(Min, LOW)
digitalWrite(sec, LOW)
digitalWrite(ms, LOW)
digitalWrite(reset_pin, HIGH)
digitalWrite(reset_pin, LOW)
attachInterrupt(0, start, RISING)
attachInterrupt(1, Stop, RISING)
}
void loop()
{
if (Run)
{
vms = vms + 1
digitalWrite(ms, HIGH)
delay(5)
digitalWrite(ms, LOW)
delay(5)
if (vms == 100)
{
vsec = vsec + 1
digitalWrite(sec, HIGH)
digitalWrite(sec, LOW)
vms = 0
}
if (vsec == 60)
{
vmin = vmin + 1
digitalWrite(Min, HIGH)
digitalWrite(Min, LOW)
digitalWrite(reset_pin, HIGH)
digitalWrite(reset_pin, LOW)
vsec = 0
}
}
}
void start()
{
Run = true
}
void Stop()
{
Run = false
}
//----------------Program Developed by R.GIRISH---------------//

На этом код завершен.

Секундомер, специально разработанный для спортсменов

Наконец, давайте узнаем, как эти концепции могут быть на самом деле усовершенствованы для спортсменов, которые хотят развить свои беговые навыки, не полагаясь на других при запуске и остановке таймера / секундомера. Лучше автоматически запускать таймер, обнаруживая ваше движение, чем кто-то запускает / останавливает секундомер, что может также добавить время реакции.

ПРИМЕЧАНИЕ. Этот проект разработан для измерения времени между точкой «A» и точкой «B», которое может быть покрыто ОДНИМ пользователем за раз.

Установка состоит из двух лазеров, размещенных в начальной и конечной точке, два LDR также размещены напротив двух лазерных модулей. Когда спортсмен выключает «стартовый» лазер, время начинает отсчитываться, а когда спортсмен достигает конца, прерывает «конечный» лазер, и таймер останавливается и отображает время, прошедшее между двумя точками. Это метод, используемый для измерения прошедшего времени в предлагаемой идее.

Давайте подробно рассмотрим каждый компонент схемы.

Компоненты Рабочие детали

Схема довольно проста, она состоит из ЖК-модуля 16 x 2, нескольких резисторов, двух LDR и кнопки.

Интерфейс между ЖК-дисплеем и Arduino является стандартным, мы можем найти подобное соединение во многих других проектах на основе ЖК-дисплеев.

Два аналоговых контакта A0 и A1 используются для обнаружения прерываний лазера. Аналоговый контакт A2 соединен с кнопкой, которая используется для включения секундомера.

Три резистора, два 4,7 кОм и один 10 кОм - это понижающие резисторы, которые помогают входным контактам оставаться на низком уровне.

Потенциометр 10K предназначен для регулировки контрастности в ЖК-модуле для оптимальной видимости.

Предложенная схема разработана с механизмом обнаружения неисправностей для лазеров. Если какой-либо из лазеров неисправен или неправильно выровнен с LDR, он отображает сообщение об ошибке на ЖК-дисплее.

· Если лазер СТАРТ не работает, отображается сообщение «Старт лазер не работает»

· Если лазер STOP не работает, отображается сообщение «Стоп, лазер не работает»

· Если оба лазера не работают, отображается «Оба лазера не работают»

· Если оба лазера работают нормально, отображается «Оба лазера работают нормально»

Сообщение об ошибке появляется до тех пор, пока не будет зафиксирован лазерный модуль или пока не будет выполнено правильное выравнивание с помощью LDR.

Как только на этом шаге нет проблем, система переходит в режим ожидания и отображает «-система в режиме ожидания-». На этом этапе пользователь может активировать установку, нажав кнопку в любое время.

При нажатии кнопки система готова к обнаружению движения от пользователя и отображает «Система готова».

Бегун может находиться в нескольких дюймах от «пускового» лазера.

Если «пусковой» лазер прерывается, время начинает отсчитываться, и на дисплее отображается «Время вычисляется ……». Время вычисляется в фоновом режиме.

Истекшее время не будет отображаться до тех пор, пока бегун не достигнет / не отключит «стоп» лазер. Это связано с тем, что отображение прошедшего времени на ЖК-дисплее, как это делает традиционный секундомер, требует выполнения нескольких дополнительных инструкций в микроконтроллере, что значительно ухудшает точность настройки.

ПРИМЕЧАНИЕ. Нажмите кнопку сброса на Arduino, чтобы сбросить показания.

Как установить схему на беговой дорожке:

Используйте толстые провода для соединения между LDR и цепью Arduino, так как расстояние между ними может составлять несколько метров, а напряжение не должно значительно падать. Расстояние между LDR1 и LDR2 может составлять максимум несколько сотен метров.

Как установить LDR:

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

LDR должен быть защищен от прямых солнечных лучей, поскольку он не может отличаться от лазерного луча и других источников света и может не регистрировать движение пользователя.

Программный код:

//-------- Program developed by R.GIRISH-------//
#include
LiquidCrystal lcd(12,11,5,4,3,2)
int strt = A0
int stp = A1
int btn = A2
int M = 0
int S = 0
int mS = 0
float dly = 10.0
void setup()
{
lcd.begin(16,2)
pinMode(strt,INPUT)
pinMode(stp,INPUT)
pinMode(btn,INPUT)
}
void loop()
{
if(digitalRead(strt)==HIGH && digitalRead(stp)==HIGH)
{
lcd.setCursor(0,0)
lcd.print('Both lasers are')
lcd.setCursor(0,1)
lcd.print(' working fine')
delay(4000)
{
while(digitalRead(btn)==LOW)
{
lcd.clear()
lcd.print('-System Standby-')
lcd.setCursor(0,1)
lcd.print('Press Start btn')
delay(100)
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('System is ready')
lcd.setCursor(0,1)
lcd.print('----------------')
while(digitalRead(strt)==HIGH)
{
delay(1)
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Time is being')
lcd.setCursor(0,1)
lcd.print('Calculated......')
while(digitalRead(stp)==HIGH)
{
delay(dly)
mS = mS+1
if(mS==100)
{
mS=0
S = S+1
}
if(S==60)
{
S=0
M = M+1
}
}
while(true)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print(M)
lcd.print(':')
lcd.print(S)
lcd.print(':')
lcd.print(mS)
lcd.print(' (M:S:mS)')
lcd.setCursor(0,1)
lcd.print('Press Reset')
delay(1000)
}
}
}
if(digitalRead(strt)==HIGH && digitalRead(stp)==LOW)
{
lcd.setCursor(0,0)
lcd.print(''Stop' laser is')
lcd.setCursor(0,1)
lcd.print(' not working')
delay(100)
}
if(digitalRead(strt)==LOW && digitalRead(stp)==HIGH)
{
lcd.setCursor(0,0)
lcd.print(''Start' laser is')
lcd.setCursor(0,1)
lcd.print(' not working')
delay(100)
}
if(digitalRead(strt)==LOW && digitalRead(stp)==LOW)
{
lcd.setCursor(0,0)
lcd.print('Both lasers are')
lcd.setCursor(0,1)
lcd.print(' not working')
delay(100)
}
lcd.clear()
}
//-------- Program developed by R.GIRISH-------//

Авторский прототип:

Обновление с помощью функции сплит-таймера

Предлагаемая схема автоматического секундомера с разделенным таймером является расширением схемы автоматического секундомера, где секундомер автоматически отслеживает время, как только бегун-одиночка покидает начальную точку, а таймер останавливается и показывает прошедшее время, когда бегун достигает конечной точки.

Вступление

Этот проект был предложен одним из заядлых читателей этого сайта г-ном Эндрю Уокером.

В этом проекте мы представляем еще 4 LDR для измерения промежуточного времени одиночного бегуна. Всего имеется 6 LDR, все они могут быть размещены на беговой дорожке с одинаковым расстоянием между ними или в зависимости от обстоятельств и выбора пользователя.

Большая часть оборудования осталась без изменений, за исключением добавления 4 LDR, но код претерпел огромные изменения.

Схематическая диаграмма, показывающая разделенное время:

Автоматический секундомер с разделением времени

Вышеупомянутая схема состоит из нескольких компонентов и удобна для новичков. Никаких дополнительных объяснений не требуется, просто подключите согласно принципиальной схеме.

Как подключить LDR:

LDR 2 показан на основной схеме. Подключите еще 4 LDR параллельно, как показано на схеме выше.

Схема расположения:

Выше приведены основные положения о том, как разместить лазер. Обратите внимание, что расстояние между LDR может быть выбрано пользователем в зависимости от длины трека.

Программа:

//------------Developed By R.Girish-------//
#include
LiquidCrystal lcd(12,11,5,4,3,2)
const int start = A2
const int strt = A0
const int END = A1
boolean y = true
boolean x = true
unsigned int s1 = 0
unsigned int s2 = 0
unsigned int s3 = 0
unsigned int s4 = 0
unsigned int s5 = 0
unsigned int m1 = 0
unsigned int m2 = 0
unsigned int m3 = 0
unsigned int m4 = 0
unsigned int m5 = 0
unsigned int ms1 = 0
unsigned int ms2 = 0
unsigned int ms3 = 0
unsigned int ms4 = 0
unsigned int ms5 = 0
unsigned int S = 0
unsigned int M = 0
unsigned int mS = 0
unsigned int count = 0
void setup()
{
lcd.begin(16,2)
pinMode(start, INPUT)
pinMode(strt, INPUT)
pinMode(END, INPUT)
if(digitalRead(strt) == LOW)
{
while(true)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Start Laser is')
lcd.setCursor(0,1)
lcd.print(' not working')
delay(2500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Please align the')
lcd.setCursor(0,1)
lcd.print('lasers properly')
delay(2500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('and press reset.')
delay(2500)
}
}
if(digitalRead(END) == LOW)
{
while(true)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('All 5 lasers')
lcd.setCursor(0,1)
lcd.print('are misaligned')
delay(2500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Please align the')
lcd.setCursor(0,1)
lcd.print('lasers properly')
delay(2500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('and press reset.')
delay(2500)
}
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('-System Standby-')
lcd.setCursor(0,1)
lcd.print('Press Start btn')
if(digitalRead(start) == LOW)
{
while(x)
{
if(digitalRead(start) == HIGH)
{
x = false
}
}
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('System is ready')
lcd.setCursor(0,1)
lcd.print('----------------')
while(y)
{
if(digitalRead(strt) == LOW)
{
y = false
}
}
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Time is being')
lcd.setCursor(0,1)
lcd.print('Calculated....')
mS = 12
}
void loop()
{
delay(1)
mS = mS + 1
if(mS==1000)
{
mS=0
S = S+1
}
if(S==60)
{
S=0
M = M+1
}
if(digitalRead(END) == LOW)
{
count = count + 1
if(count == 1)
{
ms1 = mS
s1 = S
m1 = M
delay(500)
}
if(count == 2)
{
ms2 = mS
s2 = S
m2 = M
delay(500)
}
if(count == 3)
{
ms3 = mS
s3 = S
m3 = M
delay(500)
}
if(count == 4)
{
ms4 = mS
s4 = S
m4 = M
delay(500)
}
if(count == 5)
{
ms5 = mS
s5 = S
m5 = M
Display()
}
}
}
void Display()
{
ms1 = ms1 + 500
ms2 = ms2 + 500
ms3 = ms3 + 500
ms4 = ms4 + 500
ms5 = ms5 + 500
if(ms1 >= 1000)
{
ms1 = ms1 - 1000
s1 = s1 + 1
if(s1 >= 60)
{
m1 = m1 + 1
}
}
if(ms2 >= 1000)
{
ms2 = ms2 - 1000
s2 = s2 + 1
if(s2 >= 60)
{
m2 = m2 + 1
}
}
if(ms3 >= 1000)
{
ms3 = ms3 - 1000
s3 = s3 + 1
if(s3 >= 60)
{
m3 = m3 + 1
}
}
if(ms4 >= 1000)
{
ms4 = ms4 - 1000
s4 = s4 + 1
if(s4 >= 60)
{
m4 = m4 + 1
}
}
if(ms5 >= 1000)
{
ms5 = ms5 - 1000
s5 = s5 + 1
if(s5 >= 60)
{
m5 = m5 + 1
}
}
while(true)
{
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Spilt 1)')
lcd.print(m1)
lcd.print(':')
lcd.print(s1)
lcd.print(':')
lcd.print(ms1)
lcd.setCursor(0,1)
lcd.print('Split 2)')
lcd.print(m2)
lcd.print(':')
lcd.print(s2)
lcd.print(':')
lcd.print(ms2)
delay(2500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Split 3)')
lcd.print(m3)
lcd.print(':')
lcd.print(s3)
lcd.print(':')
lcd.print(ms3)
lcd.setCursor(0,1)
lcd.print('Split 4)')
lcd.print(m4)
lcd.print(':')
lcd.print(s4)
lcd.print(':')
lcd.print(ms4)
delay(2500)
lcd.clear()
lcd.setCursor(0,0)
lcd.print('Split 5)')
lcd.print(m5)
lcd.print(':')
lcd.print(s5)
lcd.print(':')
lcd.print(ms5)
lcd.setCursor(0,1)
lcd.print('---Press Reset--')
delay(2500)
}
}
//------------Developed By R.Girish-------//

Как работать с автоматическим секундомером:

• После завершения настройки сначала включите лазеры, а затем включите схему Arduino.
• Если все лазеры правильно выровнены с LDR, на дисплее не появится сообщение об ошибке. Если есть, выровняйте их правильно.
• Теперь на схеме отображается «Система в режиме ожидания». Теперь нажмите кнопку «Пуск», и отобразится «Система готова».
• В этот момент, когда одиночный игрок прерывает световой луч LDR 1, запускается таймер, и на нем отображается «Время вычисляется…».
• Как только игрок достигает конечной точки, то есть LDR 6, таймер останавливается, и он отображает 5-кратное время, записанное схемой.
• Пользователь должен нажать кнопку сброса на Arduino, чтобы сбросить таймер.
Почему этот автоматический секундомер не может отображать время в реальном времени на дисплее, как это делает традиционный секундомер (вместо этого он отображает статический текст «Время рассчитывается…»)?
Чтобы отображать время в реальном времени, Arduino должен выполнять дополнительные инструкции на ЖК-дисплее. Это добавит задержку от нескольких микросекунд до нескольких миллисекунд к основному фрагменту кода отслеживания времени, что приведет к неточным результатам.

Если у вас есть какие-либо дополнительные вопросы, пожалуйста, укажите их в разделе комментариев.




Предыдущая: Arduino LCD KeyPad Shield (SKU: DFR0009) Лист данных Следующая статья: Схема генератора случайного RGB света Arduino