Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.97/29: Рейтинг темы: голосов - 29, средняя оценка - 4.97
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
.NET 4.x

Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш

25.08.2016, 09:33. Показов 6859. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья, всем привет!
Очень давно не заходил на форум, не программировал очень давно, растерял со своей "памятью" все знания, прошу помощи с полезным делом! Хочу сделать на нашу старенькую горнолыжку (в моем поселке есть гора, на которой занимается спортивная секция) и порадовать народ "новыми технологиями" =) Как-то катаясь я услышал "вот бы и нам такую штуку сюда как фотофиниш, было бы здорово!" и подумал почему бы не попробовать? ...

И так, что я хочу собрать? Нужно собрать устройство, которое будет регистрировать момент старта участника и момент его пересечения финиша. Из железа а у меня есть микроконтроллер, на который я повешу датчики старта и датчики финиша (фотоэлемент, на который светит лазерный луч). Микроконтроллер будет подключаться по COM-порту и отправлять в програму всего 2 команды - "старт" и "финиш".

Что я хочу написать? Нужно написать простое и удобное приложение, которое при получении команды "старт" начинает отсчет времени в формате ЧЧ:ММ:СС:МС. При получении команды "финиш" таймер останавливается, и вносит запись в базу данных, или текстовый документ. Ах да, тут я не знаю как лучше, но наверное лучше подключить БД и в нее вбивать. Перед стартом организатор или судья должен заполнить таблицу участниками.

Вроде это все?

Прошу помочь на моем примере со следующим:
- в таймере настроить работу "миллисекунд"
- помочь с подключением COM-порта (как подключить и открыть я знаю, как отправить тоже знаю, а вот как мониторить постоянно порт и ждать команды старта или финиша - не знаю)
- помочь сделать простую БД с возможностью внесения в нее записей типа "ФИО|Группа|Время 1|Время 2|Время 3|" с сохранением.
- помочь сделать так, чтобы время таймера вносилось в поля "Время 1, 2, 3" постепенно по проезду каждого участника, ну или пока вручную. Впринципе на начальном этапе достаточно выводить мессадж о пересечении финиша и в нем указывать точное время, которое оператор перекопирует в столбик БД.

Из всего этого уже есть:
- примерная форма
- рабочий таймер (но без отсчета миллисекунд, они нужны)
- подключенная БД

