po
Dependencies: ArduinoHAL mbed-src-nrf51822
Button.cpp@3:7860aea79272, 2015-11-24 (annotated)
- Committer:
- siridjen
- Date:
- Tue Nov 24 22:31:58 2015 +0000
- Revision:
- 3:7860aea79272
- Parent:
- 0:03c039c2a00d
pot
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
siridjen | 0:03c039c2a00d | 1 | // MIDI Elements button class |
siridjen | 0:03c039c2a00d | 2 | // Library to simplifly handling of compontents for MIDI controllers |
siridjen | 0:03c039c2a00d | 3 | // Created by Tomash Ghz |
siridjen | 0:03c039c2a00d | 4 | // www.tomashg.com |
siridjen | 0:03c039c2a00d | 5 | // ghz.tomash@gmail.com |
siridjen | 0:03c039c2a00d | 6 | |
siridjen | 0:03c039c2a00d | 7 | #include "Button.h" |
siridjen | 0:03c039c2a00d | 8 | |
siridjen | 0:03c039c2a00d | 9 | //----------------------------------------------------------------------------------- |
siridjen | 0:03c039c2a00d | 10 | // constructor |
siridjen | 0:03c039c2a00d | 11 | Button::Button(byte p){ |
siridjen | 0:03c039c2a00d | 12 | Button(8,0,0,false,true); |
siridjen | 0:03c039c2a00d | 13 | } |
siridjen | 0:03c039c2a00d | 14 | |
siridjen | 0:03c039c2a00d | 15 | Button::Button(byte p, byte c, byte n){ |
siridjen | 0:03c039c2a00d | 16 | Button(9,c,n,false,false); |
siridjen | 0:03c039c2a00d | 17 | } |
siridjen | 0:03c039c2a00d | 18 | |
siridjen | 0:03c039c2a00d | 19 | Button::Button(byte p, byte c, byte n, bool sec){ |
siridjen | 0:03c039c2a00d | 20 | Button(5,c,n,sec,false); |
siridjen | 0:03c039c2a00d | 21 | } |
siridjen | 0:03c039c2a00d | 22 | |
siridjen | 0:03c039c2a00d | 23 | Button::Button(byte p, byte c, byte n, bool sec, bool debug){ // pin, number, channel |
siridjen | 0:03c039c2a00d | 24 | pin=p; |
siridjen | 0:03c039c2a00d | 25 | number=n; |
siridjen | 0:03c039c2a00d | 26 | channel=c; |
siridjen | 0:03c039c2a00d | 27 | secondary=sec; |
siridjen | 0:03c039c2a00d | 28 | debugging=debug; |
siridjen | 0:03c039c2a00d | 29 | velocity=127; |
siridjen | 0:03c039c2a00d | 30 | |
siridjen | 0:03c039c2a00d | 31 | pinMode(pin, INPUT_PULLUP); // enable the pin for input |
siridjen | 0:03c039c2a00d | 32 | |
siridjen | 0:03c039c2a00d | 33 | bButn = new MIDIBounce(pin, 10); // create new bounce object for pin |
siridjen | 0:03c039c2a00d | 34 | } |
siridjen | 0:03c039c2a00d | 35 | |
siridjen | 0:03c039c2a00d | 36 | // destructor |
siridjen | 0:03c039c2a00d | 37 | Button::~Button(){ |
siridjen | 0:03c039c2a00d | 38 | delete bButn; |
siridjen | 0:03c039c2a00d | 39 | } |
siridjen | 0:03c039c2a00d | 40 | |
siridjen | 0:03c039c2a00d | 41 | // read |
siridjen | 0:03c039c2a00d | 42 | void Button::read(){ |
siridjen | 0:03c039c2a00d | 43 | if (bButn->update()) {//state changed |
siridjen | 0:03c039c2a00d | 44 | |
siridjen | 0:03c039c2a00d | 45 | if (bButn->read()==LOW) {//is pressed |
siridjen | 0:03c039c2a00d | 46 | noteOnOff(true); |
siridjen | 0:03c039c2a00d | 47 | } |
siridjen | 0:03c039c2a00d | 48 | else { |
siridjen | 0:03c039c2a00d | 49 | noteOnOff(false); |
siridjen | 0:03c039c2a00d | 50 | } |
siridjen | 0:03c039c2a00d | 51 | } |
siridjen | 0:03c039c2a00d | 52 | } |
siridjen | 0:03c039c2a00d | 53 | |
siridjen | 0:03c039c2a00d | 54 | // read value |
siridjen | 0:03c039c2a00d | 55 | bool Button::readValue(bool &changed){ |
siridjen | 0:03c039c2a00d | 56 | changed=bButn->update(); //state changed |
siridjen | 0:03c039c2a00d | 57 | |
siridjen | 0:03c039c2a00d | 58 | if (bButn->read()==LOW) {//is pressed |
siridjen | 0:03c039c2a00d | 59 | return true; |
siridjen | 0:03c039c2a00d | 60 | } |
siridjen | 0:03c039c2a00d | 61 | else { |
siridjen | 0:03c039c2a00d | 62 | return false; |
siridjen | 0:03c039c2a00d | 63 | } |
siridjen | 0:03c039c2a00d | 64 | } |
siridjen | 0:03c039c2a00d | 65 | |
siridjen | 0:03c039c2a00d | 66 | // set note on velocity |
siridjen | 0:03c039c2a00d | 67 | void Button::setVelocity(byte v){ |
siridjen | 0:03c039c2a00d | 68 | velocity=v; |
siridjen | 0:03c039c2a00d | 69 | } |
siridjen | 0:03c039c2a00d | 70 | |
siridjen | 0:03c039c2a00d | 71 | //send midinote on off |
siridjen | 0:03c039c2a00d | 72 | void Button::noteOnOff(bool v){ |
siridjen | 0:03c039c2a00d | 73 | if(v){ |
siridjen | 0:03c039c2a00d | 74 | if (debugging) {//debbuging enabled |
siridjen | 0:03c039c2a00d | 75 | Serial.print("Button "); |
siridjen | 0:03c039c2a00d | 76 | Serial.print(p); |
siridjen | 0:03c039c2a00d | 77 | Serial.println(" pressed."); |
siridjen | 0:03c039c2a00d | 78 | } |
siridjen | 0:03c039c2a00d | 79 | else{ // send midi note |
siridjen | 0:03c039c2a00d | 80 | usbMIDI.sendNoteOn(number, velocity, channel); |
siridjen | 0:03c039c2a00d | 81 | if(secondary) |
siridjen | 0:03c039c2a00d | 82 | usbMIDI.sendControlChange(number, 127, channel); |
siridjen | 0:03c039c2a00d | 83 | } |
siridjen | 0:03c039c2a00d | 84 | } |
siridjen | 0:03c039c2a00d | 85 | else{ |
siridjen | 0:03c039c2a00d | 86 | if (debugging) {//debbuging enabled |
siridjen | 0:03c039c2a00d | 87 | Serial.print("Button "); |
siridjen | 0:03c039c2a00d | 88 | Serial.print(number); |
siridjen | 0:03c039c2a00d | 89 | Serial.println(" released."); |
siridjen | 0:03c039c2a00d | 90 | } |
siridjen | 0:03c039c2a00d | 91 | else{ |
siridjen | 0:03c039c2a00d | 92 | if(secondary) |
siridjen | 0:03c039c2a00d | 93 | usbMIDI.sendControlChange(number, 0, channel); |
siridjen | 0:03c039c2a00d | 94 | usbMIDI.sendNoteOff(number, 0, channel); |
siridjen | 0:03c039c2a00d | 95 | } |
siridjen | 0:03c039c2a00d | 96 | } |
siridjen | 0:03c039c2a00d | 97 | } |
siridjen | 0:03c039c2a00d | 98 | //----------------------------------------------------------------------------------- |