Homework for week 4, modified from original program as per instructions - CKM

Dependencies:   SLCD mbed

Committer:
CKMonroe
Date:
Mon Sep 12 00:18:45 2016 +0000
Revision:
1:4a283472ac8e
Parent:
0:23505376c0c6
revised due to to instructor message

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CKMonroe 0:23505376c0c6 1 #include "mbed.h"
CKMonroe 0:23505376c0c6 2 #include "SLCD.h"
CKMonroe 0:23505376c0c6 3
CKMonroe 0:23505376c0c6 4 #define LEDON false
CKMonroe 0:23505376c0c6 5 #define LEDOFF true
CKMonroe 0:23505376c0c6 6 #define NUMBUTS 2
CKMonroe 0:23505376c0c6 7 #define LBUT PTC12 // port addresses for buttons
CKMonroe 0:23505376c0c6 8 #define RBUT PTC3
CKMonroe 1:4a283472ac8e 9
CKMonroe 1:4a283472ac8e 10 //CKM: changed blinktime variable to 'blinkONtime' and changed length to .5 seconds (500 ms)
CKMonroe 1:4a283472ac8e 11 //Then, added a new variable called 'blinkOFFtime', which is set to .2 seconds (200 ms).
CKMonroe 1:4a283472ac8e 12 #define BLINKONTIME 0.5 //500 ms
CKMonroe 1:4a283472ac8e 13 #define BLINKOFFTIME 0.2 //200 ms
CKMonroe 1:4a283472ac8e 14
CKMonroe 0:23505376c0c6 15 #define BUTTONTIME 0.2
CKMonroe 0:23505376c0c6 16 #define LCDCHARLEN 25 //CKM: changed character length to 25 for character array
CKMonroe 0:23505376c0c6 17 #define NUMMESS 2
CKMonroe 0:23505376c0c6 18 #define LRED "RED"
CKMonroe 0:23505376c0c6 19 #define LGREEN "GREN"
CKMonroe 0:23505376c0c6 20 #define PRED "RED BUTTON PUSHED\r\n" //CKM: changed serial output #DEFINE to "RED BUTTON PUSHED"
CKMonroe 0:23505376c0c6 21 #define PGREEN "GREEN BUTTON PUSHED\r\n" //CKM: changed serial output #DEFINE to "GREEN BUTTON PUSHED"
CKMonroe 0:23505376c0c6 22 #define PROGNAME "blink_kl46z_buttton LCD v2\r\n"
CKMonroe 0:23505376c0c6 23
CKMonroe 0:23505376c0c6 24 // slightly more interesting blinky 140814 sc
CKMonroe 0:23505376c0c6 25 SLCD slcd; //define LCD display
CKMonroe 0:23505376c0c6 26
CKMonroe 0:23505376c0c6 27 // Timer to elliminate wait() function
CKMonroe 0:23505376c0c6 28 Timer LEDTimer; // for blinking LEDs
CKMonroe 0:23505376c0c6 29 Timer ButtonTimer; // for reading button states
CKMonroe 0:23505376c0c6 30
CKMonroe 0:23505376c0c6 31 bool ledState = LEDON;
CKMonroe 0:23505376c0c6 32
CKMonroe 0:23505376c0c6 33 DigitalIn buttons[NUMBUTS] = {RBUT, LBUT};
CKMonroe 0:23505376c0c6 34 DigitalOut LEDs[NUMBUTS] = {LED_GREEN, LED_RED};
CKMonroe 0:23505376c0c6 35 Serial pc(USBTX, USBRX);// set up USB as communicationis to Host PC via USB connectons
CKMonroe 0:23505376c0c6 36
CKMonroe 0:23505376c0c6 37 void allLEDsOff(){
CKMonroe 0:23505376c0c6 38 int i;
CKMonroe 0:23505376c0c6 39 for (i=0; i<NUMBUTS; i++){
CKMonroe 0:23505376c0c6 40 LEDs[i] = LEDOFF;
CKMonroe 0:23505376c0c6 41 }
CKMonroe 0:23505376c0c6 42 }
CKMonroe 0:23505376c0c6 43
CKMonroe 0:23505376c0c6 44 void LCDMess(char *lMess){
CKMonroe 0:23505376c0c6 45 slcd.Home();
CKMonroe 0:23505376c0c6 46 slcd.clear();
CKMonroe 0:23505376c0c6 47 slcd.printf(lMess);
CKMonroe 0:23505376c0c6 48 }
CKMonroe 0:23505376c0c6 49
CKMonroe 0:23505376c0c6 50 void initialize_global_vars(){
CKMonroe 0:23505376c0c6 51 pc.printf(PROGNAME);
CKMonroe 0:23505376c0c6 52 // set up DAQ timers
CKMonroe 0:23505376c0c6 53 ButtonTimer.start();
CKMonroe 0:23505376c0c6 54 ButtonTimer.reset();
CKMonroe 0:23505376c0c6 55 LEDTimer.start();
CKMonroe 0:23505376c0c6 56 LEDTimer.reset();
CKMonroe 0:23505376c0c6 57 allLEDsOff();
CKMonroe 0:23505376c0c6 58 }
CKMonroe 0:23505376c0c6 59 // --------------------------------
CKMonroe 0:23505376c0c6 60 int main() {
CKMonroe 0:23505376c0c6 61 int i;
CKMonroe 0:23505376c0c6 62 int currentLED = 0;
CKMonroe 0:23505376c0c6 63 char rMess[NUMMESS][LCDCHARLEN]={LGREEN, LRED}; // for LCD
CKMonroe 0:23505376c0c6 64 char pMess[NUMMESS][LCDCHARLEN]={PRED, PGREEN}; // for pc serial port
CKMonroe 0:23505376c0c6 65
CKMonroe 0:23505376c0c6 66 initialize_global_vars(); //keep things organized
CKMonroe 0:23505376c0c6 67 LEDs[currentLED] = LEDON;
CKMonroe 0:23505376c0c6 68 LCDMess(rMess[currentLED]);
CKMonroe 0:23505376c0c6 69 pc.printf(pMess[currentLED]);
CKMonroe 0:23505376c0c6 70 // End of setup
CKMonroe 0:23505376c0c6 71 while(true) {
CKMonroe 0:23505376c0c6 72 if (ButtonTimer > BUTTONTIME){
CKMonroe 0:23505376c0c6 73 for (i=0; i<NUMBUTS; i++){ // index will be 0 or 1
CKMonroe 0:23505376c0c6 74 if(!buttons[i]) {
CKMonroe 0:23505376c0c6 75 allLEDsOff();
CKMonroe 0:23505376c0c6 76 LCDMess(rMess[i]);
CKMonroe 0:23505376c0c6 77 pc.printf(pMess[i]);
CKMonroe 0:23505376c0c6 78 currentLED = i;
CKMonroe 0:23505376c0c6 79 } // if ! buttons
CKMonroe 0:23505376c0c6 80 }// for loop to look at buttons
CKMonroe 0:23505376c0c6 81 ButtonTimer.reset();
CKMonroe 0:23505376c0c6 82 }
CKMonroe 1:4a283472ac8e 83 if(LEDTimer.read() > BLINKONTIME && ledState){
CKMonroe 1:4a283472ac8e 84 LEDTimer.reset();
CKMonroe 1:4a283472ac8e 85 ledState = !ledState; // Flip the general state
CKMonroe 1:4a283472ac8e 86 LEDs[currentLED] = ledState;
CKMonroe 1:4a283472ac8e 87 }
CKMonroe 1:4a283472ac8e 88 //added an else if statement with regards to the state of the LED
CKMonroe 1:4a283472ac8e 89 //and the new variable, 'blinkOFFtime'. This will reset the LED
CKMonroe 1:4a283472ac8e 90 //according to the blinkOFFtime variable instead of the blinkONtime
CKMonroe 1:4a283472ac8e 91 //variable if the ledState is false.
CKMonroe 1:4a283472ac8e 92 else if (LEDTimer.read() > BLINKOFFTIME && !ledState)
CKMonroe 1:4a283472ac8e 93 {
CKMonroe 0:23505376c0c6 94 LEDTimer.reset();
CKMonroe 0:23505376c0c6 95 ledState = !ledState; // Flip the general state
CKMonroe 0:23505376c0c6 96 LEDs[currentLED] = ledState;
CKMonroe 0:23505376c0c6 97 }
CKMonroe 0:23505376c0c6 98 // Do other things here between times of reading and flashing
CKMonroe 0:23505376c0c6 99 }
CKMonroe 0:23505376c0c6 100 }