Секундомер на Arduino nano
- Войдите на сайт для отправки комментариев
Сб, 28/10/2017 - 21:22
Вообщем цель следующая: при прохождении первого датчика, начинается осчет времени, при прохождении второго- прекращается и значение временя в милисекундах выводится на экран; пробывал написать( переделать) код прошивки(за основу взят хронограф), однако в этом не силен; помогите исправить ошибки и записать новый кода, заранее спасибо! Датчики- ик светодиоды и ик фототранзисторы
int gap1=2; //2 цифровой пин для первого датчика
int gap2=3; //3 цифровой пин для второго датчика
int initial=0; //первый запуск
int n=1; //номер выстрела
float length=0.148; //расстояние между датчиками в метрах
volatile int flag1,flag2; //флажки для хранения состояния пролетания пулей датчиков
volatile unsigned long mark2; //отметки времени прохождения пулей датчиков
void setup()
{
pinMode(gap1, INPUT); //Настраиваем контакт 2
pinMode(gap2, INPUT); //Настраиваем контакт 3
Serial.begin(9600); //открываем COM порт
attachInterrupt(1,start,RISING); //прерывание при прохождении первого датчика
attachInterrupt(0,finish,RISING); //прерывание при прохождении второго датчика
}
void start()
{
}
void finish()
{
mark2=micros();
flag2=1; //прошли второй датчик, время запомнили
}
void loop()
{
if (initial==0) {
flag1=0;
flag2=0;
Serial.println("System is ready, just pull the f*ckin trigger!"); //уведомление о том, что хрон готов к работе. Вылезает при включении
Serial.println(" ");
initial=1;
if (flag2==1 && flag1==1) { //(если пуля прошла оба датчика)
//вычисление энергии
//вывод номера выстрела
Serial.print("mark2: ");
Serial.println(mark2); //вывод скорости в COM
//вывод энергии в COM
Serial.println(" ");
Вот новичкам надо обязательно пройти тест на "вменяемость"http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
ПС: А так же веруете в переполнение millis() или нет.
Ну косяков в коде много, но тпк по идее должен работать:
int gap1=2; //2 цифровой пин для первого датчика int gap2=3; //3 цифровой пин для второго датчика int initial=0; //первый запуск int n=1; //номер выстрела float length=0.148; //расстояние между датчиками в метрах volatile int flag1,flag2; //флажки для хранения состояния пролетания пулей датчиков volatile unsigned long mark2; //отметки времени прохождения пулей датчиков void setup() { pinMode(gap1, INPUT); //Настраиваем контакт 2 pinMode(gap2, INPUT); //Настраиваем контакт 3 Serial.begin(9600); //открываем COM порт attachInterrupt(1,start,RISING); //прерывание при прохождении первого датчика attachInterrupt(0,finish,RISING); //прерывание при прохождении второго датчика } void start() { mark2=micros(); flag1 = 1; } void finish() { mark2=micros()-mark2; flag2=1; //прошли второй датчик, время запомнили } void loop() { if (initial==0) { flag1=0; flag2=0; Serial.println("System is ready, just pull the f*ckin trigger!"); Serial.println(" "); initial=1;} if (flag2==1 && flag1==1) { //(если пуля прошла оба датчика) //вычисление энергии //вывод номера выстрела Serial.print("mark2: "); Serial.println(mark2); //вывод скорости в COM initial=0; Serial.println(" "); } }здесь смотри, как нужно правильно считать время класс титановый велосипед StopWatch.