Modified interesting blinky program for homework 4.1

Dependencies:   SLCD mbed

Fork of blink_kl46z_button_LCD by Stanley Cohen

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?

UserRevisionLine numberNew 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 }