Telliskivi 2+ peripherals library

HumanInterface.h

Committer:
Reiko
Date:
2013-09-19
Revision:
0:ccf47494061b
Child:
1:9b2455659c7d

File content as of revision 0:ccf47494061b:

#ifndef HUMANINTERFACE_H
#define HUMANINTERFACE_H

#include "mbed.h"
#include "PCA9555.h"
#include "externalin.h"
#include "ledout.h"
#include "Serial.h"

class HumanInterface {
    FunctionPointer changeCallback;
    FunctionPointer goalRiseCallback;
    FunctionPointer startRiseCallback;
    FunctionPointer ballChangeCallback;
public:
    HumanInterface(
        Serial *pc, PCA9555 *ioExt,
        unsigned int yellowLedPin, unsigned int blueLedPin, unsigned int redLedPin,
        unsigned int goalButtonPin, unsigned int startButtonPin, unsigned int ballSensePin
    ); 
    
    enum Goal {YELLOW, BLUE, UNSET};
    void setGoal(Goal goal);
    void setError(bool state);
    
    bool getBallState();
    
    void change(void (*function)(void));
    
    template<typename T>
    void change(T *object, void (T::*member)(void)) { 
        changeCallback.attach(object, member); 
    } 
    
    void goalRise(void (*function)(void));
    
    template<typename T>
    void goalRise(T *object, void (T::*member)(void)) { 
        goalRiseCallback.attach(object, member); 
    } 
    
    void startRise(void (*function)(void));
    
    template<typename T>
    void startRise(T *object, void (T::*member)(void)) { 
        startRiseCallback.attach(object, member); 
    } 
    
    void ballChange(void (*function)(void));
    
    template<typename T>
    void ballChange(T *object, void (T::*member)(void)) { 
        ballChangeCallback.attach(object, member); 
    }
    
private:
    Serial *pc;
    
    PCA9555 *extIO;

    ExternalIn goalButton; // 14
    ExternalIn startButton; // 15
    ExternalIn ballSense; // 10

    bool goalLastState;
    bool startLastState;
    bool ballLastState;

    LedOut redLed;
    LedOut blueLed;
    LedOut yellowLed;

    bool redBlinking;
    bool blueBlinking;
    bool yellowBlinking;

    Ticker ledTicker;
    
    void blinkLeds(void);
    void extChangedCallback(void);
};

#endif