Буду очень признателен если кто-нибудь скачает мой пример и с ним поможет собрать проект.
Миниатюры
Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш  
Вложения
Тип файла: zip timer.zip (3.44 Мб, 17 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.08.2016, 09:33
Ответы с готовыми решениями:

Сохранение времени для таймера
Здравствуйте, создавая секундомер в Windows Forms,столкнулся с такой проблемой, что после нажатия кнопки Start время автоматически...

Подбор времени для таймера для передвижение объекта за точное время
Здравствуйте. Как подобрать время таймера и скорость передвижение например pictorebox за точное время Например дано 3 секунды за которое...

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

38
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
26.08.2016, 11:46
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от SERGEY199100 Посмотреть сообщение
private void button4_Click(object sender, EventArgs e)
C#
1
2
3
{
 serialPort2.Close();
}
Надо дописать
C#
1
serialPort2.DataReceived -= serialPort2_DataReceived;
Добавлено через 54 секунды
Цитата Сообщение от SERGEY199100 Посмотреть сообщение
C#
1
double n = Convert.ToUInt16(label1.Text) / 10.24;
что это?
1
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
26.08.2016, 12:13  [ТС]
Цитата Сообщение от aquaMakc Посмотреть сообщение
что это?
- это автор заполнял прогресс-бар. Мне он не нужен.

Добавлено через 23 минуты
Возвращаясь к TextBoxN.Text. Так как я вывожу информацию из текстбокса в ячейку Excel, то возникает вопрос с форматами ячеек. Возможно ли сделать так, чтобы мы в итоге видели цифры формата 00:00:00.000? Так как Excel выводит, например 00:23:11.299, так: 23:11,3. Вроде не так страшно? Может и так оставить, вроде понятно, хотя могут придраться мол "нестандартное значение времени в спорте" (я кстати не знаю как в идеале выглядеть должно, пойду загуглю...)
0
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
26.08.2016, 14:02  [ТС]
Да... "01" час вообще потерялся... Так дело не пойдет... Куда он делся? (
Миниатюры
Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш  
0
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
26.08.2016, 14:20  [ТС]
Не пойму почему после подключения к порту программа пишет порт закрыт?
Ругается(Порт закрыт.) на строку:
C#
1
string POT = serialPort1.ReadLine();

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Media;
using System.Diagnostics;
using System.IO.Ports;
 
 
namespace timer
{
    public partial class Form1 : Form
    {
        Stopwatch stopwatch;
        public Form1()
        {
            InitializeComponent();
            stopwatch = new Stopwatch();
            //var lb = new Label { Font = new Font(FontFamily.GenericMonospace, 20), Parent = this, Top = 50, AutoSize = true };
            new Timer { Interval = 30, Enabled = true }.Tick += delegate { label33.Text = stopwatch.Elapsed.ToString(@"hh\:mm\:ss\.fff"); };
        }
 
 
        private void timer1_Tick(object sender, EventArgs e)
        {
 
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            
        }
 
        private void button8_Click(object sender, EventArgs e)
        {
            stopwatch.Reset();
            stopwatch.Start();
        }
 
        private void button9_Click(object sender, EventArgs e)
        {
            stopwatch.Stop();
            textBox1.Text = stopwatch.Elapsed.ToString(@"hh\:mm\:ss\.fff");
        }
 
        private void button8_Click_1(object sender, EventArgs e)
        {
            stopwatch.Start();
        }
 
        private void button1_Click_2(object sender, EventArgs e)
        {
            stopwatch.Reset();
        }
 
        private void button2_Click(object sender, EventArgs e)
        {
            try
            {
                Microsoft.Office.Interop.Excel.Application ObjExcel = new Microsoft.Office.Interop.Excel.Application();
                Microsoft.Office.Interop.Excel.Workbook ObjWorkBook;
                Microsoft.Office.Interop.Excel.Worksheet ObjWorkSheet;
                //Книга.
                ObjWorkBook = ObjExcel.Workbooks.Add(System.Reflection.Missing.Value);
                //Таблица.
                ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBook.Sheets[1];
 
                //Значения [y - строка,x - столбец]
                ObjWorkSheet.Cells[2, 1] = textBox293.Text;
                ObjWorkSheet.Cells[2, 2] = textBox294.Text;
                ObjWorkSheet.Cells[2, 3] = textBox295.Text;
                ObjWorkSheet.Cells[2, 4] = textBox296.Text;
                //Заполнение Exel данными из таблицы
                ObjWorkSheet.Cells[3, 1] = textBox6.Text;
                ObjWorkSheet.Cells[3, 2] = textBox5.Text;
                ObjWorkSheet.Cells[3, 3] = textBox7.Text;
                ObjWorkSheet.Cells[3, 4] = textBox8.Text;
 
                ObjWorkSheet.Cells[4, 1] = textBox10.Text;
                ObjWorkSheet.Cells[4, 2] = textBox9.Text;
                ObjWorkSheet.Cells[4, 3] = textBox11.Text;
                ObjWorkSheet.Cells[4, 4] = textBox12.Text;
 
                ObjWorkSheet.Cells[5, 1] = textBox14.Text;
                ObjWorkSheet.Cells[5, 2] = textBox13.Text;
                ObjWorkSheet.Cells[5, 3] = textBox15.Text;
                ObjWorkSheet.Cells[5, 4] = textBox16.Text;
 
                ObjWorkSheet.Cells[6, 1] = textBox18.Text;
                ObjWorkSheet.Cells[6, 2] = textBox17.Text;
                ObjWorkSheet.Cells[6, 3] = textBox19.Text;
                ObjWorkSheet.Cells[6, 4] = textBox20.Text;
 
                ObjWorkSheet.Cells[7, 1] = textBox22.Text;
                ObjWorkSheet.Cells[7, 2] = textBox21.Text;
                ObjWorkSheet.Cells[7, 3] = textBox23.Text;
                ObjWorkSheet.Cells[7, 4] = textBox24.Text;
 
                ObjWorkSheet.Cells[8, 1] = textBox26.Text;
                ObjWorkSheet.Cells[8, 2] = textBox25.Text;
                ObjWorkSheet.Cells[8, 3] = textBox27.Text;
                ObjWorkSheet.Cells[8, 4] = textBox28.Text;
 
                ObjWorkSheet.Cells[9, 1] = textBox30.Text;
                ObjWorkSheet.Cells[9, 2] = textBox29.Text;
                ObjWorkSheet.Cells[9, 3] = textBox31.Text;
                ObjWorkSheet.Cells[9, 4] = textBox32.Text;
 
                ObjWorkSheet.Cells[10, 1] = textBox35.Text;
                ObjWorkSheet.Cells[10, 2] = textBox33.Text;
                ObjWorkSheet.Cells[10, 3] = textBox39.Text;
                ObjWorkSheet.Cells[10, 4] = textBox42.Text;
 
                ObjWorkSheet.Cells[11, 1] = textBox37.Text;
                ObjWorkSheet.Cells[11, 2] = textBox34.Text;
                ObjWorkSheet.Cells[11, 3] = textBox40.Text;
                ObjWorkSheet.Cells[11, 4] = textBox43.Text;
 
                ObjWorkSheet.Cells[12, 1] = textBox38.Text;
                ObjWorkSheet.Cells[12, 2] = textBox36.Text;
                ObjWorkSheet.Cells[12, 3] = textBox41.Text;
                ObjWorkSheet.Cells[12, 4] = textBox44.Text;
 
                ObjWorkSheet.Cells[13, 1] = textBox47.Text;
                ObjWorkSheet.Cells[13, 2] = textBox45.Text;
                ObjWorkSheet.Cells[13, 3] = textBox51.Text;
                ObjWorkSheet.Cells[13, 4] = textBox54.Text;
 
                ObjWorkSheet.Cells[14, 1] = textBox49.Text;
                ObjWorkSheet.Cells[14, 2] = textBox46.Text;
                ObjWorkSheet.Cells[14, 3] = textBox52.Text;
                ObjWorkSheet.Cells[14, 4] = textBox55.Text;
 
                //Вызываем нашу созданную эксельку.
                ObjExcel.Visible = true;
                ObjExcel.UserControl = true;
            }
            catch (Exception с)
            {
                MessageBox.Show("Не удается сохранить результаты! Сохраните данные вручную не закрывая программу!");
            }
        }
 
        private void button4_Click(object sender, EventArgs e)
        {
            //Подключение к COM-порту
            try
            {
                System.IO.Ports.SerialPort serialPort1 = new System.IO.Ports.SerialPort();
                serialPort1.PortName = textBox4.Text; //="COM4"; //Настройки порта
                serialPort1.BaudRate = 9600;
                serialPort1.DataBits = 8;
                serialPort1.Parity = System.IO.Ports.Parity.None;
                serialPort1.StopBits = System.IO.Ports.StopBits.One;
                serialPort1.DtrEnable = true;
                serialPort1.RtsEnable = false;
                serialPort1.ReadTimeout = (1000);
                serialPort1.WriteTimeout = (1000);
                serialPort1.Open();
                serialPort1.DataReceived += serialPort1_DataReceived;
            }
            catch (Exception с)
            {
                MessageBox.Show("Устройство не найдено! Проверьте корректность подключения и имя COM-порта");
            }
 
        }
 
        private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
        {
            //serialPort1.Open();
            string POT = serialPort1.ReadLine();
            this.BeginInvoke(new LineReceivedEvent(LineReceived), POT);
        }
        private delegate void LineReceivedEvent(string POT);
        private void LineReceived(string POT)
        {
            label1.Text = POT;
            //double n = Convert.ToUInt16(label1.Text) / 10.24;
            //n = Math.Round(n, 0);
            //progressBar1.Value = (int)n;
        }
 
        private void button7_Click(object sender, EventArgs e)
        {
            serialPort1.Close();
            serialPort1.DataReceived -= serialPort1_DataReceived;
        }
 
        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            //Активация чекбокса автоматического финиша
        }
 
    }
 
        
}
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
26.08.2016, 15:40
Цитата Сообщение от SERGEY199100 Посмотреть сообщение
C#
1
System.IO.Ports.SerialPort serialPort1 = new System.IO.Ports.SerialPort();
))))))) потому-что в твоём коде порт существует только в процессе выполнения обработчика нажатия кнопки. Когда программа выходит из него порт уничтожается сборщиком мусора.
объяви SerialPort вне функций.

