![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Modified interesting blinky program for homework 4.1
Fork of blink_kl46z_button_LCD by
main.cpp@4:34ddcc34f42b, 2016-09-12 (annotated)
- Committer:
- eseifert
- Date:
- Mon Sep 12 07:34:47 2016 +0000
- Revision:
- 4:34ddcc34f42b
- Parent:
- 3:fc189dd7ac64
ESeif-SD541-HW4.1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
scohennm | 0:e23fffd4b9a7 | 1 | #include "mbed.h" |
scohennm | 2:b49e5adf84df | 2 | #include "SLCD.h" |
scohennm | 2:b49e5adf84df | 3 | |
eseifert | 4:34ddcc34f42b | 4 | #define LEDON false |
eseifert | 4:34ddcc34f42b | 5 | #define LEDOFF true |
eseifert | 4:34ddcc34f42b | 6 | #define NUMBUTS 2 |
eseifert | 4:34ddcc34f42b | 7 | #define LBUT PTC12 // port addresses for buttons |
eseifert | 4:34ddcc34f42b | 8 | #define RBUT PTC3 |
eseifert | 4:34ddcc34f42b | 9 | #define LED_ON_TIME 0.2 // in seconds |
eseifert | 4:34ddcc34f42b | 10 | #define LED_OFF_TIME 0.5 // set delay between blinks |
eseifert | 4:34ddcc34f42b | 11 | #define BUTTONTIME 0.2 |
eseifert | 4:34ddcc34f42b | 12 | #define LCD_CH_LEN 5 |
eseifert | 4:34ddcc34f42b | 13 | #define PC_CHAR_LEN 25 // add new variable for length of pc serial message |
eseifert | 4:34ddcc34f42b | 14 | #define NUMMESS 2 |
eseifert | 4:34ddcc34f42b | 15 | #define L_RED "RED" |
eseifert | 4:34ddcc34f42b | 16 | #define L_GRN "GRN" |
eseifert | 4:34ddcc34f42b | 17 | #define P_RED "RED BUTTON PUSHED\r\n" // change red pc serial message |
eseifert | 4:34ddcc34f42b | 18 | #define P_GRN "GREEN BUTTON PUSHED\r\n" // change green pc serial message |
eseifert | 4:34ddcc34f42b | 19 | #define PROGNAME "blink_kl46z_button LCD v2\r\n" |
scohennm | 0:e23fffd4b9a7 | 20 | |
scohennm | 0:e23fffd4b9a7 | 21 | // slightly more interesting blinky 140814 sc |
scohennm | 2:b49e5adf84df | 22 | SLCD slcd; //define LCD display |
scohennm | 0:e23fffd4b9a7 | 23 | |
scohennm | 3:fc189dd7ac64 | 24 | // Timer to elliminate wait() function |
scohennm | 3:fc189dd7ac64 | 25 | Timer LEDTimer; // for blinking LEDs |
scohennm | 3:fc189dd7ac64 | 26 | Timer ButtonTimer; // for reading button states |
scohennm | 1:2688f68df85d | 27 | |
scohennm | 3:fc189dd7ac64 | 28 | bool ledState = LEDON; |
scohennm | 3:fc189dd7ac64 | 29 | |
scohennm | 1:2688f68df85d | 30 | DigitalIn buttons[NUMBUTS] = {RBUT, LBUT}; |
scohennm | 1:2688f68df85d | 31 | DigitalOut LEDs[NUMBUTS] = {LED_GREEN, LED_RED}; |
eseifert | 4:34ddcc34f42b | 32 | Serial pc(USBTX, USBRX); // set up USB as communication is |
eseifert | 4:34ddcc34f42b | 33 | // to Host PC via USB connectons |
scohennm | 0:e23fffd4b9a7 | 34 | |
eseifert | 4:34ddcc34f42b | 35 | void allLEDsOff() |
eseifert | 4:34ddcc34f42b | 36 | { |
scohennm | 3:fc189dd7ac64 | 37 | int i; |
eseifert | 4:34ddcc34f42b | 38 | for (i=0; i<NUMBUTS; i++) { |
eseifert | 4:34ddcc34f42b | 39 | LEDs[i] = LEDOFF; |
scohennm | 3:fc189dd7ac64 | 40 | } |
scohennm | 3:fc189dd7ac64 | 41 | } |
eseifert | 4:34ddcc34f42b | 42 | |
eseifert | 4:34ddcc34f42b | 43 | void LCDMess(char *lMess) |
eseifert | 4:34ddcc34f42b | 44 | { |
eseifert | 4:34ddcc34f42b | 45 | slcd.Home(); |
eseifert | 4:34ddcc34f42b | 46 | slcd.clear(); |
eseifert | 4:34ddcc34f42b | 47 | slcd.printf(lMess); |
scohennm | 2:b49e5adf84df | 48 | } |
scohennm | 2:b49e5adf84df | 49 | |
eseifert | 4:34ddcc34f42b | 50 | void initialize_global_vars() |
eseifert | 4:34ddcc34f42b | 51 | { |
scohennm | 3:fc189dd7ac64 | 52 | pc.printf(PROGNAME); |
scohennm | 3:fc189dd7ac64 | 53 | // set up DAQ timers |
scohennm | 3:fc189dd7ac64 | 54 | ButtonTimer.start(); |
scohennm | 3:fc189dd7ac64 | 55 | ButtonTimer.reset(); |
scohennm | 3:fc189dd7ac64 | 56 | LEDTimer.start(); |
eseifert | 4:34ddcc34f42b | 57 | LEDTimer.reset(); |
scohennm | 3:fc189dd7ac64 | 58 | allLEDsOff(); |
eseifert | 4:34ddcc34f42b | 59 | } |
scohennm | 1:2688f68df85d | 60 | // -------------------------------- |
eseifert | 4:34ddcc34f42b | 61 | int main() |
eseifert | 4:34ddcc34f42b | 62 | { |
eseifert | 4:34ddcc34f42b | 63 | int i; |
scohennm | 1:2688f68df85d | 64 | int currentLED = 0; |
eseifert | 4:34ddcc34f42b | 65 | char rMess[NUMMESS][LCD_CH_LEN]= {L_GRN, L_RED}; // for LCD |
eseifert | 4:34ddcc34f42b | 66 | char pMess[NUMMESS][PC_CHAR_LEN]= {P_GRN, P_RED}; // for pc serial port |
eseifert | 4:34ddcc34f42b | 67 | // reverse these message so that the |
eseifert | 4:34ddcc34f42b | 68 | // correct one prints to serial port |
scohennm | 3:fc189dd7ac64 | 69 | initialize_global_vars(); //keep things organized |
scohennm | 3:fc189dd7ac64 | 70 | LEDs[currentLED] = LEDON; |
scohennm | 2:b49e5adf84df | 71 | LCDMess(rMess[currentLED]); |
scohennm | 2:b49e5adf84df | 72 | pc.printf(pMess[currentLED]); |
eseifert | 4:34ddcc34f42b | 73 | // End of setup |
eseifert | 4:34ddcc34f42b | 74 | |
scohennm | 0:e23fffd4b9a7 | 75 | while(true) { |
eseifert | 4:34ddcc34f42b | 76 | if (ButtonTimer > BUTTONTIME) { |
eseifert | 4:34ddcc34f42b | 77 | for (i = 0; i < NUMBUTS; i++) { // index will be 0 or 1 |
eseifert | 4:34ddcc34f42b | 78 | if(!buttons[i]) { |
eseifert | 4:34ddcc34f42b | 79 | allLEDsOff(); |
scohennm | 3:fc189dd7ac64 | 80 | LCDMess(rMess[i]); |
eseifert | 4:34ddcc34f42b | 81 | pc.printf(pMess[i]); |
scohennm | 3:fc189dd7ac64 | 82 | currentLED = i; |
scohennm | 3:fc189dd7ac64 | 83 | } // if ! buttons |
scohennm | 3:fc189dd7ac64 | 84 | }// for loop to look at buttons |
scohennm | 3:fc189dd7ac64 | 85 | ButtonTimer.reset(); |
scohennm | 1:2688f68df85d | 86 | } |
eseifert | 4:34ddcc34f42b | 87 | |
eseifert | 4:34ddcc34f42b | 88 | if(ledState == 0){ // switch on LED state |
eseifert | 4:34ddcc34f42b | 89 | if(LEDTimer.read() > LED_ON_TIME) { |
eseifert | 4:34ddcc34f42b | 90 | // if LED state is low wait 500 ms before change |
eseifert | 4:34ddcc34f42b | 91 | LEDTimer.reset(); |
eseifert | 4:34ddcc34f42b | 92 | ledState = !ledState; // Flip the general state |
eseifert | 4:34ddcc34f42b | 93 | LEDs[currentLED] = ledState; |
eseifert | 4:34ddcc34f42b | 94 | } |
eseifert | 4:34ddcc34f42b | 95 | } else { |
eseifert | 4:34ddcc34f42b | 96 | // if LED state is not low wait 200 ms before change |
eseifert | 4:34ddcc34f42b | 97 | if(LEDTimer.read() > LED_OFF_TIME) { |
eseifert | 4:34ddcc34f42b | 98 | LEDTimer.reset(); |
eseifert | 4:34ddcc34f42b | 99 | ledState = !ledState; // Flip the general state |
eseifert | 4:34ddcc34f42b | 100 | LEDs[currentLED] = ledState; |
eseifert | 4:34ddcc34f42b | 101 | } |
scohennm | 3:fc189dd7ac64 | 102 | } |
eseifert | 4:34ddcc34f42b | 103 | // Do other things here between times of reading and flashing |
scohennm | 0:e23fffd4b9a7 | 104 | } |
scohennm | 0:e23fffd4b9a7 | 105 | } |