Microwave homework

Dependencies:   C12832_lcd DebounceInterrupts LM75B mbed-rtos mbed

Committer:
bhakti08
Date:
Sun Mar 16 02:13:16 2014 +0000
Revision:
0:b3e2ffad2aab
Microwave homework-Partial

Who changed what in which revision?

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