Добавлено через 13 минут
SERGEY199100, да, кстати, список портов в системе можно получить
C#
1
SerialPort.GetPortNames();
1
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
26.08.2016, 15:41  [ТС]
Да, чуть позже сделаю чтобы можно было их выбирать.
Почему не работает простетское условие:
C#
1
2
label1.Text = POT;
if (POT == "s") { MessageBox.Show("Ep!"); stopwatch.Start(); }
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
26.08.2016, 15:43
SERGEY199100, поставь точку останова и посмотри отладчиком точно ли там "s"
0
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
26.08.2016, 15:44  [ТС]
aquaMakc, в label выводится либо "s" либо "f" (это я передаю каждые 5 секунд в ком порт с контроллера либо s либо f). Но условие почему-то не видит эти s/f
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
26.08.2016, 15:47
Цитата Сообщение от SERGEY199100 Посмотреть сообщение
label выводится либо "s" либо "f"
может там "s\r" "s\n" или даже "s\r\n". Поставь точку останова и посмотри что конкретно содержится в POT.
2
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
26.08.2016, 15:49  [ТС]
Не знал раньше о таком! Спасибо )
POT "f\r" string
0
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
26.08.2016, 16:04  [ТС]
Все работает! Теперь надо как-то решить вопрос с форматом который выводится в Excel. Я видел где-то комментарии что можно принудительно ячейке задать формат, но что-то там у человека не получалось. Как автоматически проставлять в textBox1, 2, 3, 4, ... N текст из textBox0 по очереди?
Миниатюры
Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш  
0
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
29.08.2016, 08:51  [ТС]
Вроде придумал как заполнять текстбоксы. Проверяем каждый по очереди начиная с первого, если первый = null - вносим в него запись, следующий круг если певрый != null - вносим во второй текстбокс запись, и так далее по первому столбцу, потом дальше. Как вот только написать условие правильно? =)
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10428 / 5158 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
29.08.2016, 11:02
Цитата Сообщение от SERGEY199100 Посмотреть сообщение
Как вот только написать условие правильно? =)
Используйте либо DataGridView, либо ListView, либо собственный контрол. Но блин, не 100500 текстбоксов.
Тогда и вопросы костылей возникать не будут.
1
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
01.03.2017, 19:35  [ТС]
Всем привет!
Ну что, можно сказать система протестирована и введена в работу на одном из горнолыжных комплексов на Севере России официально =)

