Program rozpoznaje pojedyncze i podwójne klaśnięcia na RPi

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
#include <wiringPi.h>
#include <stdio.h>
#include <iostream>


#define SOUNDPIN 7
extern void exit(int);

int zgloszenie=0;
using namespace std;

void przerwanie(void)
{
        zgloszenie=1;
}

int setup()
{       //inicjacja wiringPi i  podpięcie funkcji przerwania
        if (   wiringPiSetup()==-1
            || wiringPiISR(SOUNDPIN, INT_EDGE_BOTH, &przerwanie) <0)
                exit(1);

        return 0;
}

int main()
{
        int licznik=0;
        int dlugoscKlasniecia=0;
        bool liczy = false;
        setup();
        while(1)
        {
                if (zgloszenie)
                {
    //                     cout<< "Przerwanie, wywołanie nr: " << ++licznik  << "," << dlugoscKlasniecia<<"\n";
                         zgloszenie = 0;
                        if (!liczy) liczy = true;
                        if (dlugoscKlasniecia < 20)
                        {
                                cout << "Podwojne\n" ;
                                liczy = false;
                        }

                        dlugoscKlasniecia=0;

                }
                else
                        dlugoscKlasniecia++; //zwieksza sie odleglosc od ostatniego klasniecia

                if (liczy &&  dlugoscKlasniecia>20)
                {
                        cout << "Pojedyncze\n";
                        liczy = false;

                }
                delay(30); //ominięcie
  }
        return 0;
}