Basic_sine_wave_generator

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

Revision:
10:159f38636ed4
Child:
11:d21c2da8b290
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/menu.cpp	Tue Dec 01 18:59:42 2015 +0000
@@ -0,0 +1,292 @@
+/*
+* menu.cpp
+* The menu is displayed first when the funtion generator starts
+*/
+
+#include "mbed.h"
+#include "uLCD_4DGL.h"
+#include "menu.h"
+#include "para.h"
+uLCD_4DGL uLCD(p9,p10,p11);
+DigitalIn left_pb1(p21);
+DigitalIn right_pb1(p23);
+DigitalIn fire_pb1(p22);
+DigitalIn toggle_pb1(p24);
+
+int start_enable;
+int rules_display;
+int dev_display;
+int go_to_quit;
+// declare the class
+para mypara;
+
+int begain_first(){
+    left_pb1.mode(PullUp);
+    right_pb1.mode(PullUp);
+    fire_pb1.mode(PullUp);
+    toggle_pb1.mode(PullUp);
+    display_beginning();
+    while(1){
+        display_main_menu();
+        choose();
+        check();
+        if(start_enable==1){
+            break;
+        }   
+    }
+    return 1;
+}
+
+int return_menu(){
+    uLCD.cls();
+    while(1){
+        display_main_menu();
+        choose();
+        check();
+        if(start_enable==1){
+            para_setting();
+            return 1;
+        }   
+    }  
+}   
+    
+void display_beginning(){
+    uLCD.color(RED);
+    uLCD.printf("\nWelcome\n"); //Default Green on black text
+    uLCD.printf("\nTo\n"); //Default Green on black text
+    uLCD.printf("\nMbed\n");
+    uLCD.printf("\nFunction Genator!\n");
+    wait(2);
+    uLCD.cls();
+
+}
+
+void display_main_menu(){
+    uLCD.locate(4,3);
+    uLCD.printf("\n  Let's Start!\n");
+    uLCD.locate(4,5);
+    uLCD.printf("\n  How to use?\n");
+    uLCD.locate(4,7);
+    uLCD.printf("\n  Developer\n");
+    uLCD.locate(4,9);
+    uLCD.printf("\n  Quit.\n"); 
+    uLCD.color(GREEN);
+    uLCD.locate(4,12);
+    uLCD.printf("\n  OK  UP  DOWN \n"); 
+    uLCD.filled_circle(20,100,2,GREEN);
+    uLCD.filled_circle(50,100,2,GREEN);
+    uLCD.filled_circle(80,100,2,GREEN);
+    uLCD.filled_circle(110,100,2,GREEN);
+    wait(1);
+}
+    
+void choose(){
+    start_enable = 0;
+    rules_display = 0;
+    dev_display = 0;
+    go_to_quit = 0;
+    int circle_y = 35;
+    uLCD.filled_circle(10,35,2,BLUE); //51 67 83 +16
+    int choose = 0;
+    while(choose == 0){
+        if(left_pb1 == 0){
+            choose = 1;
+            if(circle_y == 35){
+                start_enable = 1;
+            }else if(circle_y == 51){
+                rules_display = 1;
+            }else if(circle_y == 67){
+                dev_display = 1;
+            }else if(circle_y == 83){
+                go_to_quit = 1;
+            }
+            uLCD.cls();
+        } 
+        if(fire_pb1 == 0){
+           uLCD.filled_circle(10,circle_y,2,BLACK);
+           wait(0.2);
+           if(circle_y > 35){
+               circle_y = circle_y-16;
+           }
+           uLCD.filled_circle(10,circle_y,2,BLUE);
+        }   
+        if(right_pb1 == 0){
+           uLCD.filled_circle(10,circle_y,2,BLACK);
+           wait(0.2);
+           if(circle_y < 80){
+               circle_y = circle_y+16; 
+           }  
+           uLCD.filled_circle(10,circle_y,2,BLUE);     
+        }
+    }
+}    
+ 
+void check(){   
+     if(rules_display == 1){
+       /****************************************
+       FIND A CONTROL RULE
+       *****************************************/
+    } else if(dev_display == 1){
+       uLCD.locate(4,3);
+       uLCD.printf("\n  JIN XUEFEN\n");
+       uLCD.locate(4,5);
+       uLCD.printf("\n  PENG YUQING\n");
+       uLCD.locate(4,7);
+       uLCD.printf("\n  TAO QIUYANG\n");
+       uLCD.locate(4,9);
+       uLCD.printf("\n  XIE HANJIE\n"); 
+       wait(5);
+       uLCD.cls();
+    } else if(go_to_quit == 1){
+        uLCD.printf("\nBye\n");
+        exit(0);
+    }
+}
+
+int para_setting() {
+    mode_set();
+    freq_set();
+    amp_set();
+    offset_set();
+    para_display();
+    return 1;
+}
+
+void mode_set() {
+    uLCD.locate(4,3);
+    uLCD.printf("\n   Sine wave\n");
+    uLCD.locate(4,5);
+    uLCD.printf("\n   Square wave\n");
+    uLCD.locate(4,7);
+    uLCD.printf("\n   Tringle wave\n");
+    int circle_y = 35;
+    uLCD.filled_circle(10,35,2,BLUE); //51 67 83 +16
+    int choose = 0;
+    while(choose == 0){
+        if(left_pb1 == 0){
+            choose = 1;
+            int type = (circle_y - 35) / 16;
+            mypara.set_type(type);
+            uLCD.cls();
+        } 
+        if(fire_pb1 == 0){
+           uLCD.filled_circle(10,circle_y,2,BLACK);
+           wait(0.2);
+           if(circle_y > 35){
+               circle_y = circle_y-16;
+           }
+           uLCD.filled_circle(10,circle_y,2,BLUE);
+        }   
+        if(right_pb1 == 0){
+           uLCD.filled_circle(10,circle_y,2,BLACK);
+           wait(0.2);
+           if(circle_y < 62){
+               circle_y = circle_y+16; 
+           }  
+           uLCD.filled_circle(10,circle_y,2,BLUE);     
+        }
+    }
+}
+
+void freq_set() {
+    /*
+    int kilodig;
+    int hunddig;
+    int tensdig;
+    int unit;
+    uLCD.locate(4,3);
+    uLCD.printf("\n  kilo place:");
+    uLCD.locate(4,5);
+    uLCD.printf("\n  hundreds place:\n");
+    uLCD.locate(4,7);
+    uLCD.printf("\n  tens placen:");
+    uLCD.locate(4,9);
+    uLCD.printf("\n  unit:\n"); 
+    */
+    int choose = 0;
+    int increment = 100;
+    uLCD.locate(1,3);
+    uLCD.printf("\nSet the frequency:\n");
+    while(choose == 0){
+        uLCD.locate(4,5);
+        uLCD.printf("\n%d    \n", mypara.get_freq());
+        if(left_pb1 == 0){
+            choose = 1;
+            uLCD.cls();
+        } 
+        if(fire_pb1 == 0){
+           float temp = mypara.get_freq();
+           temp += increment;
+           mypara.set_freq(temp);
+        }   
+        if(right_pb1 == 0){
+           float temp = mypara.get_freq();
+           temp -= increment;
+           mypara.set_freq(temp);
+        }
+        wait(0.2);
+    }
+}
+
+void amp_set() {
+    int choose = 0;
+    uLCD.locate(1,3);
+    uLCD.printf("\nSet the amplitude:\n");
+    float increment = 0.5;
+    while(choose == 0){
+        uLCD.locate(4,5);
+        uLCD.printf("\n%.2f    \n", mypara.get_amp());
+        if(left_pb1 == 0){
+            choose = 1;
+            uLCD.cls();
+        } 
+        if(fire_pb1 == 0){
+           float temp = mypara.get_amp();
+           temp += increment;
+           mypara.set_amp(temp);
+        }   
+        if(right_pb1 == 0){
+           float temp = mypara.get_amp();
+           temp -= increment;
+           mypara.set_amp(temp);
+        }
+        wait(0.2);
+    }
+}
+
+void offset_set() {
+    int choose = 0;
+    uLCD.locate(4,3);
+    uLCD.printf("\nSet the offset:\n");
+    float increment = 0.5;
+    while(choose == 0){
+        uLCD.locate(4,5);
+        uLCD.printf("\n%.2f    \n", mypara.get_offset());
+        if(left_pb1 == 0){
+            choose = 1;
+            uLCD.cls();
+        } 
+        if(fire_pb1 == 0){
+           float temp = mypara.get_offset();
+           temp += increment;
+           mypara.set_offset(temp);
+        }   
+        if(right_pb1 == 0){
+           float temp = mypara.get_offset();
+           temp -= increment;
+           mypara.set_offset(temp);
+        }
+        wait(0.2);
+    }
+}
+
+void para_display() {
+    uLCD.locate(4,3);
+    uLCD.printf("\n 1.Type: %d\n", mypara.get_type());
+    uLCD.locate(4,5);
+    uLCD.printf("\n 2.Frequency: %d\n", mypara.get_freq());
+    uLCD.locate(4,7);
+    uLCD.printf("\n 3.Amplitude: %.2f\n", mypara.get_amp());
+    uLCD.locate(4,9);
+    uLCD.printf("\n 4.Offset: %.2f\n", mypara.get_offset());
+}
\ No newline at end of file