YouTube: ОМЕГА - Автоматическая система фотофиниша в действии. Горнолыжный склон Petsamo
Ссылка на Видео https://www.youtube.com/watch?v=zqybXF02qn8


НА ВИДЕО РЕЗУЛЬТАТ РАБОТЫ АВТОМАТИЧЕСКОЙ СИСТЕМЫ РЕГИСТРАЦИИ ФИНИШИРОВАНИЯ "ОМЕГА"

Соревнования прошли, система "О'МЕГА" прошла тестирование. За 3 дня была собрана конструкция из 3-х втыкающихся в снег стоек, с установленными на каждую датчиками. Одна из стоек - стартовый флажок, который отгибается и возвращается на место сам (сам - это значит не надо его трогать. Вот это есть "норма" а не тогда, когда контролер должен возвращать флажок вручную на место!), другие две стойки - система с микроконтроллером, которая обрабатывает всю информацию с датчиков, в том числе с флажка на старте, и с датчика, который регистрирует прерывание лазерного луча на на третьей стойке. Для удобства и понятности работы конструкции, для стартующего сделана световая индикация - "зеленый свет - можно стартовать", "красный свет - стартовать нельзя, жди". По идее, в таком случае, контроллер на верху просто говорит участнику - "Старт по готовности" (участник сам стартует без отмашки "на старт, внимание, марш!").

