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:
Fri Jul 24 18:15:12 2015 +1000
Revision:
18:cad3dec05e0d
Child:
20:0d7144a4d1ca
Initial version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
modtronix 18:cad3dec05e0d 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 18:cad3dec05e0d 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 18:cad3dec05e0d 19 _ticker.attach(this, &im4OLED::_sample, 0.01);
modtronix 18:cad3dec05e0d 20 }
modtronix 18:cad3dec05e0d 21
modtronix 18:cad3dec05e0d 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 18:cad3dec05e0d 64 int 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 18:cad3dec05e0d 72 int 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 18:cad3dec05e0d 80 int 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 18:cad3dec05e0d 87 int 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 18:cad3dec05e0d 92 * Return number of times the OK button was pressed
modtronix 18:cad3dec05e0d 93 */
modtronix 18:cad3dec05e0d 94 int im4OLED::getBtnFalling(uint16_t btnID) {
modtronix 18:cad3dec05e0d 95 if(arrBtnFalling[btnID]!=0) {
modtronix 18:cad3dec05e0d 96 arrBtnFalling[btnID]--;
modtronix 18:cad3dec05e0d 97 return arrBtnFalling[btnID]+1;
modtronix 18:cad3dec05e0d 98 }
modtronix 18:cad3dec05e0d 99 return 0;
modtronix 18:cad3dec05e0d 100 }
modtronix 18:cad3dec05e0d 101
modtronix 18:cad3dec05e0d 102 /**
modtronix 18:cad3dec05e0d 103 * Return number of times the OK button was pressed
modtronix 18:cad3dec05e0d 104 */
modtronix 18:cad3dec05e0d 105 int im4OLED::getOkBtnFalling(void) {
modtronix 18:cad3dec05e0d 106 return getBtnFalling(0);
modtronix 18:cad3dec05e0d 107 }
modtronix 18:cad3dec05e0d 108
modtronix 18:cad3dec05e0d 109 /**
modtronix 18:cad3dec05e0d 110 * Return number of times the Star button was pressed
modtronix 18:cad3dec05e0d 111 */
modtronix 18:cad3dec05e0d 112 int im4OLED::getStarBtnFalling(void) {
modtronix 18:cad3dec05e0d 113 return getBtnFalling(1);
modtronix 18:cad3dec05e0d 114 }
modtronix 18:cad3dec05e0d 115
modtronix 18:cad3dec05e0d 116 /**
modtronix 18:cad3dec05e0d 117 * Return number of times the Up button was pressed
modtronix 18:cad3dec05e0d 118 */
modtronix 18:cad3dec05e0d 119 int im4OLED::getUpBtnFalling(void) {
modtronix 18:cad3dec05e0d 120 return getBtnFalling(2);
modtronix 18:cad3dec05e0d 121 }
modtronix 18:cad3dec05e0d 122
modtronix 18:cad3dec05e0d 123 /**
modtronix 18:cad3dec05e0d 124 * Return number of times the Down button was pressed
modtronix 18:cad3dec05e0d 125 */
modtronix 18:cad3dec05e0d 126 int im4OLED::getDownBtnFalling(void) {
modtronix 18:cad3dec05e0d 127 return getBtnFalling(3);
modtronix 18:cad3dec05e0d 128 }
modtronix 18:cad3dec05e0d 129
modtronix 18:cad3dec05e0d 130