Colin Monroe
/
CKM_HW_4_2
Homework for week 4, modified from original program as per instructions - CKM
main.cpp@1:4a283472ac8e, 2016-09-12 (annotated)
- 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?
User | Revision | Line number | New 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 | } |