Для работоспособности всей этой железной части было разработано авторское программное обеспечение - две программы. Одна из программ устанавливается в ОМЕГУ, вторая программа - терминал на компьютере.

Программа в ОМЕГЕ: считывает показания со всех датчиков, регистрирует прерывание луча лазера, производит световую индикацию на стартовом столе (кстати есть еще и звуковая индикация, но я не стал ее включать). Всю информацию ОМЕГА отправляет на терминал.

Терминал на компьютере: это программа с человеко-понятным интерфейсом, с которым работает СУДЬЯ. В этой программе вбиваются все участники, производится подключение к ОМЕГЕ. Все работает автоматически. Как только участник стартует - запускается отсчет времени и судья просто сидит и "отдыхает". Как только участник пересекает финишную линию - секундомер в программе останавливается фиксирую время участника с точностью до тысячных миллисекунд! Далее СУДЬЯ просто копирует время и переносит его в ячейку финишировшего участника. Почему тут в ручную? Да потому что то кто-то замешкается, то кто-то стартует не по списку, или перезачет. После проезда всех двух попыток, занесенное время для каждого участника выгружается в таблицу Exel где всего в пару нажатий мышки проводится сортировка по времени и за 1 минуту выявляются призовые места.

ПЛЮСЫ использования данной системы:
0. 21 век! Теперь у нас есть рабочий прототип, чего нет у других!
1. Автоматизация процесса подсчета времени с исключением человеческого фактора "блин я не понял он чо стартанул?? Я же не засек!" или тому подобное.
2. Участники сами смотрят когда им стартовать. Если они не по списку, то судье по рации говорится номер участника и судья вбивает время этому номеру.
3. Включил и работает.
4. Сохранение результатов Exel
5. Моментальное определение победителей
6.Установка и настройка за 1 час (при 6 работниках)

МИНУСЫ, выявленные на этапе тестирования:
1. Луч на дистанции 3-4 метра менее сфокусированный и не бъет в точку, а бъет в ЖИРНУЮ точку размером в 2 см! Решение проблемы №1: использование 2-х лазеров, которые светят в одну точку. Решение проблемы №2: делаем более широкое окно куда светит лазер.
2. Падающий снег. Для фиксации пересечения лазерного луча на большой скорости и при проблеме, указанной в п.1 происходит ложное срабатывание лазера. Решение: указано в п.1.
3. Мороз и компьютер. Необходима переделка кабеля и установка компьютера в теплом помещении. Решение №1: финишные ворота ставятся рядом с домом, от финиша через USB-удлинители воткнутые друг за другом последовательно тянем их до окна. Решение №2: оставляем финиш где стоял, но пробуем сделать длинный "USB" кабель из "сетевого LAN-кабеля". Но тут неизвестно как поведет себя компьютер, возможны проблемы.
4. Несогласованность СУДЬИ и технического персонала. Необходимо перед проведением мероприятия конкретно говорить каждому его задачу и обязанности. Ознакомить с работой системы. Ознакомить с возникающими проблемами и способами их устранения. Это все делается уже по ходу работы с системой на этапах тестирования и настройки.

ИТОГО: Система отработала на 4+. Я не вижу минусов, кроме того, что луч ложно срабатывал. Это исправимо и не является проблемой, так что я бы поставил 5.

ФОТО ниже
Миниатюры
Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш   Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш   Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш  

Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш   Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш   Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш  

Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш   Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш   Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш  

Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш   Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш   Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш  

Пример для записи времени таймера в ячейку подключенной БД. Фотофиниш  
3
 Аватар для Людвиг Бодмер
