homework 7

Dependencies:   mbed-rtos mbed C12832_lcd LM75B

Committer:
gatedClock
Date:
Sat Sep 07 21:18:40 2013 +0000
Revision:
16:db7f0b3b2605
Parent:
15:5eaa2ab1d00d
Child:
17:51252cd4fe2e
Child:
18:64fde599e645
code writing in progress.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gatedClock 0:fcca4db7b32a 1 /*----------------------------------------------//------------------------------
gatedClock 0:fcca4db7b32a 2 student : m-moore
gatedClock 0:fcca4db7b32a 3 class : rtos
gatedClock 10:2b0a9fc39109 4 directory : RTOS_HW_07
gatedClock 0:fcca4db7b32a 5 file : main.cpp
gatedClock 0:fcca4db7b32a 6 ----description---------------------------------//------------------------------
gatedClock 0:fcca4db7b32a 7 -----includes-----------------------------------//----------------------------*/
gatedClock 0:fcca4db7b32a 8 #include "mbed.h" // mbed class.
gatedClock 10:2b0a9fc39109 9 #include "rtos.h" // rtos class.
gatedClock 10:2b0a9fc39109 10 #include "C12832_lcd.h" // LCD class.
gatedClock 0:fcca4db7b32a 11 //---defines------------------------------------//------------------------------
gatedClock 9:cfdb9aa5857c 12 #define LCD1 lcd.locate(0, 0); // LCD line 1.
gatedClock 9:cfdb9aa5857c 13 #define LCD2 lcd.locate(0,11); // LCD line 2.
gatedClock 9:cfdb9aa5857c 14 #define LCD3 lcd.locate(0,22); // LCD line 3.
gatedClock 9:cfdb9aa5857c 15
gatedClock 10:2b0a9fc39109 16
gatedClock 9:cfdb9aa5857c 17 #define DEBOUNCE 0.16 // debounce pause duration in S.
gatedClock 16:db7f0b3b2605 18 #define uS_TIMEOUT 100 // Timer uS timeout.
gatedClock 16:db7f0b3b2605 19 #define LBSIG 1 // left button signal code.
gatedClock 0:fcca4db7b32a 20 //--global_definitions--------------------------//------------------------------
gatedClock 0:fcca4db7b32a 21 //--global_variables----------------------------//------------------------------
gatedClock 16:db7f0b3b2605 22 char gcSignalWaitEnable; // 1 to wait on a signal.
gatedClock 0:fcca4db7b32a 23 //--global_instances----------------------------//------------------------------
gatedClock 9:cfdb9aa5857c 24 C12832_LCD lcd; // LCD object.
gatedClock 0:fcca4db7b32a 25
gatedClock 0:fcca4db7b32a 26 InterruptIn iJoyStickUp (p15); // joystick up rising edge.
gatedClock 0:fcca4db7b32a 27 InterruptIn iJoyStickDown (p12); // joystick down rising edge.
gatedClock 0:fcca4db7b32a 28 InterruptIn iJoyStickLeft (p13); // joystick left rising edge.
gatedClock 0:fcca4db7b32a 29 InterruptIn iJoyStickRight (p16); // joystick right rising edge.
gatedClock 0:fcca4db7b32a 30 InterruptIn iJoyStickCenter(p14); // 1 if joystick middle pressed.
gatedClock 0:fcca4db7b32a 31
gatedClock 0:fcca4db7b32a 32 DigitalOut led3(LED1); // leftmost LED.
gatedClock 0:fcca4db7b32a 33
gatedClock 9:cfdb9aa5857c 34 Ticker tickerMetronome; // blinking LED.
gatedClock 9:cfdb9aa5857c 35 Ticker tickerLCD; // display ticker.
gatedClock 16:db7f0b3b2605 36 Timeout timeoutSignal; // stop waiting for signal.
gatedClock 0:fcca4db7b32a 37 //-------prototypes-----------------------------//------------------------------
gatedClock 9:cfdb9aa5857c 38 void initialization(); // initialize settings.
gatedClock 13:21f27ba467c2 39
gatedClock 13:21f27ba467c2 40 void ISRleftButtonRising(); // cook-time increase.
gatedClock 13:21f27ba467c2 41 void ISRleftButtonFalling(); // button-release debounce.
gatedClock 13:21f27ba467c2 42 void ISRrightButtonRising(); // cook-time decrease.
gatedClock 13:21f27ba467c2 43 void ISRrightButtonFalling(); // button-release debounce.
gatedClock 13:21f27ba467c2 44 void ISRtopButtonRising(); // cook start.
gatedClock 13:21f27ba467c2 45 void ISRtopButtonFalling(); // button-release debounce.
gatedClock 13:21f27ba467c2 46 void ISRbottomButtonRising(); // cook stop.
gatedClock 13:21f27ba467c2 47 void ISRbottomButtonFalling(); // button-release debounce.
gatedClock 13:21f27ba467c2 48 void ISRcenterButtonRising(); // door state toggle.
gatedClock 13:21f27ba467c2 49 void ISRcenterButtonFalling(); // button-release debounce.
gatedClock 16:db7f0b3b2605 50 void disableSignalWaiting(); // break from signal waiting.
gatedClock 0:fcca4db7b32a 51 //==============================================//==============================
gatedClock 0:fcca4db7b32a 52 int main(void)
gatedClock 0:fcca4db7b32a 53 {
gatedClock 16:db7f0b3b2605 54 char cLeftButtonState; // 1 means button was pressed.
gatedClock 16:db7f0b3b2605 55
gatedClock 16:db7f0b3b2605 56
gatedClock 16:db7f0b3b2605 57
gatedClock 14:d3bb343cd5b2 58 iJoyStickLeft.rise (&ISRleftButtonRising);
gatedClock 14:d3bb343cd5b2 59 iJoyStickLeft.fall (&ISRleftButtonFalling);
gatedClock 9:cfdb9aa5857c 60
gatedClock 14:d3bb343cd5b2 61 iJoyStickRight.rise(&ISRrightButtonRising);
gatedClock 14:d3bb343cd5b2 62 iJoyStickRight.fall(&ISRrightButtonFalling);
gatedClock 14:d3bb343cd5b2 63
gatedClock 14:d3bb343cd5b2 64 iJoyStickUp.rise (&ISRtopButtonRising);
gatedClock 14:d3bb343cd5b2 65 iJoyStickUp.fall (&ISRtopButtonFalling);
gatedClock 9:cfdb9aa5857c 66
gatedClock 14:d3bb343cd5b2 67 iJoyStickDown.rise (&ISRbottomButtonRising);
gatedClock 14:d3bb343cd5b2 68 iJoyStickDown.fall (&ISRbottomButtonFalling);
gatedClock 7:9fbd1d540863 69
gatedClock 14:d3bb343cd5b2 70 iJoyStickCenter.rise(&ISRcenterButtonRising);
gatedClock 14:d3bb343cd5b2 71 iJoyStickCenter.fall(&ISRcenterButtonFalling);
gatedClock 9:cfdb9aa5857c 72
gatedClock 16:db7f0b3b2605 73
gatedClock 16:db7f0b3b2605 74
gatedClock 9:cfdb9aa5857c 75 initialization(); // initialize variables.
gatedClock 0:fcca4db7b32a 76
gatedClock 14:d3bb343cd5b2 77
gatedClock 9:cfdb9aa5857c 78
gatedClock 14:d3bb343cd5b2 79 while(1)
gatedClock 0:fcca4db7b32a 80 {
gatedClock 16:db7f0b3b2605 81 cLeftButtonState = 0; // clear button state.
gatedClock 16:db7f0b3b2605 82
gatedClock 16:db7f0b3b2605 83 gcSignalWaitEnable = 1; // enable wait-for-signal.
gatedClock 16:db7f0b3b2605 84 timeoutSignal.detach(); // only one attach allowed.
gatedClock 16:db7f0b3b2605 85 timeoutSignal.attach_us(&disableSignalWaiting,uS_TIMEOUT);
gatedClock 16:db7f0b3b2605 86 while(gcSignalWaitEnable) // signal from left-button ISR.
gatedClock 16:db7f0b3b2605 87 {
gatedClock 16:db7f0b3b2605 88 Thread::signal_wait(LBSIG); // if signal received before timeout.
gatedClock 16:db7f0b3b2605 89 cLeftButtonState = 1; // left button is pressed.
gatedClock 16:db7f0b3b2605 90 }
gatedClock 16:db7f0b3b2605 91
gatedClock 16:db7f0b3b2605 92
gatedClock 16:db7f0b3b2605 93
gatedClock 14:d3bb343cd5b2 94
gatedClock 0:fcca4db7b32a 95 }
gatedClock 0:fcca4db7b32a 96 }
gatedClock 0:fcca4db7b32a 97 /*----------------------------------------------//----------------------------*/
gatedClock 0:fcca4db7b32a 98 void initialization(void) // program initializations.
gatedClock 0:fcca4db7b32a 99 {
gatedClock 16:db7f0b3b2605 100 gcSignalWaitEnable = 1;
gatedClock 0:fcca4db7b32a 101 }
gatedClock 0:fcca4db7b32a 102 /*----------------------------------------------//----------------------------*/
gatedClock 14:d3bb343cd5b2 103 void ISRleftButtonRising(void)
gatedClock 1:9188d4668a88 104 {
gatedClock 11:9cae003da12b 105 __disable_irq(); // debounce start.
gatedClock 9:cfdb9aa5857c 106
gatedClock 11:9cae003da12b 107
gatedClock 9:cfdb9aa5857c 108
gatedClock 9:cfdb9aa5857c 109 wait(DEBOUNCE); // debounce time.
gatedClock 9:cfdb9aa5857c 110
gatedClock 11:9cae003da12b 111 __enable_irq(); // debounce done.
gatedClock 11:9cae003da12b 112 }
gatedClock 1:9188d4668a88 113 /*----------------------------------------------//----------------------------*/
gatedClock 15:5eaa2ab1d00d 114 void ISRleftButtonFalling(void) // button-release debounce.
gatedClock 1:9188d4668a88 115 {
gatedClock 11:9cae003da12b 116 __disable_irq(); // debounce start.
gatedClock 9:cfdb9aa5857c 117
gatedClock 11:9cae003da12b 118
gatedClock 9:cfdb9aa5857c 119
gatedClock 9:cfdb9aa5857c 120 wait(DEBOUNCE); // debounce time.
gatedClock 9:cfdb9aa5857c 121
gatedClock 11:9cae003da12b 122 __enable_irq(); // debounce done.
gatedClock 11:9cae003da12b 123 }
gatedClock 2:665ffa57031f 124 /*----------------------------------------------//----------------------------*/
gatedClock 14:d3bb343cd5b2 125 void ISRrightButtonRising(void)
gatedClock 12:e40272e1fd8f 126 {
gatedClock 12:e40272e1fd8f 127 __disable_irq(); // debounce start.
gatedClock 12:e40272e1fd8f 128
gatedClock 12:e40272e1fd8f 129
gatedClock 12:e40272e1fd8f 130
gatedClock 12:e40272e1fd8f 131 wait(DEBOUNCE); // debounce time.
gatedClock 12:e40272e1fd8f 132
gatedClock 12:e40272e1fd8f 133 __enable_irq(); // debounce done.
gatedClock 12:e40272e1fd8f 134 }
gatedClock 12:e40272e1fd8f 135 /*----------------------------------------------//----------------------------*/
gatedClock 15:5eaa2ab1d00d 136 void ISRrightButtonFalling(void) // button-release debounce.
gatedClock 12:e40272e1fd8f 137 {
gatedClock 12:e40272e1fd8f 138 __disable_irq(); // debounce start.
gatedClock 12:e40272e1fd8f 139
gatedClock 12:e40272e1fd8f 140
gatedClock 12:e40272e1fd8f 141
gatedClock 12:e40272e1fd8f 142 wait(DEBOUNCE); // debounce time.
gatedClock 12:e40272e1fd8f 143
gatedClock 12:e40272e1fd8f 144 __enable_irq(); // debounce done.
gatedClock 12:e40272e1fd8f 145 }
gatedClock 12:e40272e1fd8f 146 /*----------------------------------------------//----------------------------*/
gatedClock 14:d3bb343cd5b2 147 void ISRtopButtonRising(void)
gatedClock 12:e40272e1fd8f 148 {
gatedClock 12:e40272e1fd8f 149 __disable_irq(); // debounce start.
gatedClock 12:e40272e1fd8f 150
gatedClock 12:e40272e1fd8f 151
gatedClock 12:e40272e1fd8f 152
gatedClock 12:e40272e1fd8f 153 wait(DEBOUNCE); // debounce time.
gatedClock 12:e40272e1fd8f 154
gatedClock 12:e40272e1fd8f 155 __enable_irq(); // debounce done.
gatedClock 12:e40272e1fd8f 156 }
gatedClock 12:e40272e1fd8f 157 /*----------------------------------------------//----------------------------*/
gatedClock 15:5eaa2ab1d00d 158 void ISRtopButtonFalling(void) // button-release debounce.
gatedClock 12:e40272e1fd8f 159 {
gatedClock 12:e40272e1fd8f 160 __disable_irq(); // debounce start.
gatedClock 12:e40272e1fd8f 161
gatedClock 12:e40272e1fd8f 162
gatedClock 12:e40272e1fd8f 163
gatedClock 12:e40272e1fd8f 164 wait(DEBOUNCE); // debounce time.
gatedClock 12:e40272e1fd8f 165
gatedClock 12:e40272e1fd8f 166 __enable_irq(); // debounce done.
gatedClock 12:e40272e1fd8f 167 }
gatedClock 12:e40272e1fd8f 168 /*----------------------------------------------//----------------------------*/
gatedClock 14:d3bb343cd5b2 169 void ISRbottomButtonRising(void)
gatedClock 12:e40272e1fd8f 170 {
gatedClock 12:e40272e1fd8f 171 __disable_irq(); // debounce start.
gatedClock 12:e40272e1fd8f 172
gatedClock 12:e40272e1fd8f 173
gatedClock 12:e40272e1fd8f 174
gatedClock 12:e40272e1fd8f 175 wait(DEBOUNCE); // debounce time.
gatedClock 12:e40272e1fd8f 176
gatedClock 12:e40272e1fd8f 177 __enable_irq(); // debounce done.
gatedClock 12:e40272e1fd8f 178 }
gatedClock 12:e40272e1fd8f 179 /*----------------------------------------------//----------------------------*/
gatedClock 15:5eaa2ab1d00d 180 void ISRbottomButtonFalling(void) // button-release debounce.
gatedClock 12:e40272e1fd8f 181 {
gatedClock 12:e40272e1fd8f 182 __disable_irq(); // debounce start.
gatedClock 12:e40272e1fd8f 183
gatedClock 12:e40272e1fd8f 184
gatedClock 12:e40272e1fd8f 185
gatedClock 12:e40272e1fd8f 186 wait(DEBOUNCE); // debounce time.
gatedClock 12:e40272e1fd8f 187
gatedClock 12:e40272e1fd8f 188 __enable_irq(); // debounce done.
gatedClock 12:e40272e1fd8f 189 }
gatedClock 12:e40272e1fd8f 190 /*----------------------------------------------//----------------------------*/
gatedClock 14:d3bb343cd5b2 191 void ISRcenterButtonRising(void)
gatedClock 12:e40272e1fd8f 192 {
gatedClock 12:e40272e1fd8f 193 __disable_irq(); // debounce start.
gatedClock 12:e40272e1fd8f 194
gatedClock 12:e40272e1fd8f 195
gatedClock 12:e40272e1fd8f 196
gatedClock 12:e40272e1fd8f 197 wait(DEBOUNCE); // debounce time.
gatedClock 12:e40272e1fd8f 198
gatedClock 12:e40272e1fd8f 199 __enable_irq(); // debounce done.
gatedClock 12:e40272e1fd8f 200 }
gatedClock 12:e40272e1fd8f 201 /*----------------------------------------------//----------------------------*/
gatedClock 15:5eaa2ab1d00d 202 void ISRcenterButtonFalling(void) // button-release debounce.
gatedClock 12:e40272e1fd8f 203 {
gatedClock 12:e40272e1fd8f 204 __disable_irq(); // debounce start.
gatedClock 12:e40272e1fd8f 205
gatedClock 12:e40272e1fd8f 206
gatedClock 12:e40272e1fd8f 207
gatedClock 12:e40272e1fd8f 208 wait(DEBOUNCE); // debounce time.
gatedClock 12:e40272e1fd8f 209
gatedClock 12:e40272e1fd8f 210 __enable_irq(); // debounce done.
gatedClock 12:e40272e1fd8f 211 }
gatedClock 12:e40272e1fd8f 212 /*----------------------------------------------//----------------------------*/
gatedClock 16:db7f0b3b2605 213 // break from wait for signal.
gatedClock 16:db7f0b3b2605 214 void disableSignalWaiting(void) {gcSignalWaitEnable = 0;}
gatedClock 16:db7f0b3b2605 215 /*----------------------------------------------//----------------------------*/
gatedClock 16:db7f0b3b2605 216
gatedClock 13:21f27ba467c2 217