-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathqtouch.cpp
56 lines (50 loc) · 1.66 KB
/
qtouch.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
#include "qtouch.hpp"
NoteQtouch::NoteQtouch(qtouch_pin pin, PadSettings &pad) {
qt = Adafruit_FreeTouch(static_cast<uint8_t>(pin), OVERSAMPLE_64, RESISTOR_50K, FREQ_MODE_HOP);
_pin = pin;
_pad = pad;
//Hysteresis <uint8_t> hysteresis(10);
};
void NoteQtouch::begin() {
qt.begin();
qt_floor = qt.measure();
};
void NoteQtouch::calibrate() {
qt_floor = qt.measure();
};
void NoteQtouch::update(PadSettings pad) {
//int qt_measure = (( N * qt_measure ) + qt.measure() ) / ( N + 1 );
int qt_measure = qt.measure();
int roundOff = 10;
// int range = 1014 - qt_floor + roundOff;
// velocity = 127 * (qt_measure - qt_floor + roundOff) / range;
int range = 1014 - qt_floor;
velocity = 127 * (qt_measure - qt_floor) / range;
if((qt_measure > qt_floor + roundOff) && qt_memory == 0) {
qt_memory = qt_measure;
// sendNoteOn(velocity);
// Serial.print("Note On"); Serial.println(_pin);
// IgnoreNote = 0;
if (state == qtouch_state::off && state != qtouch_state::played) state = qtouch_state::touched;
};
// if((qt_measure < (qt_floor + roundOff)) && qt_memory != 0) qt_memory = 0;
if((qt_measure < (qt_floor + roundOff)) && qt_memory != 0) {
qt_memory = 0;
// sendNoteOff();
state = qtouch_state::off;
// sendAfterTouch();
}
if((qt_memory > 0) && (qt_memory != qt_measure)) {
qt_memory = qt_measure;
afterTouch = velocity * 2;
afterTouch = velocity;
if (afterTouch > 127) afterTouch = 127;
}
};
int NoteQtouch::getTouch() {
int qt_measure = qt.measure();
int roundOff = 10;
int range = 1014 - qt_floor + roundOff;
velocity = 127 * (qt_measure - qt_floor + roundOff) / range;
return velocity;
};