-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathshakeNTinkle.cpp
61 lines (43 loc) · 1.55 KB
/
shakeNTinkle.cpp
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
#include "shakeNTinkle.h"
shakeNTinkle::shakeNTinkle(int inShakePin,int inTinklePin,float sumTime,int numData) {
shakeSum = 0;
tapSum = 0;
shakePin = inShakePin;
tinklePin = inTinklePin;
tapTimer = new timeObj(sumTime);
shake = new runningAvg(numData);
tinkle = new runningAvg(numData);
}
shakeNTinkle::~shakeNTinkle(void) {
if (tapTimer) delete(tapTimer);
if (shake) delete(shake);
if (tinkle) delete(tinkle);
}
// Setup the ports etc.
void shakeNTinkle::begin(void) {
pinMode(shakePin, INPUT); // Setup as input.
digitalWrite(shakePin, HIGH); // Pullups on!
pinMode(tinklePin, INPUT); // Setup as input.
digitalWrite(tinklePin, HIGH); // Pullups on!
hookup(); // Fire up the idle stuff..
tapTimer->start(); // Set the timer.
}
void shakeNTinkle::idle(void) {
if (!digitalRead(shakePin)) { // have shake!
while (!digitalRead(shakePin)); // hold 'till clear.
shakeSum++; // got a shake, add it.
}
if (!digitalRead(tinklePin)) { // have tap!
while (!digitalRead(tinklePin)); // hold 'till clear.
tapSum++; // got a tap, add it.
}
if (tapTimer->ding()) { // time to add the sums to the averagers?
shake->addData(shakeSum);
tinkle->addData(tapSum);
shakeSum = 0;
tapSum = 0;
tapTimer->stepTime();
}
}
float shakeNTinkle::getShake(void) { return shake->getAve(); }
float shakeNTinkle::getTinkle(void) { return tinkle->getAve(); }