Microwave homework
Dependencies: C12832_lcd DebounceInterrupts LM75B mbed-rtos mbed
main.cpp@0:b3e2ffad2aab, 2014-03-16 (annotated)
- Committer:
- bhakti08
- Date:
- Sun Mar 16 02:13:16 2014 +0000
- Revision:
- 0:b3e2ffad2aab
Microwave homework-Partial
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
bhakti08 | 0:b3e2ffad2aab | 1 | #include "mbed.h" |
bhakti08 | 0:b3e2ffad2aab | 2 | #include "LM75B.h" |
bhakti08 | 0:b3e2ffad2aab | 3 | #include "C12832_lcd.h" |
bhakti08 | 0:b3e2ffad2aab | 4 | #include "rtos.h" |
bhakti08 | 0:b3e2ffad2aab | 5 | #include "DebouncedIn.h" |
bhakti08 | 0:b3e2ffad2aab | 6 | #include "DebouncedInterrupt.h" |
bhakti08 | 0:b3e2ffad2aab | 7 | #include "Serial.h" |
bhakti08 | 0:b3e2ffad2aab | 8 | |
bhakti08 | 0:b3e2ffad2aab | 9 | //Serial pc(USBTX, USBRX); |
bhakti08 | 0:b3e2ffad2aab | 10 | |
bhakti08 | 0:b3e2ffad2aab | 11 | #define OPEN 1 |
bhakti08 | 0:b3e2ffad2aab | 12 | #define CLOSE 0 |
bhakti08 | 0:b3e2ffad2aab | 13 | #define ON 1 |
bhakti08 | 0:b3e2ffad2aab | 14 | #define OFF 0 |
bhakti08 | 0:b3e2ffad2aab | 15 | #define INTERRUPT |
bhakti08 | 0:b3e2ffad2aab | 16 | |
bhakti08 | 0:b3e2ffad2aab | 17 | DebouncedInterrupt increase_time(p13); |
bhakti08 | 0:b3e2ffad2aab | 18 | DebouncedInterrupt decrease_time(p16); |
bhakti08 | 0:b3e2ffad2aab | 19 | DebouncedInterrupt start (p12); |
bhakti08 | 0:b3e2ffad2aab | 20 | DebouncedInterrupt stop(p15); |
bhakti08 | 0:b3e2ffad2aab | 21 | DebouncedInterrupt door_status(p14); |
bhakti08 | 0:b3e2ffad2aab | 22 | DigitalOut door_signal(LED4); |
bhakti08 | 0:b3e2ffad2aab | 23 | //BusOut cook(LED4,LED3,LED2,LED1); |
bhakti08 | 0:b3e2ffad2aab | 24 | |
bhakti08 | 0:b3e2ffad2aab | 25 | LM75B in_temp(p28,p27); |
bhakti08 | 0:b3e2ffad2aab | 26 | C12832_LCD lcd; |
bhakti08 | 0:b3e2ffad2aab | 27 | DigitalOut cook_progress(LED1); |
bhakti08 | 0:b3e2ffad2aab | 28 | DigitalOut door_Signal(LED4); //This LED will be 1 if door is open |
bhakti08 | 0:b3e2ffad2aab | 29 | DigitalOut done_cooking(LED2); |
bhakti08 | 0:b3e2ffad2aab | 30 | PwmOut speaker(p26); |
bhakti08 | 0:b3e2ffad2aab | 31 | Timer ellapsed_cook_timer; |
bhakti08 | 0:b3e2ffad2aab | 32 | |
bhakti08 | 0:b3e2ffad2aab | 33 | int requested_cook_time = 120; |
bhakti08 | 0:b3e2ffad2aab | 34 | //float inside_temp; //Initial value of inside temp is room temperature |
bhakti08 | 0:b3e2ffad2aab | 35 | bool door_position = OPEN; //keep track if door is closed or open door_status = 0: close,1:open |
bhakti08 | 0:b3e2ffad2aab | 36 | bool cook_status = OFF; |
bhakti08 | 0:b3e2ffad2aab | 37 | bool speaker_signal; |
bhakti08 | 0:b3e2ffad2aab | 38 | float ellapsed_cook_time = 0; //Cooking should be stopped if door open |
bhakti08 | 0:b3e2ffad2aab | 39 | |
bhakti08 | 0:b3e2ffad2aab | 40 | |
bhakti08 | 0:b3e2ffad2aab | 41 | void open_door(); |
bhakti08 | 0:b3e2ffad2aab | 42 | void time_up(); |
bhakti08 | 0:b3e2ffad2aab | 43 | void time_down(); |
bhakti08 | 0:b3e2ffad2aab | 44 | void LED_blink (void const *args); |
bhakti08 | 0:b3e2ffad2aab | 45 | void sound_speaker (void const *args); |
bhakti08 | 0:b3e2ffad2aab | 46 | void start_cooking (); |
bhakti08 | 0:b3e2ffad2aab | 47 | void stop_cooking (); |
bhakti08 | 0:b3e2ffad2aab | 48 | void update_lcd(void const *args); |
bhakti08 | 0:b3e2ffad2aab | 49 | void check_ellapsed_cook_time (void const *args); |
bhakti08 | 0:b3e2ffad2aab | 50 | |
bhakti08 | 0:b3e2ffad2aab | 51 | Ticker LED_Blink_timer; |
bhakti08 | 0:b3e2ffad2aab | 52 | |
bhakti08 | 0:b3e2ffad2aab | 53 | |
bhakti08 | 0:b3e2ffad2aab | 54 | void open_door() |
bhakti08 | 0:b3e2ffad2aab | 55 | { |
bhakti08 | 0:b3e2ffad2aab | 56 | door_position = !door_position; |
bhakti08 | 0:b3e2ffad2aab | 57 | { |
bhakti08 | 0:b3e2ffad2aab | 58 | if (door_position == OPEN) |
bhakti08 | 0:b3e2ffad2aab | 59 | { |
bhakti08 | 0:b3e2ffad2aab | 60 | door_Signal = 1; |
bhakti08 | 0:b3e2ffad2aab | 61 | } |
bhakti08 | 0:b3e2ffad2aab | 62 | else |
bhakti08 | 0:b3e2ffad2aab | 63 | { |
bhakti08 | 0:b3e2ffad2aab | 64 | door_Signal = 0; |
bhakti08 | 0:b3e2ffad2aab | 65 | } |
bhakti08 | 0:b3e2ffad2aab | 66 | } |
bhakti08 | 0:b3e2ffad2aab | 67 | } |
bhakti08 | 0:b3e2ffad2aab | 68 | |
bhakti08 | 0:b3e2ffad2aab | 69 | void time_up() |
bhakti08 | 0:b3e2ffad2aab | 70 | { |
bhakti08 | 0:b3e2ffad2aab | 71 | |
bhakti08 | 0:b3e2ffad2aab | 72 | if (requested_cook_time < 180) |
bhakti08 | 0:b3e2ffad2aab | 73 | requested_cook_time = requested_cook_time + 60; |
bhakti08 | 0:b3e2ffad2aab | 74 | else |
bhakti08 | 0:b3e2ffad2aab | 75 | requested_cook_time = 180; |
bhakti08 | 0:b3e2ffad2aab | 76 | } |
bhakti08 | 0:b3e2ffad2aab | 77 | |
bhakti08 | 0:b3e2ffad2aab | 78 | void time_down() |
bhakti08 | 0:b3e2ffad2aab | 79 | { |
bhakti08 | 0:b3e2ffad2aab | 80 | if (requested_cook_time > 0) |
bhakti08 | 0:b3e2ffad2aab | 81 | requested_cook_time = requested_cook_time - 60; |
bhakti08 | 0:b3e2ffad2aab | 82 | else |
bhakti08 | 0:b3e2ffad2aab | 83 | requested_cook_time = 0; |
bhakti08 | 0:b3e2ffad2aab | 84 | } |
bhakti08 | 0:b3e2ffad2aab | 85 | |
bhakti08 | 0:b3e2ffad2aab | 86 | void LED_blink () |
bhakti08 | 0:b3e2ffad2aab | 87 | { |
bhakti08 | 0:b3e2ffad2aab | 88 | cook_progress= !cook_progress; |
bhakti08 | 0:b3e2ffad2aab | 89 | } |
bhakti08 | 0:b3e2ffad2aab | 90 | |
bhakti08 | 0:b3e2ffad2aab | 91 | void start_cooking () |
bhakti08 | 0:b3e2ffad2aab | 92 | { |
bhakti08 | 0:b3e2ffad2aab | 93 | if (door_position == CLOSE) |
bhakti08 | 0:b3e2ffad2aab | 94 | { |
bhakti08 | 0:b3e2ffad2aab | 95 | speaker_signal = 1; |
bhakti08 | 0:b3e2ffad2aab | 96 | ellapsed_cook_timer.start(); |
bhakti08 | 0:b3e2ffad2aab | 97 | LED_Blink_timer.attach(&LED_blink,0.250); |
bhakti08 | 0:b3e2ffad2aab | 98 | } |
bhakti08 | 0:b3e2ffad2aab | 99 | } |
bhakti08 | 0:b3e2ffad2aab | 100 | |
bhakti08 | 0:b3e2ffad2aab | 101 | void stop_cooking () |
bhakti08 | 0:b3e2ffad2aab | 102 | { |
bhakti08 | 0:b3e2ffad2aab | 103 | ellapsed_cook_timer.stop(); |
bhakti08 | 0:b3e2ffad2aab | 104 | cook_status = OFF; |
bhakti08 | 0:b3e2ffad2aab | 105 | LED_Blink_timer.detach(); |
bhakti08 | 0:b3e2ffad2aab | 106 | cook_progress = 0; |
bhakti08 | 0:b3e2ffad2aab | 107 | speaker_signal = 0; |
bhakti08 | 0:b3e2ffad2aab | 108 | } |
bhakti08 | 0:b3e2ffad2aab | 109 | |
bhakti08 | 0:b3e2ffad2aab | 110 | void start_speaker() |
bhakti08 | 0:b3e2ffad2aab | 111 | { |
bhakti08 | 0:b3e2ffad2aab | 112 | speaker.period(1.0/5000); |
bhakti08 | 0:b3e2ffad2aab | 113 | while(door_position != OPEN && speaker_signal == 1){ |
bhakti08 | 0:b3e2ffad2aab | 114 | speaker = 0.5; |
bhakti08 | 0:b3e2ffad2aab | 115 | wait(0.1); |
bhakti08 | 0:b3e2ffad2aab | 116 | speaker = 0.0; |
bhakti08 | 0:b3e2ffad2aab | 117 | wait(0.1); |
bhakti08 | 0:b3e2ffad2aab | 118 | } |
bhakti08 | 0:b3e2ffad2aab | 119 | speaker_signal = 0; |
bhakti08 | 0:b3e2ffad2aab | 120 | } |
bhakti08 | 0:b3e2ffad2aab | 121 | |
bhakti08 | 0:b3e2ffad2aab | 122 | void update_lcd(void const *args) |
bhakti08 | 0:b3e2ffad2aab | 123 | { |
bhakti08 | 0:b3e2ffad2aab | 124 | lcd.cls(); |
bhakti08 | 0:b3e2ffad2aab | 125 | while(true) |
bhakti08 | 0:b3e2ffad2aab | 126 | { |
bhakti08 | 0:b3e2ffad2aab | 127 | lcd.locate(0,0); |
bhakti08 | 0:b3e2ffad2aab | 128 | lcd.printf("Ellapsed time is %0.2f",ellapsed_cook_timer.read()/60); |
bhakti08 | 0:b3e2ffad2aab | 129 | lcd.locate(0,10); |
bhakti08 | 0:b3e2ffad2aab | 130 | lcd.printf("Set time is %d",requested_cook_time/60); |
bhakti08 | 0:b3e2ffad2aab | 131 | Thread::wait (1000); |
bhakti08 | 0:b3e2ffad2aab | 132 | } |
bhakti08 | 0:b3e2ffad2aab | 133 | } |
bhakti08 | 0:b3e2ffad2aab | 134 | |
bhakti08 | 0:b3e2ffad2aab | 135 | |
bhakti08 | 0:b3e2ffad2aab | 136 | void check_ellapsed_cook_time (void const *args) |
bhakti08 | 0:b3e2ffad2aab | 137 | { |
bhakti08 | 0:b3e2ffad2aab | 138 | while (true) |
bhakti08 | 0:b3e2ffad2aab | 139 | { |
bhakti08 | 0:b3e2ffad2aab | 140 | if (ellapsed_cook_timer.read()/60 >= requested_cook_time/60 )//&& cook_status != OFF) |
bhakti08 | 0:b3e2ffad2aab | 141 | { |
bhakti08 | 0:b3e2ffad2aab | 142 | ellapsed_cook_timer.stop(); |
bhakti08 | 0:b3e2ffad2aab | 143 | ellapsed_cook_timer.reset(); |
bhakti08 | 0:b3e2ffad2aab | 144 | cook_status = OFF; |
bhakti08 | 0:b3e2ffad2aab | 145 | LED_Blink_timer.detach(); |
bhakti08 | 0:b3e2ffad2aab | 146 | start_speaker(); |
bhakti08 | 0:b3e2ffad2aab | 147 | } |
bhakti08 | 0:b3e2ffad2aab | 148 | Thread::wait(10); |
bhakti08 | 0:b3e2ffad2aab | 149 | } |
bhakti08 | 0:b3e2ffad2aab | 150 | } |
bhakti08 | 0:b3e2ffad2aab | 151 | |
bhakti08 | 0:b3e2ffad2aab | 152 | |
bhakti08 | 0:b3e2ffad2aab | 153 | int main() |
bhakti08 | 0:b3e2ffad2aab | 154 | { |
bhakti08 | 0:b3e2ffad2aab | 155 | //printf("\nIn main"); |
bhakti08 | 0:b3e2ffad2aab | 156 | Thread lcd_display(update_lcd,NULL, osPriorityAboveNormal); |
bhakti08 | 0:b3e2ffad2aab | 157 | Thread track_ellapsed_cook_time(check_ellapsed_cook_time,NULL,osPriorityHigh); |
bhakti08 | 0:b3e2ffad2aab | 158 | increase_time.attach(&time_up); |
bhakti08 | 0:b3e2ffad2aab | 159 | decrease_time.attach(&time_down); |
bhakti08 | 0:b3e2ffad2aab | 160 | start.attach(&start_cooking); |
bhakti08 | 0:b3e2ffad2aab | 161 | stop.attach(&stop_cooking); |
bhakti08 | 0:b3e2ffad2aab | 162 | door_status.attach(&open_door); |
bhakti08 | 0:b3e2ffad2aab | 163 | door_Signal = door_position; |
bhakti08 | 0:b3e2ffad2aab | 164 | |
bhakti08 | 0:b3e2ffad2aab | 165 | |
bhakti08 | 0:b3e2ffad2aab | 166 | while (true) |
bhakti08 | 0:b3e2ffad2aab | 167 | { |
bhakti08 | 0:b3e2ffad2aab | 168 | if(door_Signal == OPEN )//|| stop == 1) |
bhakti08 | 0:b3e2ffad2aab | 169 | stop_cooking(); |
bhakti08 | 0:b3e2ffad2aab | 170 | Thread::wait(400); |
bhakti08 | 0:b3e2ffad2aab | 171 | } |
bhakti08 | 0:b3e2ffad2aab | 172 | } |