Секундомер на Arduino nano

Bemp0_Green
Offline
Зарегистрирован: 28.10.2017

Вообщем цель следующая: при прохождении первого датчика, начинается осчет времени, при прохождении второго- прекращается и значение временя в милисекундах выводится на экран; пробывал написать( переделать) код прошивки(за основу взят хронограф), однако в этом не силен; помогите исправить ошибки и записать новый кода, заранее спасибо! Датчики- ик светодиоды и ик фототранзисторы

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(" "); 
    
qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Вот новичкам надо обязательно пройти тест на "вменяемость"http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

ПС: А так же веруете в переполнение millis() или нет.

5N62V
Offline
Зарегистрирован: 25.02.2016

Ну косяков в коде много, но тпк по идее должен работать:

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(" "); }
    }

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

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