Basic_sine_wave_generator

Dependencies:   mbed 4DGL-uLCD-SE mbed-rtos AD5206

Committer:
hanjiex
Date:
Tue Dec 01 18:59:42 2015 +0000
Revision:
10:159f38636ed4
Child:
11:d21c2da8b290
extern issue

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hanjiex 10:159f38636ed4 1 /*
hanjiex 10:159f38636ed4 2 * menu.cpp
hanjiex 10:159f38636ed4 3 * The menu is displayed first when the funtion generator starts
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 10:159f38636ed4 146 int para_setting() {
hanjiex 10:159f38636ed4 147 mode_set();
hanjiex 10:159f38636ed4 148 freq_set();
hanjiex 10:159f38636ed4 149 amp_set();
hanjiex 10:159f38636ed4 150 offset_set();
hanjiex 10:159f38636ed4 151 para_display();
hanjiex 10:159f38636ed4 152 return 1;
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 10:159f38636ed4 207 int 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 10:159f38636ed4 212 uLCD.printf("\n%d \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 10:159f38636ed4 257 void offset_set() {
hanjiex 10:159f38636ed4 258 int choose = 0;
hanjiex 10:159f38636ed4 259 uLCD.locate(4,3);
hanjiex 10:159f38636ed4 260 uLCD.printf("\nSet the offset:\n");
hanjiex 10:159f38636ed4 261 float increment = 0.5;
hanjiex 10:159f38636ed4 262 while(choose == 0){
hanjiex 10:159f38636ed4 263 uLCD.locate(4,5);
hanjiex 10:159f38636ed4 264 uLCD.printf("\n%.2f \n", mypara.get_offset());
hanjiex 10:159f38636ed4 265 if(left_pb1 == 0){
hanjiex 10:159f38636ed4 266 choose = 1;
hanjiex 10:159f38636ed4 267 uLCD.cls();
hanjiex 10:159f38636ed4 268 }
hanjiex 10:159f38636ed4 269 if(fire_pb1 == 0){
hanjiex 10:159f38636ed4 270 float temp = mypara.get_offset();
hanjiex 10:159f38636ed4 271 temp += increment;
hanjiex 10:159f38636ed4 272 mypara.set_offset(temp);
hanjiex 10:159f38636ed4 273 }
hanjiex 10:159f38636ed4 274 if(right_pb1 == 0){
hanjiex 10:159f38636ed4 275 float temp = mypara.get_offset();
hanjiex 10:159f38636ed4 276 temp -= increment;
hanjiex 10:159f38636ed4 277 mypara.set_offset(temp);
hanjiex 10:159f38636ed4 278 }
hanjiex 10:159f38636ed4 279 wait(0.2);
hanjiex 10:159f38636ed4 280 }
hanjiex 10:159f38636ed4 281 }
hanjiex 10:159f38636ed4 282
hanjiex 10:159f38636ed4 283 void para_display() {
hanjiex 10:159f38636ed4 284 uLCD.locate(4,3);
hanjiex 10:159f38636ed4 285 uLCD.printf("\n 1.Type: %d\n", mypara.get_type());
hanjiex 10:159f38636ed4 286 uLCD.locate(4,5);
hanjiex 10:159f38636ed4 287 uLCD.printf("\n 2.Frequency: %d\n", mypara.get_freq());
hanjiex 10:159f38636ed4 288 uLCD.locate(4,7);
hanjiex 10:159f38636ed4 289 uLCD.printf("\n 3.Amplitude: %.2f\n", mypara.get_amp());
hanjiex 10:159f38636ed4 290 uLCD.locate(4,9);
hanjiex 10:159f38636ed4 291 uLCD.printf("\n 4.Offset: %.2f\n", mypara.get_offset());
hanjiex 10:159f38636ed4 292 }