378 / 375 / 213
Регистрация: 29.03.2013
Сообщений: 867
01.03.2017, 20:21
SERGEY199100, браво! Интересный проект получился. А фальстарт предусмотрен, если раньше времени на стартовый флажок надавить, или он просто не отогнется раньше времени? Тут основная работа и основные сложности всё же наверное были с "железной" частью: устройствами и датчиками, конструкцией. А что за микроконтроллер? на языке Си его программировали?
Спасибо за отчет, фото- и видеоматериалы
0
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
01.03.2017, 20:31  [ТС]
Спасибо за отзыв!) Да, фальшстарт предусмотрен. Стартовый стол имеет флажок, который отоводится в стороны и замыкает цепь (прерывание происходит). Флажок возвращается обратно в свою начальную позицию. Там же я сделал оптический сигнализатор "Зеленый и красный свет + бипер). Мы в контроллере (Arduino NANO) отслеживаем это событие. Как только оно произойдет, мы активируем проверку другого события - прерывание луча лазера на финише. Пока оно не произойдет - флажок можно задергаться - это никак не повлияет на отсчет участника который уже летит к финишу. Проблема у меня была с улавливанием лазерного луча. Стойки круглые и я полагаю они потихоньку разворачиваются от ветра или от тяжести замерзающих проводов. Но тут будет переделка, когда лень уйдет =) У меня в программе ловится перемена освещения фотодатчика в трубке. А трубка из белого материала - внешнее освещение ее засвечивало и мне приходилось подстраиваться под это. В новой версии это будет исправлено и я введу переменную "ошибка" которая по ПИД-составляющему алгоритму будет учитываться при проверке пересечения луча. Фотодатчик реагирует на пересечение луча снежинкой размером с 2-3 мм)) Это надо исправлять. У меня даже спор вышел с судьями. Я им говорю - "зачем вам автоматика если вы, динозавры, возвращаете флажок обратно вручную?". А они мне говорят - так принято. Ну елки палки... Как так принято? Я вам сделал так чтоб вы отдыхали и только следили за участником чтоб он не чудил на старте и все =) Старые привычки
1
 Аватар для Людвиг Бодмер
378 / 375 / 213
Регистрация: 29.03.2013
Сообщений: 867
01.03.2017, 21:17
SERGEY199100, да уж, спорт зачастую слишком консервативен, но современные технологии всё-равно берут своё и массово внедряются в нашу жизнь. Мне кажется, развернутая статья по этой теме с техническими подробностями будет интересна и на ресурсах типа хабр/гиктаймс. Но это конечно если вам это интересно, как хорошая реклама может сработать.
1
204 / 20 / 1
Регистрация: 29.10.2009
Сообщений: 430
03.03.2017, 12:31  [ТС]
Видео 2 В данном видео можно посмотреть как выглядит система в железном исполненииhttps://www.youtube.com/watch?v=28_fkaqGNgA
0
0 / 0 / 0
Регистрация: 19.06.2018
Сообщений: 1
19.06.2018, 12:11
SERGEY199100, Сергей, добрый день. Крайне интересен ваш результат. У нас в Раменском, ГРАД (Городская Раменская Авто Дружина) собирается провести гонки на трассе автодрома. Будет два этапа, скоростное маневрирование и слепое маневрирование. Вот мы и заморочились с системой фотофиниша. Нам крайне интересна ваша прога. Если не трудно и этот сайт работает, просьба выйти на связь на почту avtomagik@mail.ru. Очень ждем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.06.2018, 12:11

Как перенести данные в ячейку по записи в другую ячейку без использования макросов
Подскажите, пожалуйста, решение по задачке в эксел-е: 1. Файл эксел используется для взаимодействия с моделирующей программой. 2....

Пример таймера на PHP
Перелопатил всю имеющуюся у себя литературу про РНР, но ничего не нашол про таймер. Как мне заставить РНР отсчитыват время?

"Будильник". Задается время включения звукового сигнала и интервал времени для таймера
помогите исправить код, не повторяет повтор сигнала через заданное время Задание: Создать программу «Будильник» Задавать время...

Пример работы таймера AT90S2313 из книги Прокопенко В
Уважаемые форумчане! Помогите новичку, пожалуйста. Обучаюсь самостоятельно по книге Прокопенко "Программирование микроконтроллеров...

Настройка таймера времени
Получаю на сервере текущее время.Мне нужно вычесть из 24 часов текущее время и получить ,что осталось,24 часа- 1 час 30м 30с = 22 часа 30...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru