This is the assessment project

Dependencies:   C12832 FXOS8700Q LM75B mbed

Fork of app-shield-LM75B by Chris Styles

core.h

Committer:
co838_am2073
Date:
2016-02-22
Revision:
10:5cf5a731af73
Parent:
9:b14eedf2e34b

File content as of revision 10:5cf5a731af73:

#ifndef CORE_H_
#define CORE_H_

#include <stdarg.h>
#include "mbed.h"
#include "LM75B.h" // temperature
#include "C12832.h" // lcd
#include "FXOS8700Q.h" // accelerometer

#define MODES_COUNT 3
#define SCREEN_REFRESH_VALUE 1

class Core {
    public:
        Core() :
                m_mode(Temperature),
                m_ledR(D5),
                m_ledG(D8),
                m_ledB(D9),
                m_lcd(D11, D13, D12, D7, D10),
                m_temperature(D14, D15),
                m_btnNext(PTC6),
                m_btnOpt(PTA4),
                m_optTrigger(false),
                m_i2c(PTE25, PTE24),
                m_accelerometer(m_i2c, FXOS8700CQ_SLAVE_ADDR1),
                m_magnetometer(m_i2c, FXOS8700CQ_SLAVE_ADDR1),
                m_stateEntred(false),
                m_updateRate(SCREEN_REFRESH_VALUE),
                m_potentiometerLeft(A0)
                {}
        virtual ~Core() {}
        enum Mode {
            Temperature = 0,
            Accelerometer,
            Magnetometer
        };
    
    public:
        /**
        * Switch to next mode
        */
        void nextMode();
        /**
        * Init devices
        */
        void init();
        /**
        * Update datas (called on each "frame")
        */
        void update();
        
    private:
        /**
        * Used to change the shield led color
        */
        void setLedColor(float red, float green, float blue);
        /**
        * Used to write text on the LCD screen
        */
        void writeText(const char* text, int x, int y, ...);
        
    // Triggers
    private:
        void optTrigger();
        void nextTrigger();
        void updateStateTrigger();
        
    // States
    private:
        void stateTemperature();
        void stateAccelerometer();
        void stateMagnetometer();
    
    private:
        volatile Mode m_mode; /*< The current selected state */
        PwmOut m_ledR; /*< the LED Red color controller */
        PwmOut m_ledG; /*< the LED Green color controller */
        PwmOut m_ledB; /*< the LED Blue color controller */
        C12832 m_lcd; /*< The LCD Object */
        LM75B m_temperature; /*< The temperature mesurement device */
        InterruptIn m_btnNext; /*< The SW2 button */
        InterruptIn m_btnOpt; /*< The SW3 button */
        void (Core::*m_states[MODES_COUNT])(); /*< Method pointers array for the states */
        volatile bool m_optTrigger; /*< Manage the states modes */
        Ticker m_stateTicker; /*< The state ticker, to update the scene */
        I2C m_i2c; /*< i2c definition */
        FXOS8700QAccelerometer m_accelerometer; /*< the accelerometer device */
        FXOS8700QMagnetometer m_magnetometer; /*< the magnetometer device */
        bool m_stateEntred; /*< Defined to false when entring to a new state. Used to enable the used device */
        float m_updateRate; /*< The update rate (in seconds */
        AnalogIn m_potentiometerLeft; /*< the potentiometer device */
};

#endif /* !CORE_H_ */