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:
Sat Aug 13 11:34:09 2016 +1000
Revision:
24:db31831844e4
Parent:
22:f63aeb3769b5
Child:
26:ef08580c35df
Added support for PT01NZ board

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