For use and an example of states and mod operator with KL46Z somewhat abusive use of c++

Dependencies:   SLCD mbed

Fork of blink_kl46z by Stanley Cohen

main.cpp

Committer:
scohennm
Date:
2014-09-09
Revision:
3:64e28ee5719b
Parent:
2:c016448d89b2
Child:
4:bd42ab18979b

File content as of revision 3:64e28ee5719b:

#include "mbed.h"
#include "SLCD.h"


// An example of C++ abuse 140904 sc
//#define PRINTDEBUG
#define PROGNAME "blink_kl46z_states v1\n\r"
#define LEDON false
#define LEDOFF true
#define PWMDWELL 50 // milliseconds
#define DFDELTA 0.01
#define PWMTIME 1 // ms (kHz
#define LCDLEN 10
#define RMPUP true
#define RMPDWN false
#define NUMSTATES 2
#define NEWDUTYFACTOR 1
#define IDLESTATE 0

float dutyFactor = 0.0;
PwmOut greenColor(LED_GREEN);
PwmOut redColor(LED_RED);
SLCD slcd; //define LCD display
float rampDirection[NUMSTATES] = {-DFDELTA, DFDELTA};


Serial pc(USBTX, USBRX);

void LCDMess(char *lMess){
        slcd.Home();
        slcd.clear();
        slcd.printf(lMess);
} 

int main() {
    char lcdData[LCDLEN];
    int rampstate = RMPUP;
    int numSteps;
    float workingDelta;
    Timer LEDTimer;
    int timeToChangeDF = PWMDWELL;
    int i=0;
    // set up timer for next step of Duty Factor timing
    LEDTimer.start();
    LEDTimer.reset();
    pc.printf(PROGNAME);
    
    greenColor.period_ms(PWMTIME); // set the frequency of the pulse train
    redColor.period_ms(PWMTIME);   // so there is no flickering
    
    workingDelta = rampDirection[rampstate];
    numSteps = (int)(1.0/workingDelta);
    while(true) {
        if (LEDTimer.read_ms() > timeToChangeDF) { 
            i++;      
            redColor.write(dutyFactor);
            greenColor.write(1.0 - dutyFactor);
            dutyFactor += workingDelta;
            sprintf (lcdData,"%4.3f",dutyFactor);  
            LCDMess(lcdData);
#ifdef PRINTDEBUG
        pc.printf("i= %d dutyfactor = %5.4f workingDelta %5.4f \n\r",  i, dutyFactor, workingDelta); 
#endif
            if (!(i % numSteps)){
                i=0;
                LEDTimer.reset();
                rampstate = !rampstate;
                workingDelta = rampDirection[rampstate];
            }
        }
    }
}