Library for Modtronix im4OLED board with 128x64 OLED and 4 buttons. For details, see product page http://modtronix.com/im4oled.html. Is a clone of Adafruit_GFX library, with some additional code added.
Fork of Adafruit_GFX by
im4oled.cpp@21:e9892783ce17, 2015-08-31 (annotated)
- Committer:
- modtronix
- Date:
- Mon Aug 31 10:27:55 2015 +1000
- Revision:
- 21:e9892783ce17
- Parent:
- 20:0d7144a4d1ca
- Child:
- 22:f63aeb3769b5
Updated getBtn functions
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
modtronix | 20:0d7144a4d1ca | 1 | #include "Im4OLED.h" |
modtronix | 18:cad3dec05e0d | 2 | #include "mbed.h" |
modtronix | 18:cad3dec05e0d | 3 | |
modtronix | 18:cad3dec05e0d | 4 | #define BTN_SAMPLES 4 |
modtronix | 18:cad3dec05e0d | 5 | |
modtronix | 18:cad3dec05e0d | 6 | /* |
modtronix | 18:cad3dec05e0d | 7 | * Constructor |
modtronix | 18:cad3dec05e0d | 8 | */ |
modtronix | 20:0d7144a4d1ca | 9 | Im4OLED::Im4OLED(PinName pinOK, PinName pinStar, PinName pinUp, PinName pinDown) |
modtronix | 18:cad3dec05e0d | 10 | : btnOK(pinOK, PullUp), btnStar(pinStar, PullUp), btnUp(pinUp, PullUp), btnDown(pinDown, PullUp) { |
modtronix | 18:cad3dec05e0d | 11 | |
modtronix | 18:cad3dec05e0d | 12 | |
modtronix | 18:cad3dec05e0d | 13 | // reset all the flags and counters |
modtronix | 18:cad3dec05e0d | 14 | memset(&arrButtons, 0, sizeof(arrButtons)); |
modtronix | 18:cad3dec05e0d | 15 | memset(&arrBtnFalling, 0, sizeof(arrBtnFalling)); |
modtronix | 18:cad3dec05e0d | 16 | memset(&arrBtnFlags, 0, sizeof(arrBtnFlags)); |
modtronix | 18:cad3dec05e0d | 17 | |
modtronix | 18:cad3dec05e0d | 18 | // Read pins every 10ms |
modtronix | 20:0d7144a4d1ca | 19 | _ticker.attach(this, &Im4OLED::_sample, 0.01); |
modtronix | 18:cad3dec05e0d | 20 | } |
modtronix | 18:cad3dec05e0d | 21 | |
modtronix | 20:0d7144a4d1ca | 22 | void Im4OLED::_sample() { |
modtronix | 18:cad3dec05e0d | 23 | uint16_t i; |
modtronix | 18:cad3dec05e0d | 24 | uint8_t val[4]; |
modtronix | 18:cad3dec05e0d | 25 | |
modtronix | 18:cad3dec05e0d | 26 | val[0] = btnOK.read(); |
modtronix | 18:cad3dec05e0d | 27 | val[1] = btnStar.read(); |
modtronix | 18:cad3dec05e0d | 28 | val[2] = btnUp.read(); |
modtronix | 18:cad3dec05e0d | 29 | val[3] = btnDown.read(); |
modtronix | 18:cad3dec05e0d | 30 | |
modtronix | 18:cad3dec05e0d | 31 | for(i=0; i<4; i++) { |
modtronix | 18:cad3dec05e0d | 32 | //If current button pressed |
modtronix | 18:cad3dec05e0d | 33 | if(val[i] == 0) { |
modtronix | 18:cad3dec05e0d | 34 | if(arrButtons[i] < BTN_SAMPLES) { |
modtronix | 18:cad3dec05e0d | 35 | arrButtons[i]++; |
modtronix | 18:cad3dec05e0d | 36 | } |
modtronix | 18:cad3dec05e0d | 37 | |
modtronix | 18:cad3dec05e0d | 38 | //Button is pressed down |
modtronix | 18:cad3dec05e0d | 39 | if(arrButtons[i] == BTN_SAMPLES) { |
modtronix | 18:cad3dec05e0d | 40 | if(arrBtnFlags[i].flags.bit.fallingLatch == 0) { |
modtronix | 18:cad3dec05e0d | 41 | arrBtnFlags[i].flags.bit.fallingLatch = 1; |
modtronix | 18:cad3dec05e0d | 42 | arrBtnFalling[i]++; |
modtronix | 18:cad3dec05e0d | 43 | } |
modtronix | 18:cad3dec05e0d | 44 | } |
modtronix | 18:cad3dec05e0d | 45 | } |
modtronix | 18:cad3dec05e0d | 46 | else { |
modtronix | 18:cad3dec05e0d | 47 | if (arrButtons[i] > 0) { |
modtronix | 18:cad3dec05e0d | 48 | arrButtons[i]--; |
modtronix | 18:cad3dec05e0d | 49 | } |
modtronix | 18:cad3dec05e0d | 50 | |
modtronix | 18:cad3dec05e0d | 51 | //Button is up |
modtronix | 18:cad3dec05e0d | 52 | if(arrButtons[i] == 0) { |
modtronix | 18:cad3dec05e0d | 53 | //Reset fallingLatch |
modtronix | 18:cad3dec05e0d | 54 | arrBtnFlags[i].flags.bit.fallingLatch = 0; |
modtronix | 18:cad3dec05e0d | 55 | } |
modtronix | 18:cad3dec05e0d | 56 | } |
modtronix | 18:cad3dec05e0d | 57 | } |
modtronix | 18:cad3dec05e0d | 58 | } |
modtronix | 18:cad3dec05e0d | 59 | |
modtronix | 18:cad3dec05e0d | 60 | |
modtronix | 18:cad3dec05e0d | 61 | /** |
modtronix | 18:cad3dec05e0d | 62 | * Return the debounced value OK button |
modtronix | 18:cad3dec05e0d | 63 | */ |
modtronix | 21:e9892783ce17 | 64 | uint8_t Im4OLED::getOkBtn(void) { |
modtronix | 18:cad3dec05e0d | 65 | //return btnOK.read(); |
modtronix | 18:cad3dec05e0d | 66 | return arrButtons[0] == BTN_SAMPLES; |
modtronix | 18:cad3dec05e0d | 67 | } |
modtronix | 18:cad3dec05e0d | 68 | |
modtronix | 18:cad3dec05e0d | 69 | /** |
modtronix | 18:cad3dec05e0d | 70 | * Return the debounced value Star button |
modtronix | 18:cad3dec05e0d | 71 | */ |
modtronix | 21:e9892783ce17 | 72 | uint8_t Im4OLED::getStarBtn(void) { |
modtronix | 18:cad3dec05e0d | 73 | return arrButtons[1] == BTN_SAMPLES; |
modtronix | 18:cad3dec05e0d | 74 | } |
modtronix | 18:cad3dec05e0d | 75 | |
modtronix | 18:cad3dec05e0d | 76 | |
modtronix | 18:cad3dec05e0d | 77 | /** |
modtronix | 18:cad3dec05e0d | 78 | * Return the debounced value Up button |
modtronix | 18:cad3dec05e0d | 79 | */ |
modtronix | 21:e9892783ce17 | 80 | uint8_t Im4OLED::getUpBtn(void) { |
modtronix | 18:cad3dec05e0d | 81 | return arrButtons[2] == BTN_SAMPLES; |
modtronix | 18:cad3dec05e0d | 82 | } |
modtronix | 18:cad3dec05e0d | 83 | |
modtronix | 18:cad3dec05e0d | 84 | /** |
modtronix | 18:cad3dec05e0d | 85 | * Return the debounced value Down button |
modtronix | 18:cad3dec05e0d | 86 | */ |
modtronix | 21:e9892783ce17 | 87 | uint8_t Im4OLED::getDownBtn(void) { |
modtronix | 18:cad3dec05e0d | 88 | return arrButtons[3] == BTN_SAMPLES; |
modtronix | 18:cad3dec05e0d | 89 | } |
modtronix | 18:cad3dec05e0d | 90 | |
modtronix | 18:cad3dec05e0d | 91 | /** |
modtronix | 21:e9892783ce17 | 92 | * Return number of times the given button was pressed, and resets it to 0. |
modtronix | 18:cad3dec05e0d | 93 | */ |
modtronix | 21:e9892783ce17 | 94 | uint8_t Im4OLED::getBtnFalling(uint16_t btnID) { |
modtronix | 21:e9892783ce17 | 95 | uint8_t retVal = 0; |
modtronix | 18:cad3dec05e0d | 96 | if(arrBtnFalling[btnID]!=0) { |
modtronix | 21:e9892783ce17 | 97 | retVal = arrBtnFalling[btnID]; |
modtronix | 21:e9892783ce17 | 98 | arrBtnFalling[btnID] = 0; |
modtronix | 18:cad3dec05e0d | 99 | } |
modtronix | 21:e9892783ce17 | 100 | return retVal; |
modtronix | 18:cad3dec05e0d | 101 | } |
modtronix | 18:cad3dec05e0d | 102 | |
modtronix | 18:cad3dec05e0d | 103 | /** |
modtronix | 21:e9892783ce17 | 104 | * Return number of times the OK button was pressed, and resets it to 0. |
modtronix | 18:cad3dec05e0d | 105 | */ |
modtronix | 21:e9892783ce17 | 106 | uint8_t Im4OLED::getOkBtnFalling(void) { |
modtronix | 18:cad3dec05e0d | 107 | return getBtnFalling(0); |
modtronix | 18:cad3dec05e0d | 108 | } |
modtronix | 18:cad3dec05e0d | 109 | |
modtronix | 18:cad3dec05e0d | 110 | /** |
modtronix | 21:e9892783ce17 | 111 | * Return number of times the Star button was pressed, and resets it to 0. |
modtronix | 18:cad3dec05e0d | 112 | */ |
modtronix | 21:e9892783ce17 | 113 | uint8_t Im4OLED::getStarBtnFalling(void) { |
modtronix | 18:cad3dec05e0d | 114 | return getBtnFalling(1); |
modtronix | 18:cad3dec05e0d | 115 | } |
modtronix | 18:cad3dec05e0d | 116 | |
modtronix | 18:cad3dec05e0d | 117 | /** |
modtronix | 21:e9892783ce17 | 118 | * Return number of times the Up button was pressed, and resets it to 0. |
modtronix | 18:cad3dec05e0d | 119 | */ |
modtronix | 21:e9892783ce17 | 120 | uint8_t Im4OLED::getUpBtnFalling(void) { |
modtronix | 18:cad3dec05e0d | 121 | return getBtnFalling(2); |
modtronix | 18:cad3dec05e0d | 122 | } |
modtronix | 18:cad3dec05e0d | 123 | |
modtronix | 18:cad3dec05e0d | 124 | /** |
modtronix | 21:e9892783ce17 | 125 | * Return number of times the Down button was pressed, and resets it to 0. |
modtronix | 18:cad3dec05e0d | 126 | */ |
modtronix | 21:e9892783ce17 | 127 | uint8_t Im4OLED::getDownBtnFalling(void) { |
modtronix | 18:cad3dec05e0d | 128 | return getBtnFalling(3); |
modtronix | 18:cad3dec05e0d | 129 | } |
modtronix | 18:cad3dec05e0d | 130 | |
modtronix | 18:cad3dec05e0d | 131 |