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 Neal Horman

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?

UserRevisionLine numberNew 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