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:
Fri Aug 19 15:44:25 2016 +1000
Revision:
27:dd7d538d3849
Parent:
26:ef08580c35df
Added tag v1.1 for changeset ef08580c35df

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-com 24:db31831844e4 21 #include "im4oled_default_config.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-com 24:db31831844e4 27 #if (IM4OLED_VIA_PT01NZ==0)
modtronix 20:0d7144a4d1ca 28 Im4OLED(PinName pinOK, PinName pinStar, PinName pinUp, PinName pinDown);
modtronix-com 24:db31831844e4 29 #else
modtronix-com 24:db31831844e4 30 Im4OLED(PinName pinOKStar, PinName pinUpDown);
modtronix-com 24:db31831844e4 31 #endif
modtronix 18:cad3dec05e0d 32
modtronix-com 22:f63aeb3769b5 33 /**
modtronix-com 22:f63aeb3769b5 34 * Returns true if any button was pressed, and is available via a getXxxBtnFalling() function
modtronix-com 22:f63aeb3769b5 35 */
modtronix-com 22:f63aeb3769b5 36 bool wasAnyBtnPressed(void);
modtronix-com 22:f63aeb3769b5 37
modtronix-com 22:f63aeb3769b5 38 /**
modtronix-com 22:f63aeb3769b5 39 * Reset any button that was pressed, and is available via a getXxxBtnFalling() function
modtronix-com 22:f63aeb3769b5 40 * @return True if something was reset, else false
modtronix-com 22:f63aeb3769b5 41 */
modtronix-com 22:f63aeb3769b5 42 bool resetAllFalling(void);
modtronix-com 22:f63aeb3769b5 43
modtronix-com 22:f63aeb3769b5 44 /**
modtronix-com 22:f63aeb3769b5 45 * Return the state of OK button
modtronix-com 22:f63aeb3769b5 46 * @return false if button released, else true
modtronix-com 22:f63aeb3769b5 47 */
modtronix-com 22:f63aeb3769b5 48 bool getOkBtn(void);
modtronix-com 22:f63aeb3769b5 49
modtronix-com 22:f63aeb3769b5 50 /**
modtronix-com 22:f63aeb3769b5 51 * Return the state of Star button
modtronix-com 22:f63aeb3769b5 52 * @return false if button released, else true
modtronix-com 22:f63aeb3769b5 53 */
modtronix-com 22:f63aeb3769b5 54 bool getStarBtn(void);
modtronix-com 22:f63aeb3769b5 55
modtronix-com 22:f63aeb3769b5 56 /**
modtronix-com 22:f63aeb3769b5 57 * Return the state of Up button
modtronix-com 22:f63aeb3769b5 58 * @return false if button released, else true
modtronix-com 22:f63aeb3769b5 59 */
modtronix-com 22:f63aeb3769b5 60 bool getUpBtn(void);
modtronix-com 22:f63aeb3769b5 61
modtronix-com 22:f63aeb3769b5 62 /**
modtronix-com 22:f63aeb3769b5 63 * Return the state of Down button
modtronix-com 22:f63aeb3769b5 64 * @return false if button released, else true
modtronix-com 22:f63aeb3769b5 65 */
modtronix-com 22:f63aeb3769b5 66 bool getDownBtn(void);
modtronix 18:cad3dec05e0d 67
modtronix 21:e9892783ce17 68 // uint8_t getOkBtnRissing();
modtronix 21:e9892783ce17 69 // uint8_t getStarBtnRissing();
modtronix 21:e9892783ce17 70 // uint8_t getUpBtnRissing();
modtronix 21:e9892783ce17 71 // uint8_t getDownBtnRissing();
modtronix 18:cad3dec05e0d 72
modtronix-com 22:f63aeb3769b5 73 /**
modtronix-com 22:f63aeb3769b5 74 * Return number of times the given button was pressed, and resets it to 0.
modtronix-com 22:f63aeb3769b5 75 * @param btnID The button ID, is a Im4OLED::BTN_ID_xxx define
modtronix-com 22:f63aeb3769b5 76 */
modtronix 21:e9892783ce17 77 uint8_t getBtnFalling(uint16_t btnID);
modtronix 18:cad3dec05e0d 78
modtronix-com 22:f63aeb3769b5 79 /**
modtronix-com 22:f63aeb3769b5 80 * Return number of times the OK button was pressed, and resets it to 0.
modtronix-com 22:f63aeb3769b5 81 */
modtronix 21:e9892783ce17 82 uint8_t getOkBtnFalling(void);
modtronix-com 22:f63aeb3769b5 83
modtronix-com 22:f63aeb3769b5 84 /**
modtronix-com 22:f63aeb3769b5 85 * Return number of times the Star button was pressed, and resets it to 0.
modtronix-com 22:f63aeb3769b5 86 */
modtronix 21:e9892783ce17 87 uint8_t getStarBtnFalling(void);
modtronix-com 22:f63aeb3769b5 88
modtronix-com 22:f63aeb3769b5 89 /**
modtronix-com 22:f63aeb3769b5 90 * Return number of times the Up button was pressed, and resets it to 0.
modtronix-com 22:f63aeb3769b5 91 */
modtronix 21:e9892783ce17 92 uint8_t getUpBtnFalling(void);
modtronix-com 22:f63aeb3769b5 93
modtronix-com 22:f63aeb3769b5 94 /**
modtronix-com 22:f63aeb3769b5 95 * Return number of times the Down button was pressed, and resets it to 0.
modtronix-com 22:f63aeb3769b5 96 */
modtronix 21:e9892783ce17 97 uint8_t getDownBtnFalling(void);
modtronix 18:cad3dec05e0d 98
modtronix-com 22:f63aeb3769b5 99 /** Get number of repeat "BtnFalling" events for current button held down
modtronix-com 22:f63aeb3769b5 100 * @return Number indicating how many times current button has been automatically repeated
modtronix-com 22:f63aeb3769b5 101 */
modtronix-com 22:f63aeb3769b5 102 uint16_t getRepeatCount(void) {
modtronix-com 22:f63aeb3769b5 103 return repeatCount;
modtronix-com 22:f63aeb3769b5 104 }
modtronix-com 22:f63aeb3769b5 105
modtronix-com 22:f63aeb3769b5 106 /** Set period between automatic button repeats in milliseconds.
modtronix-com 22:f63aeb3769b5 107 * Given value will be rounded down to nearest 10ms. For example, 128 will be rounded to 120ms.
modtronix-com 22:f63aeb3769b5 108 *
modtronix-com 22:f63aeb3769b5 109 * @param period Period in milliseconds between button repeats.
modtronix-com 22:f63aeb3769b5 110 */
modtronix-com 22:f63aeb3769b5 111 void setRepeatPeriod(uint16_t period) {
modtronix-com 22:f63aeb3769b5 112 repeatPeriod = period/10;
modtronix-com 22:f63aeb3769b5 113 }
modtronix-com 22:f63aeb3769b5 114
modtronix-com 22:f63aeb3769b5 115 /** Set initial delay in milliseconds until the automatic button repeats start.
modtronix-com 22:f63aeb3769b5 116 * Given value will be rounded down to nearest 10ms. For example, 128 will be rounded to 120ms.
modtronix-com 22:f63aeb3769b5 117 *
modtronix-com 22:f63aeb3769b5 118 * @param period Period in milliseconds between button repeats.
modtronix-com 22:f63aeb3769b5 119 */
modtronix-com 22:f63aeb3769b5 120 void setDelayTillRepeat(uint16_t period) {
modtronix-com 22:f63aeb3769b5 121 delayTillRepeat = period/10;
modtronix-com 22:f63aeb3769b5 122 }
modtronix-com 22:f63aeb3769b5 123
modtronix-com 22:f63aeb3769b5 124 public:
modtronix-com 22:f63aeb3769b5 125 enum ButtonId {
modtronix-com 22:f63aeb3769b5 126 BTN_ID_OK=0,
modtronix-com 22:f63aeb3769b5 127 BTN_ID_STAR,
modtronix-com 22:f63aeb3769b5 128 BTN_ID_UP,
modtronix-com 22:f63aeb3769b5 129 BTN_ID_DOWN,
modtronix-com 22:f63aeb3769b5 130 BTN_ID_MAX
modtronix-com 22:f63aeb3769b5 131 };
modtronix-com 22:f63aeb3769b5 132
modtronix 18:cad3dec05e0d 133 private :
modtronix-com 22:f63aeb3769b5 134 //Objects
modtronix 18:cad3dec05e0d 135 Ticker _ticker;
modtronix 18:cad3dec05e0d 136
modtronix-com 24:db31831844e4 137 #if (IM4OLED_VIA_PT01NZ==1)
modtronix-com 24:db31831844e4 138 DigitalIn btnOKStar;
modtronix-com 24:db31831844e4 139 DigitalIn btnUpDown;
modtronix-com 24:db31831844e4 140 #else
modtronix 18:cad3dec05e0d 141 DigitalIn btnOK;
modtronix 18:cad3dec05e0d 142 DigitalIn btnStar;
modtronix 18:cad3dec05e0d 143 DigitalIn btnUp;
modtronix 18:cad3dec05e0d 144 DigitalIn btnDown;
modtronix-com 24:db31831844e4 145 #endif
modtronix 18:cad3dec05e0d 146
modtronix-com 22:f63aeb3769b5 147 private :
modtronix-com 22:f63aeb3769b5 148 struct ButtonFlags {
modtronix-com 22:f63aeb3769b5 149 union {
modtronix-com 22:f63aeb3769b5 150 struct {
modtronix-com 22:f63aeb3769b5 151 uint8_t fallingLatch :1;
modtronix-com 22:f63aeb3769b5 152 uint8_t risingLatch :1;
modtronix-com 22:f63aeb3769b5 153 } bit;
modtronix-com 22:f63aeb3769b5 154 uint8_t Val;
modtronix-com 22:f63aeb3769b5 155 } flags;
modtronix-com 22:f63aeb3769b5 156 };
modtronix-com 22:f63aeb3769b5 157
modtronix-com 22:f63aeb3769b5 158 #define IM4OLED_BUTTONS 4
modtronix-com 22:f63aeb3769b5 159 //Structures
modtronix-com 22:f63aeb3769b5 160 struct ButtonFlags arrBtnFlags[IM4OLED_BUTTONS];
modtronix-com 22:f63aeb3769b5 161 uint8_t arrButtons[IM4OLED_BUTTONS]; //Debounced button count. Contains 0 if button released, and BTN_SAMPLES if button pressed
modtronix-com 22:f63aeb3769b5 162 uint8_t arrBtnFallingCnt[IM4OLED_BUTTONS]; //Counts number of times button was pressed
modtronix-com 22:f63aeb3769b5 163
modtronix-com 22:f63aeb3769b5 164 uint8_t delayTillRepeat; //Delay until repeating starts - a value in 10ms
modtronix-com 22:f63aeb3769b5 165 uint8_t repeatPeriod; //Delay between button repeats - a value in 10ms
modtronix-com 22:f63aeb3769b5 166 uint8_t repeatBtnId; //Button ID (BTN_ID_xx) of current button pressed, or 0xff if none
modtronix-com 22:f63aeb3769b5 167 uint16_t repeatCount; //Count how many times current pressed button(repeatBtnId) has repeated
modtronix-com 22:f63aeb3769b5 168 int tmrRepeat;
modtronix 18:cad3dec05e0d 169
modtronix 18:cad3dec05e0d 170 // function to take a sample, and update flags
modtronix 18:cad3dec05e0d 171 void _sample(void);
modtronix 18:cad3dec05e0d 172 };