Basic_sine_wave_generator
Dependencies: mbed 4DGL-uLCD-SE mbed-rtos AD5206
menu.cpp@11:d21c2da8b290, 2015-12-02 (annotated)
- Committer:
- hanjiex
- Date:
- Wed Dec 02 19:48:56 2015 +0000
- Revision:
- 11:d21c2da8b290
- Parent:
- 10:159f38636ed4
Missing part:; 1, touch pad control; 2, integrated with RPC
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hanjiex | 10:159f38636ed4 | 1 | /* |
hanjiex | 10:159f38636ed4 | 2 | * menu.cpp |
hanjiex | 11:d21c2da8b290 | 3 | * Author: Hanjie Xie |
hanjiex | 10:159f38636ed4 | 4 | */ |
hanjiex | 10:159f38636ed4 | 5 | |
hanjiex | 10:159f38636ed4 | 6 | #include "mbed.h" |
hanjiex | 10:159f38636ed4 | 7 | #include "uLCD_4DGL.h" |
hanjiex | 10:159f38636ed4 | 8 | #include "menu.h" |
hanjiex | 10:159f38636ed4 | 9 | #include "para.h" |
hanjiex | 10:159f38636ed4 | 10 | uLCD_4DGL uLCD(p9,p10,p11); |
hanjiex | 10:159f38636ed4 | 11 | DigitalIn left_pb1(p21); |
hanjiex | 10:159f38636ed4 | 12 | DigitalIn right_pb1(p23); |
hanjiex | 10:159f38636ed4 | 13 | DigitalIn fire_pb1(p22); |
hanjiex | 10:159f38636ed4 | 14 | DigitalIn toggle_pb1(p24); |
hanjiex | 10:159f38636ed4 | 15 | |
hanjiex | 10:159f38636ed4 | 16 | int start_enable; |
hanjiex | 10:159f38636ed4 | 17 | int rules_display; |
hanjiex | 10:159f38636ed4 | 18 | int dev_display; |
hanjiex | 10:159f38636ed4 | 19 | int go_to_quit; |
hanjiex | 10:159f38636ed4 | 20 | // declare the class |
hanjiex | 10:159f38636ed4 | 21 | para mypara; |
hanjiex | 10:159f38636ed4 | 22 | |
hanjiex | 10:159f38636ed4 | 23 | int begain_first(){ |
hanjiex | 10:159f38636ed4 | 24 | left_pb1.mode(PullUp); |
hanjiex | 10:159f38636ed4 | 25 | right_pb1.mode(PullUp); |
hanjiex | 10:159f38636ed4 | 26 | fire_pb1.mode(PullUp); |
hanjiex | 10:159f38636ed4 | 27 | toggle_pb1.mode(PullUp); |
hanjiex | 10:159f38636ed4 | 28 | display_beginning(); |
hanjiex | 10:159f38636ed4 | 29 | while(1){ |
hanjiex | 10:159f38636ed4 | 30 | display_main_menu(); |
hanjiex | 10:159f38636ed4 | 31 | choose(); |
hanjiex | 10:159f38636ed4 | 32 | check(); |
hanjiex | 10:159f38636ed4 | 33 | if(start_enable==1){ |
hanjiex | 10:159f38636ed4 | 34 | break; |
hanjiex | 10:159f38636ed4 | 35 | } |
hanjiex | 10:159f38636ed4 | 36 | } |
hanjiex | 10:159f38636ed4 | 37 | return 1; |
hanjiex | 10:159f38636ed4 | 38 | } |
hanjiex | 10:159f38636ed4 | 39 | |
hanjiex | 10:159f38636ed4 | 40 | int return_menu(){ |
hanjiex | 10:159f38636ed4 | 41 | uLCD.cls(); |
hanjiex | 10:159f38636ed4 | 42 | while(1){ |
hanjiex | 10:159f38636ed4 | 43 | display_main_menu(); |
hanjiex | 10:159f38636ed4 | 44 | choose(); |
hanjiex | 10:159f38636ed4 | 45 | check(); |
hanjiex | 10:159f38636ed4 | 46 | if(start_enable==1){ |
hanjiex | 10:159f38636ed4 | 47 | para_setting(); |
hanjiex | 10:159f38636ed4 | 48 | return 1; |
hanjiex | 10:159f38636ed4 | 49 | } |
hanjiex | 10:159f38636ed4 | 50 | } |
hanjiex | 10:159f38636ed4 | 51 | } |
hanjiex | 10:159f38636ed4 | 52 | |
hanjiex | 10:159f38636ed4 | 53 | void display_beginning(){ |
hanjiex | 10:159f38636ed4 | 54 | uLCD.color(RED); |
hanjiex | 10:159f38636ed4 | 55 | uLCD.printf("\nWelcome\n"); //Default Green on black text |
hanjiex | 10:159f38636ed4 | 56 | uLCD.printf("\nTo\n"); //Default Green on black text |
hanjiex | 10:159f38636ed4 | 57 | uLCD.printf("\nMbed\n"); |
hanjiex | 10:159f38636ed4 | 58 | uLCD.printf("\nFunction Genator!\n"); |
hanjiex | 10:159f38636ed4 | 59 | wait(2); |
hanjiex | 10:159f38636ed4 | 60 | uLCD.cls(); |
hanjiex | 10:159f38636ed4 | 61 | |
hanjiex | 10:159f38636ed4 | 62 | } |
hanjiex | 10:159f38636ed4 | 63 | |
hanjiex | 10:159f38636ed4 | 64 | void display_main_menu(){ |
hanjiex | 10:159f38636ed4 | 65 | uLCD.locate(4,3); |
hanjiex | 10:159f38636ed4 | 66 | uLCD.printf("\n Let's Start!\n"); |
hanjiex | 10:159f38636ed4 | 67 | uLCD.locate(4,5); |
hanjiex | 10:159f38636ed4 | 68 | uLCD.printf("\n How to use?\n"); |
hanjiex | 10:159f38636ed4 | 69 | uLCD.locate(4,7); |
hanjiex | 10:159f38636ed4 | 70 | uLCD.printf("\n Developer\n"); |
hanjiex | 10:159f38636ed4 | 71 | uLCD.locate(4,9); |
hanjiex | 10:159f38636ed4 | 72 | uLCD.printf("\n Quit.\n"); |
hanjiex | 10:159f38636ed4 | 73 | uLCD.color(GREEN); |
hanjiex | 10:159f38636ed4 | 74 | uLCD.locate(4,12); |
hanjiex | 10:159f38636ed4 | 75 | uLCD.printf("\n OK UP DOWN \n"); |
hanjiex | 10:159f38636ed4 | 76 | uLCD.filled_circle(20,100,2,GREEN); |
hanjiex | 10:159f38636ed4 | 77 | uLCD.filled_circle(50,100,2,GREEN); |
hanjiex | 10:159f38636ed4 | 78 | uLCD.filled_circle(80,100,2,GREEN); |
hanjiex | 10:159f38636ed4 | 79 | uLCD.filled_circle(110,100,2,GREEN); |
hanjiex | 10:159f38636ed4 | 80 | wait(1); |
hanjiex | 10:159f38636ed4 | 81 | } |
hanjiex | 10:159f38636ed4 | 82 | |
hanjiex | 10:159f38636ed4 | 83 | void choose(){ |
hanjiex | 10:159f38636ed4 | 84 | start_enable = 0; |
hanjiex | 10:159f38636ed4 | 85 | rules_display = 0; |
hanjiex | 10:159f38636ed4 | 86 | dev_display = 0; |
hanjiex | 10:159f38636ed4 | 87 | go_to_quit = 0; |
hanjiex | 10:159f38636ed4 | 88 | int circle_y = 35; |
hanjiex | 10:159f38636ed4 | 89 | uLCD.filled_circle(10,35,2,BLUE); //51 67 83 +16 |
hanjiex | 10:159f38636ed4 | 90 | int choose = 0; |
hanjiex | 10:159f38636ed4 | 91 | while(choose == 0){ |
hanjiex | 10:159f38636ed4 | 92 | if(left_pb1 == 0){ |
hanjiex | 10:159f38636ed4 | 93 | choose = 1; |
hanjiex | 10:159f38636ed4 | 94 | if(circle_y == 35){ |
hanjiex | 10:159f38636ed4 | 95 | start_enable = 1; |
hanjiex | 10:159f38636ed4 | 96 | }else if(circle_y == 51){ |
hanjiex | 10:159f38636ed4 | 97 | rules_display = 1; |
hanjiex | 10:159f38636ed4 | 98 | }else if(circle_y == 67){ |
hanjiex | 10:159f38636ed4 | 99 | dev_display = 1; |
hanjiex | 10:159f38636ed4 | 100 | }else if(circle_y == 83){ |
hanjiex | 10:159f38636ed4 | 101 | go_to_quit = 1; |
hanjiex | 10:159f38636ed4 | 102 | } |
hanjiex | 10:159f38636ed4 | 103 | uLCD.cls(); |
hanjiex | 10:159f38636ed4 | 104 | } |
hanjiex | 10:159f38636ed4 | 105 | if(fire_pb1 == 0){ |
hanjiex | 10:159f38636ed4 | 106 | uLCD.filled_circle(10,circle_y,2,BLACK); |
hanjiex | 10:159f38636ed4 | 107 | wait(0.2); |
hanjiex | 10:159f38636ed4 | 108 | if(circle_y > 35){ |
hanjiex | 10:159f38636ed4 | 109 | circle_y = circle_y-16; |
hanjiex | 10:159f38636ed4 | 110 | } |
hanjiex | 10:159f38636ed4 | 111 | uLCD.filled_circle(10,circle_y,2,BLUE); |
hanjiex | 10:159f38636ed4 | 112 | } |
hanjiex | 10:159f38636ed4 | 113 | if(right_pb1 == 0){ |
hanjiex | 10:159f38636ed4 | 114 | uLCD.filled_circle(10,circle_y,2,BLACK); |
hanjiex | 10:159f38636ed4 | 115 | wait(0.2); |
hanjiex | 10:159f38636ed4 | 116 | if(circle_y < 80){ |
hanjiex | 10:159f38636ed4 | 117 | circle_y = circle_y+16; |
hanjiex | 10:159f38636ed4 | 118 | } |
hanjiex | 10:159f38636ed4 | 119 | uLCD.filled_circle(10,circle_y,2,BLUE); |
hanjiex | 10:159f38636ed4 | 120 | } |
hanjiex | 10:159f38636ed4 | 121 | } |
hanjiex | 10:159f38636ed4 | 122 | } |
hanjiex | 10:159f38636ed4 | 123 | |
hanjiex | 10:159f38636ed4 | 124 | void check(){ |
hanjiex | 10:159f38636ed4 | 125 | if(rules_display == 1){ |
hanjiex | 10:159f38636ed4 | 126 | /**************************************** |
hanjiex | 10:159f38636ed4 | 127 | FIND A CONTROL RULE |
hanjiex | 10:159f38636ed4 | 128 | *****************************************/ |
hanjiex | 10:159f38636ed4 | 129 | } else if(dev_display == 1){ |
hanjiex | 10:159f38636ed4 | 130 | uLCD.locate(4,3); |
hanjiex | 10:159f38636ed4 | 131 | uLCD.printf("\n JIN XUEFEN\n"); |
hanjiex | 10:159f38636ed4 | 132 | uLCD.locate(4,5); |
hanjiex | 10:159f38636ed4 | 133 | uLCD.printf("\n PENG YUQING\n"); |
hanjiex | 10:159f38636ed4 | 134 | uLCD.locate(4,7); |
hanjiex | 10:159f38636ed4 | 135 | uLCD.printf("\n TAO QIUYANG\n"); |
hanjiex | 10:159f38636ed4 | 136 | uLCD.locate(4,9); |
hanjiex | 10:159f38636ed4 | 137 | uLCD.printf("\n XIE HANJIE\n"); |
hanjiex | 10:159f38636ed4 | 138 | wait(5); |
hanjiex | 10:159f38636ed4 | 139 | uLCD.cls(); |
hanjiex | 10:159f38636ed4 | 140 | } else if(go_to_quit == 1){ |
hanjiex | 10:159f38636ed4 | 141 | uLCD.printf("\nBye\n"); |
hanjiex | 10:159f38636ed4 | 142 | exit(0); |
hanjiex | 10:159f38636ed4 | 143 | } |
hanjiex | 10:159f38636ed4 | 144 | } |
hanjiex | 10:159f38636ed4 | 145 | |
hanjiex | 11:d21c2da8b290 | 146 | para para_setting() { |
hanjiex | 10:159f38636ed4 | 147 | mode_set(); |
hanjiex | 10:159f38636ed4 | 148 | freq_set(); |
hanjiex | 10:159f38636ed4 | 149 | amp_set(); |
hanjiex | 11:d21c2da8b290 | 150 | //offset_set(); |
hanjiex | 10:159f38636ed4 | 151 | para_display(); |
hanjiex | 11:d21c2da8b290 | 152 | return mypara; |
hanjiex | 10:159f38636ed4 | 153 | } |
hanjiex | 10:159f38636ed4 | 154 | |
hanjiex | 10:159f38636ed4 | 155 | void mode_set() { |
hanjiex | 10:159f38636ed4 | 156 | uLCD.locate(4,3); |
hanjiex | 10:159f38636ed4 | 157 | uLCD.printf("\n Sine wave\n"); |
hanjiex | 10:159f38636ed4 | 158 | uLCD.locate(4,5); |
hanjiex | 10:159f38636ed4 | 159 | uLCD.printf("\n Square wave\n"); |
hanjiex | 10:159f38636ed4 | 160 | uLCD.locate(4,7); |
hanjiex | 10:159f38636ed4 | 161 | uLCD.printf("\n Tringle wave\n"); |
hanjiex | 10:159f38636ed4 | 162 | int circle_y = 35; |
hanjiex | 10:159f38636ed4 | 163 | uLCD.filled_circle(10,35,2,BLUE); //51 67 83 +16 |
hanjiex | 10:159f38636ed4 | 164 | int choose = 0; |
hanjiex | 10:159f38636ed4 | 165 | while(choose == 0){ |
hanjiex | 10:159f38636ed4 | 166 | if(left_pb1 == 0){ |
hanjiex | 10:159f38636ed4 | 167 | choose = 1; |
hanjiex | 10:159f38636ed4 | 168 | int type = (circle_y - 35) / 16; |
hanjiex | 10:159f38636ed4 | 169 | mypara.set_type(type); |
hanjiex | 10:159f38636ed4 | 170 | uLCD.cls(); |
hanjiex | 10:159f38636ed4 | 171 | } |
hanjiex | 10:159f38636ed4 | 172 | if(fire_pb1 == 0){ |
hanjiex | 10:159f38636ed4 | 173 | uLCD.filled_circle(10,circle_y,2,BLACK); |
hanjiex | 10:159f38636ed4 | 174 | wait(0.2); |
hanjiex | 10:159f38636ed4 | 175 | if(circle_y > 35){ |
hanjiex | 10:159f38636ed4 | 176 | circle_y = circle_y-16; |
hanjiex | 10:159f38636ed4 | 177 | } |
hanjiex | 10:159f38636ed4 | 178 | uLCD.filled_circle(10,circle_y,2,BLUE); |
hanjiex | 10:159f38636ed4 | 179 | } |
hanjiex | 10:159f38636ed4 | 180 | if(right_pb1 == 0){ |
hanjiex | 10:159f38636ed4 | 181 | uLCD.filled_circle(10,circle_y,2,BLACK); |
hanjiex | 10:159f38636ed4 | 182 | wait(0.2); |
hanjiex | 10:159f38636ed4 | 183 | if(circle_y < 62){ |
hanjiex | 10:159f38636ed4 | 184 | circle_y = circle_y+16; |
hanjiex | 10:159f38636ed4 | 185 | } |
hanjiex | 10:159f38636ed4 | 186 | uLCD.filled_circle(10,circle_y,2,BLUE); |
hanjiex | 10:159f38636ed4 | 187 | } |
hanjiex | 10:159f38636ed4 | 188 | } |
hanjiex | 10:159f38636ed4 | 189 | } |
hanjiex | 10:159f38636ed4 | 190 | |
hanjiex | 10:159f38636ed4 | 191 | void freq_set() { |
hanjiex | 10:159f38636ed4 | 192 | /* |
hanjiex | 10:159f38636ed4 | 193 | int kilodig; |
hanjiex | 10:159f38636ed4 | 194 | int hunddig; |
hanjiex | 10:159f38636ed4 | 195 | int tensdig; |
hanjiex | 10:159f38636ed4 | 196 | int unit; |
hanjiex | 10:159f38636ed4 | 197 | uLCD.locate(4,3); |
hanjiex | 10:159f38636ed4 | 198 | uLCD.printf("\n kilo place:"); |
hanjiex | 10:159f38636ed4 | 199 | uLCD.locate(4,5); |
hanjiex | 10:159f38636ed4 | 200 | uLCD.printf("\n hundreds place:\n"); |
hanjiex | 10:159f38636ed4 | 201 | uLCD.locate(4,7); |
hanjiex | 10:159f38636ed4 | 202 | uLCD.printf("\n tens placen:"); |
hanjiex | 10:159f38636ed4 | 203 | uLCD.locate(4,9); |
hanjiex | 10:159f38636ed4 | 204 | uLCD.printf("\n unit:\n"); |
hanjiex | 10:159f38636ed4 | 205 | */ |
hanjiex | 10:159f38636ed4 | 206 | int choose = 0; |
hanjiex | 11:d21c2da8b290 | 207 | float increment = 100; |
hanjiex | 10:159f38636ed4 | 208 | uLCD.locate(1,3); |
hanjiex | 10:159f38636ed4 | 209 | uLCD.printf("\nSet the frequency:\n"); |
hanjiex | 10:159f38636ed4 | 210 | while(choose == 0){ |
hanjiex | 10:159f38636ed4 | 211 | uLCD.locate(4,5); |
hanjiex | 11:d21c2da8b290 | 212 | uLCD.printf("\n%.0f \n", mypara.get_freq()); |
hanjiex | 10:159f38636ed4 | 213 | if(left_pb1 == 0){ |
hanjiex | 10:159f38636ed4 | 214 | choose = 1; |
hanjiex | 10:159f38636ed4 | 215 | uLCD.cls(); |
hanjiex | 10:159f38636ed4 | 216 | } |
hanjiex | 10:159f38636ed4 | 217 | if(fire_pb1 == 0){ |
hanjiex | 10:159f38636ed4 | 218 | float temp = mypara.get_freq(); |
hanjiex | 10:159f38636ed4 | 219 | temp += increment; |
hanjiex | 10:159f38636ed4 | 220 | mypara.set_freq(temp); |
hanjiex | 10:159f38636ed4 | 221 | } |
hanjiex | 10:159f38636ed4 | 222 | if(right_pb1 == 0){ |
hanjiex | 10:159f38636ed4 | 223 | float temp = mypara.get_freq(); |
hanjiex | 10:159f38636ed4 | 224 | temp -= increment; |
hanjiex | 10:159f38636ed4 | 225 | mypara.set_freq(temp); |
hanjiex | 10:159f38636ed4 | 226 | } |
hanjiex | 10:159f38636ed4 | 227 | wait(0.2); |
hanjiex | 10:159f38636ed4 | 228 | } |
hanjiex | 10:159f38636ed4 | 229 | } |
hanjiex | 10:159f38636ed4 | 230 | |
hanjiex | 10:159f38636ed4 | 231 | void amp_set() { |
hanjiex | 10:159f38636ed4 | 232 | int choose = 0; |
hanjiex | 10:159f38636ed4 | 233 | uLCD.locate(1,3); |
hanjiex | 10:159f38636ed4 | 234 | uLCD.printf("\nSet the amplitude:\n"); |
hanjiex | 10:159f38636ed4 | 235 | float increment = 0.5; |
hanjiex | 10:159f38636ed4 | 236 | while(choose == 0){ |
hanjiex | 10:159f38636ed4 | 237 | uLCD.locate(4,5); |
hanjiex | 10:159f38636ed4 | 238 | uLCD.printf("\n%.2f \n", mypara.get_amp()); |
hanjiex | 10:159f38636ed4 | 239 | if(left_pb1 == 0){ |
hanjiex | 10:159f38636ed4 | 240 | choose = 1; |
hanjiex | 10:159f38636ed4 | 241 | uLCD.cls(); |
hanjiex | 10:159f38636ed4 | 242 | } |
hanjiex | 10:159f38636ed4 | 243 | if(fire_pb1 == 0){ |
hanjiex | 10:159f38636ed4 | 244 | float temp = mypara.get_amp(); |
hanjiex | 10:159f38636ed4 | 245 | temp += increment; |
hanjiex | 10:159f38636ed4 | 246 | mypara.set_amp(temp); |
hanjiex | 10:159f38636ed4 | 247 | } |
hanjiex | 10:159f38636ed4 | 248 | if(right_pb1 == 0){ |
hanjiex | 10:159f38636ed4 | 249 | float temp = mypara.get_amp(); |
hanjiex | 10:159f38636ed4 | 250 | temp -= increment; |
hanjiex | 10:159f38636ed4 | 251 | mypara.set_amp(temp); |
hanjiex | 10:159f38636ed4 | 252 | } |
hanjiex | 10:159f38636ed4 | 253 | wait(0.2); |
hanjiex | 10:159f38636ed4 | 254 | } |
hanjiex | 10:159f38636ed4 | 255 | } |
hanjiex | 10:159f38636ed4 | 256 | |
hanjiex | 11:d21c2da8b290 | 257 | |
hanjiex | 10:159f38636ed4 | 258 | |
hanjiex | 10:159f38636ed4 | 259 | void para_display() { |
hanjiex | 10:159f38636ed4 | 260 | uLCD.locate(4,3); |
hanjiex | 10:159f38636ed4 | 261 | uLCD.printf("\n 1.Type: %d\n", mypara.get_type()); |
hanjiex | 10:159f38636ed4 | 262 | uLCD.locate(4,5); |
hanjiex | 10:159f38636ed4 | 263 | uLCD.printf("\n 2.Frequency: %d\n", mypara.get_freq()); |
hanjiex | 10:159f38636ed4 | 264 | uLCD.locate(4,7); |
hanjiex | 10:159f38636ed4 | 265 | uLCD.printf("\n 3.Amplitude: %.2f\n", mypara.get_amp()); |
hanjiex | 11:d21c2da8b290 | 266 | //uLCD.locate(4,9); |
hanjiex | 11:d21c2da8b290 | 267 | //uLCD.printf("\n 4.Offset: %.2f\n", mypara.get_offset()); |
hanjiex | 10:159f38636ed4 | 268 | } |