Mbed driver for adafruit trellis.

Dependents:   Adafruit_Trellis_Hello_World

Adafruit_Trellis.h

Committer:
wliu88
Date:
2016-03-13
Revision:
1:3a43c8b959d8
Parent:
0:bbc12ba2cb6c

File content as of revision 1:3a43c8b959d8:

#ifndef _BV
#define _BV(bit) (1 << (bit))
#endif

#include "mbed.h"

#define LED_ON  1
#define LED_OFF 0
#define HT16K33_BLINK_OFF    0
#define HT16K33_BLINK_2HZ    1
#define HT16K33_BLINK_1HZ    2
#define HT16K33_BLINK_HALFHZ 3


/**
 * A class for Adafruit trellis
 */
class Adafruit_Trellis {
public:
    /**
     * Create a new trellis object
     */
    Adafruit_Trellis(void);

    /**
     * Initialize the trellis controller
     * @param _wire Address of an I2C master object
     * @param _addr Slave address of the trellis controller
     */
    void begin(I2C *_wire, uint8_t _addr);

    /**
     * Set brightness(PWM) of LEDs
     * @param b Brightness level from 1 to 16 with 16 being the brightest
     */
    void setBrightness(uint8_t b);

    /**
     * Set blink rate of LEDs
     * @param b Blink rate defined as macros
     */
    void blinkRate(uint8_t b);

    /**
     * Write to LEDs after set and clear status of LEDs
     */
    void writeDisplay(void);

    /**
     * Set all LEDs to off
     */
    void clear(void);
    
    /**
     * Check status of LED
     * @param  x LED index (1-16)
     * @return 1 for on, 0 for off
     */
    bool isLED(uint8_t x);

    /**
     * Set LED status to on
     * @param x LED index (1-16)
     */
    void setLED(uint8_t x);

    /**
     * Set LED status to off
     * @param x LED index (1-16)
     */
    void clrLED(uint8_t x);
    
    /**
     * Check if button is pressed
     * @param  k button index (1-16)
     * @return 1 for pressed, 0 for not pressed
     */
    bool isKeyPressed(uint8_t k);

    /**
     * Check if button was pressed
     * @param  k button index (1-16)
     * @return 1 for pressed, 0 for not pressed
     */
    bool wasKeyPressed(uint8_t k);

    /**
     * Update all buttons' status, need to be called before checking buttons' status
     * @return 1 for any button has been switched, 0 otherwise
     */
    bool readSwitches(void);

    /**
     * Check if button was just pressed
     * @param  k button index (1-16)
     * @return  1 for pressed, 0 for not pressed
     */
    bool justPressed(uint8_t k);

    /**
     * Check if button was just released
     * @param  k button index (1-16)
     * @return  1 for released, 0 for not released
     */
    bool justReleased(uint8_t k);
    
    uint16_t displaybuffer[8];
    
    void init(uint8_t a);
    
private:
    uint8_t keys[6], lastkeys[6];
    
    uint8_t i2c_addr;
    char cmd[20];
    I2C *wire;
};