Raspberry PI пуск по кнопке 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;
}Подскажите пожалуйста, как заставить ждать нажатия кнопки после единственного вывода «нажмите кнопку»?
За ранее благодарю!