Raspberry PI пуск по кнопке C++

Тема в разделе "Raspberry Pi", создана пользователем art_nostrik, 3 июн 2016.

  1. art_nostrik

    art_nostrik Нуб

    Всем доброго времени суток!
    Озадачился такой проблемой: надо записывать длительность состояния датчика (на данный момент кнопка) в сработанном состоянии. Если с таймером разобрался и условия пуска остановки есть, то ожидание заставить ждать программу не могу или в бесконечном цикле вывода "нажмите кнопку" или просто заканчивает после вывода "нажмите кнопку".
    Привожу вариант с бесконечным выводом "нажмите кнопку":
    Код (C++):
    #include <bcm2835.h>
    #include <time.h>
    #include <sys/time.h>
    #include <sys/times.h>
    #include <iostream>
    #include <stdio.h>
    #include <unistd.h>
    #include <stdlib.h>
    #include <math.h>

    #define PIN RPI_V2_GPIO_P1_12 // Для RPi версии 2 дентификатор PIN меняем на конкретный идентификатор (в данном случае RPI_V2_GPIO_P1_12)
    #define PIN_IN RPI_V2_GPIO_P1_16 //

    //****Описание счётчика времени****//
    long mtime() {
      struct timespec t1;

      clock_gettime(CLOCK_MONOTONIC_RAW, &t1); //часы с постоянно увеличивающимся счётчиком, не подвержен изменению через NTP
      long mt = (long)t1.tv_sec * 1000000 + t1.tv_nsec / 1000;
      return mt;
    }

    long ctime() {
      struct timespec t2;

      clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &t2);//возвращение времени затраченного процессором относительно данного приложения в независимости от других задач
      long ct = (long)t2.tv_sec * 1000000 + t2.tv_nsec / 1000;
      return ct;
    }


    using namespace std;
     
    int i;

    int main  ()
    {
      long t,t1,t2;
     
      if (!bcm2835_init()) //инизиализация GPIO
        return 1; //завершение программы, если инизиализация не удалась

      bcm2835_gpio_fsel(PIN, BCM2835_GPIO_FSEL_OUTP); //установка порта P1_12 на вывод
      bcm2835_gpio_fsel(PIN_IN, BCM2835_GPIO_FSEL_INPT); //установка порта на вход

      do { printf("нажмите кнопку\n");
        if(bcm2835_gpio_lev(PIN_IN)) break;
         }
      while (!bcm2835_gpio_lev(PIN_IN));
       
      if (bcm2835_gpio_lev(PIN_IN))
        {i == 1;
         t1 = mtime();
         t2 = ctime();}
     

      while (1)
         {
           while (i=1)
         {
              bcm2835_gpio_write(PIN, LOW); //при значении порта 0 диод горит
              bcm2835_delay(50); //выдержка времени заданная в миллесикундах
              bcm2835_gpio_write(PIN, HIGH); //при значении не горит
              bcm2835_delay(70);
         
          if(!bcm2835_gpio_lev(PIN_IN), i = 1)
                    {
                      t1 = mtime() - t1; //вычисление затраченного време
                      t2 = ctime() - t2;
                      t = t1 - t2;
                      cout << "Время выполнения микроcекунд: " << t << endl;
                      printf("time: %ld microseconds\n",t);
            }
                      i == 0;
                      return 0;
              //}
           }
         }
    return 0;
    }
     
    Подскажите пожалуйста, как заставить ждать нажатия кнопки после единственного вывода "нажмите кнопку"?

    За ранее благодарю!