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-com
Date:
Tue Oct 20 17:18:02 2015 +1100
Revision:
22:f63aeb3769b5
Parent:
21:e9892783ce17
Child:
24:db31831844e4
Added new features and changed file names

Who changed what in which revision?

UserRevisionLine numberNew contents of line
modtronix-com 22:f63aeb3769b5 1 /**
modtronix-com 22:f63aeb3769b5 2 * File: im4oled.h
modtronix-com 22:f63aeb3769b5 3 *
modtronix-com 22:f63aeb3769b5 4 * Author: Modtronix Engineering - www.modtronix.com
modtronix-com 22:f63aeb3769b5 5 *
modtronix-com 22:f63aeb3769b5 6 * Description:
modtronix-com 22:f63aeb3769b5 7 *
modtronix-com 22:f63aeb3769b5 8 * Software License Agreement:
modtronix-com 22:f63aeb3769b5 9 * This software has been written or modified by Modtronix Engineering. The code
modtronix-com 22:f63aeb3769b5 10 * may be modified and can be used free of charge for commercial and non commercial
modtronix-com 22:f63aeb3769b5 11 * applications. If this is modified software, any license conditions from original
modtronix-com 22:f63aeb3769b5 12 * software also apply. Any redistribution must include reference to 'Modtronix
modtronix-com 22:f63aeb3769b5 13 * Engineering' and web link(www.modtronix.com) in the file header.
modtronix-com 22:f63aeb3769b5 14 *
modtronix-com 22:f63aeb3769b5 15 * THIS SOFTWARE IS PROVIDED IN AN 'AS IS' CONDITION. NO WARRANTIES, WHETHER EXPRESS,
modtronix-com 22:f63aeb3769b5 16 * IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
modtronix-com 22:f63aeb3769b5 17 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. THE
modtronix-com 22:f63aeb3769b5 18 * COMPANY SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL OR
modtronix-com 22:f63aeb3769b5 19 * CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER.
modtronix-com 22:f63aeb3769b5 20 */
modtronix 18:cad3dec05e0d 21 #include "mbed.h"
modtronix 18:cad3dec05e0d 22
modtronix 20:0d7144a4d1ca 23 class Im4OLED {
modtronix 18:cad3dec05e0d 24 public:
modtronix-com 22:f63aeb3769b5 25 /** Constructor
modtronix-com 22:f63aeb3769b5 26 */
modtronix 20:0d7144a4d1ca 27 Im4OLED(PinName pinOK, PinName pinStar, PinName pinUp, PinName pinDown);
modtronix 18:cad3dec05e0d 28
modtronix-com 22:f63aeb3769b5 29 /**
modtronix-com 22:f63aeb3769b5 30 * Returns true if any button was pressed, and is available via a getXxxBtnFalling() function
modtronix-com 22:f63aeb3769b5 31 */
modtronix-com 22:f63aeb3769b5 32 bool wasAnyBtnPressed(void);
modtronix-com 22:f63aeb3769b5 33
modtronix-com 22:f63aeb3769b5 34 /**
modtronix-com 22:f63aeb3769b5 35 * Reset any button that was pressed, and is available via a getXxxBtnFalling() function
modtronix-com 22:f63aeb3769b5 36 * @return True if something was reset, else false
modtronix-com 22:f63aeb3769b5 37 */
modtronix-com 22:f63aeb3769b5 38 bool resetAllFalling(void);
modtronix-com 22:f63aeb3769b5 39
modtronix-com 22:f63aeb3769b5 40 /**
modtronix-com 22:f63aeb3769b5 41 * Return the state of OK button
modtronix-com 22:f63aeb3769b5 42 * @return false if button released, else true
modtronix-com 22:f63aeb3769b5 43 */
modtronix-com 22:f63aeb3769b5 44 bool getOkBtn(void);
modtronix-com 22:f63aeb3769b5 45
modtronix-com 22:f63aeb3769b5 46 /**
modtronix-com 22:f63aeb3769b5 47 * Return the state of Star button
modtronix-com 22:f63aeb3769b5 48 * @return false if button released, else true
modtronix-com 22:f63aeb3769b5 49 */
modtronix-com 22:f63aeb3769b5 50 bool getStarBtn(void);
modtronix-com 22:f63aeb3769b5 51
modtronix-com 22:f63aeb3769b5 52 /**
modtronix-com 22:f63aeb3769b5 53 * Return the state of Up button
modtronix-com 22:f63aeb3769b5 54 * @return false if button released, else true
modtronix-com 22:f63aeb3769b5 55 */
modtronix-com 22:f63aeb3769b5 56 bool getUpBtn(void);
modtronix-com 22:f63aeb3769b5 57
modtronix-com 22:f63aeb3769b5 58 /**
modtronix-com 22:f63aeb3769b5 59 * Return the state of Down button
modtronix-com 22:f63aeb3769b5 60 * @return false if button released, else true
modtronix-com 22:f63aeb3769b5 61 */
modtronix-com 22:f63aeb3769b5 62 bool getDownBtn(void);
modtronix 18:cad3dec05e0d 63
modtronix 21:e9892783ce17 64 // uint8_t getOkBtnRissing();
modtronix 21:e9892783ce17 65 // uint8_t getStarBtnRissing();
modtronix 21:e9892783ce17 66 // uint8_t getUpBtnRissing();
modtronix 21:e9892783ce17 67 // uint8_t getDownBtnRissing();
modtronix 18:cad3dec05e0d 68
modtronix-com 22:f63aeb3769b5 69 /**
modtronix-com 22:f63aeb3769b5 70 * Return number of times the given button was pressed, and resets it to 0.
modtronix-com 22:f63aeb3769b5 71 * @param btnID The button ID, is a Im4OLED::BTN_ID_xxx define
modtronix-com 22:f63aeb3769b5 72 */
modtronix 21:e9892783ce17 73 uint8_t getBtnFalling(uint16_t btnID);
modtronix 18:cad3dec05e0d 74
modtronix-com 22:f63aeb3769b5 75 /**
modtronix-com 22:f63aeb3769b5 76 * Return number of times the OK button was pressed, and resets it to 0.
modtronix-com 22:f63aeb3769b5 77 */
modtronix 21:e9892783ce17 78 uint8_t getOkBtnFalling(void);
modtronix-com 22:f63aeb3769b5 79
modtronix-com 22:f63aeb3769b5 80 /**
modtronix-com 22:f63aeb3769b5 81 * Return number of times the Star button was pressed, and resets it to 0.
modtronix-com 22:f63aeb3769b5 82 */
modtronix 21:e9892783ce17 83 uint8_t getStarBtnFalling(void);
modtronix-com 22:f63aeb3769b5 84
modtronix-com 22:f63aeb3769b5 85 /**
modtronix-com 22:f63aeb3769b5 86 * Return number of times the Up button was pressed, and resets it to 0.
modtronix-com 22:f63aeb3769b5 87 */
modtronix 21:e9892783ce17 88 uint8_t getUpBtnFalling(void);
modtronix-com 22:f63aeb3769b5 89
modtronix-com 22:f63aeb3769b5 90 /**
modtronix-com 22:f63aeb3769b5 91 * Return number of times the Down button was pressed, and resets it to 0.
modtronix-com 22:f63aeb3769b5 92 */
modtronix 21:e9892783ce17 93 uint8_t getDownBtnFalling(void);
modtronix 18:cad3dec05e0d 94
modtronix-com 22:f63aeb3769b5 95 /** Get number of repeat "BtnFalling" events for current button held down
modtronix-com 22:f63aeb3769b5 96 * @return Number indicating how many times current button has been automatically repeated
modtronix-com 22:f63aeb3769b5 97 */
modtronix-com 22:f63aeb3769b5 98 uint16_t getRepeatCount(void) {
modtronix-com 22:f63aeb3769b5 99 return repeatCount;
modtronix-com 22:f63aeb3769b5 100 }
modtronix-com 22:f63aeb3769b5 101
modtronix-com 22:f63aeb3769b5 102 /** Set period between automatic button repeats in milliseconds.
modtronix-com 22:f63aeb3769b5 103 * Given value will be rounded down to nearest 10ms. For example, 128 will be rounded to 120ms.
modtronix-com 22:f63aeb3769b5 104 *
modtronix-com 22:f63aeb3769b5 105 * @param period Period in milliseconds between button repeats.
modtronix-com 22:f63aeb3769b5 106 */
modtronix-com 22:f63aeb3769b5 107 void setRepeatPeriod(uint16_t period) {
modtronix-com 22:f63aeb3769b5 108 repeatPeriod = period/10;
modtronix-com 22:f63aeb3769b5 109 }
modtronix-com 22:f63aeb3769b5 110
modtronix-com 22:f63aeb3769b5 111 /** Set initial delay in milliseconds until the automatic button repeats start.
modtronix-com 22:f63aeb3769b5 112 * Given value will be rounded down to nearest 10ms. For example, 128 will be rounded to 120ms.
modtronix-com 22:f63aeb3769b5 113 *
modtronix-com 22:f63aeb3769b5 114 * @param period Period in milliseconds between button repeats.
modtronix-com 22:f63aeb3769b5 115 */
modtronix-com 22:f63aeb3769b5 116 void setDelayTillRepeat(uint16_t period) {
modtronix-com 22:f63aeb3769b5 117 delayTillRepeat = period/10;
modtronix-com 22:f63aeb3769b5 118 }
modtronix-com 22:f63aeb3769b5 119
modtronix-com 22:f63aeb3769b5 120 public:
modtronix-com 22:f63aeb3769b5 121 enum ButtonId {
modtronix-com 22:f63aeb3769b5 122 BTN_ID_OK=0,
modtronix-com 22:f63aeb3769b5 123 BTN_ID_STAR,
modtronix-com 22:f63aeb3769b5 124 BTN_ID_UP,
modtronix-com 22:f63aeb3769b5 125 BTN_ID_DOWN,
modtronix-com 22:f63aeb3769b5 126 BTN_ID_MAX
modtronix-com 22:f63aeb3769b5 127 };
modtronix-com 22:f63aeb3769b5 128
modtronix 18:cad3dec05e0d 129 private :
modtronix-com 22:f63aeb3769b5 130 //Objects
modtronix 18:cad3dec05e0d 131 Ticker _ticker;
modtronix 18:cad3dec05e0d 132
modtronix 18:cad3dec05e0d 133 DigitalIn btnOK;
modtronix 18:cad3dec05e0d 134 DigitalIn btnStar;
modtronix 18:cad3dec05e0d 135 DigitalIn btnUp;
modtronix 18:cad3dec05e0d 136 DigitalIn btnDown;
modtronix 18:cad3dec05e0d 137
modtronix-com 22:f63aeb3769b5 138 private :
modtronix-com 22:f63aeb3769b5 139 struct ButtonFlags {
modtronix-com 22:f63aeb3769b5 140 union {
modtronix-com 22:f63aeb3769b5 141 struct {
modtronix-com 22:f63aeb3769b5 142 uint8_t fallingLatch :1;
modtronix-com 22:f63aeb3769b5 143 uint8_t risingLatch :1;
modtronix-com 22:f63aeb3769b5 144 } bit;
modtronix-com 22:f63aeb3769b5 145 uint8_t Val;
modtronix-com 22:f63aeb3769b5 146 } flags;
modtronix-com 22:f63aeb3769b5 147 };
modtronix-com 22:f63aeb3769b5 148
modtronix-com 22:f63aeb3769b5 149 #define IM4OLED_BUTTONS 4
modtronix-com 22:f63aeb3769b5 150 //Structures
modtronix-com 22:f63aeb3769b5 151 struct ButtonFlags arrBtnFlags[IM4OLED_BUTTONS];
modtronix-com 22:f63aeb3769b5 152 uint8_t arrButtons[IM4OLED_BUTTONS]; //Debounced button count. Contains 0 if button released, and BTN_SAMPLES if button pressed
modtronix-com 22:f63aeb3769b5 153 uint8_t arrBtnFallingCnt[IM4OLED_BUTTONS]; //Counts number of times button was pressed
modtronix-com 22:f63aeb3769b5 154
modtronix-com 22:f63aeb3769b5 155 uint8_t delayTillRepeat; //Delay until repeating starts - a value in 10ms
modtronix-com 22:f63aeb3769b5 156 uint8_t repeatPeriod; //Delay between button repeats - a value in 10ms
modtronix-com 22:f63aeb3769b5 157 uint8_t repeatBtnId; //Button ID (BTN_ID_xx) of current button pressed, or 0xff if none
modtronix-com 22:f63aeb3769b5 158 uint16_t repeatCount; //Count how many times current pressed button(repeatBtnId) has repeated
modtronix-com 22:f63aeb3769b5 159 int tmrRepeat;
modtronix 18:cad3dec05e0d 160
modtronix 18:cad3dec05e0d 161 // function to take a sample, and update flags
modtronix 18:cad3dec05e0d 162 void _sample(void);
modtronix 18:cad3dec05e0d 163 };