Big Mouth Billy Bass automation library

Dependents:   BillyBass_with_SD

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers billybass.hpp Source File

billybass.hpp

00001 #ifndef __included_billybass_hpp
00002 #define __included_billybass_hpp
00003 
00004 #include "mbed.h"
00005 #include "config.hpp"
00006 #include <list>
00007 #include <vector>
00008 #include <cmath>
00009 #include "mbed_debug.h"
00010 
00011 class BillyBass
00012 {
00013 public:
00014 
00015     BillyBass(PinName tailPin, PinName mouthPin, PinName bodyPin, bool _inverted=false) :
00016         tail(tailPin), mouth(mouthPin), body(bodyPin), inverted(!!_inverted) {
00017         relax();
00018         if (numFish < MAX_FISH) fish[numFish++] = this;
00019         else fprintf(stderr, "Too many fish!\r\n");
00020     }
00021 
00022     // if *_pName, it will get the string name of the output
00023     DigitalOut *outputNamed(char const *_outputName, char const **_pName = 0, float *_pOnDelay = 0, float *_pOffDelay = 0, float *_pMinOn = 0);
00024 
00025     static BillyBass *bassNumber(unsigned which) {
00026         return (which >= numFish) ? 0 : fish[which];
00027     }
00028 
00029     static unsigned getNumFish() {
00030         return numFish;
00031     }
00032 
00033     int onState() const {
00034         return !inverted;
00035     }
00036     int offState() const {
00037         return inverted;
00038     }
00039 
00040     void relax() {
00041         tail.write(offState());
00042         mouth.write(offState());
00043         body.write(offState());
00044     }
00045     char const * outputName(DigitalOut const *out) const;
00046 
00047 protected:
00048     static BillyBass* fish[ MAX_FISH ];
00049     static unsigned numFish;
00050     static char const * mouthName;
00051     static char const * bodyName;
00052     static char const * tailName;
00053 
00054     DigitalOut tail;
00055     DigitalOut mouth;
00056     DigitalOut body;
00057     int inverted;
00058 };
00059 
00060 #endif