ELEC2645 (2019/20) / Mbed 2 deprecated el18loc_final

Dependencies:   mbed

Revision:
13:27300c533dd1
Parent:
8:f305ea78b2b1
Child:
14:9cfe0041cc4e
--- a/Front/Front.cpp	Fri May 08 20:08:36 2020 +0000
+++ b/Front/Front.cpp	Sat May 09 13:45:23 2020 +0000
@@ -75,27 +75,82 @@
 
 void Front::frontrun(N5110 &lcd, Gamepad &pad, int submenu)
 {
-    frontsetup(lcd, pad, submenu);
+    frontsetup(lcd, pad, submenu, true);
     menuflag=1;
+    used=1;
+    a=17;
+    d=17;
+    s=17;
+    r=17;
     while (menuflag==1) {
-        if (pad.start_pressed())  { //go back menu
-            // printf("start pressed\n");
-            printf("Waveforms Sub selected\n"); //debug
-            wait_ms(200); //debounce
-            menuflag=0; //sets flag
+        dir=pad.get_direction();
+        if (dir!=dir_1) {
+            printf("dir =%d\n",dir); //debug
+            if(dir==3) {
+                used++;
+                if (used>4) {
+                    used=4;
+                }
+            }
+            if (dir==7) {
+                used--;
+                if(used<1) {
+                    used=1;
+                }
+            }
+            if (dir==1) {
+                if (used==1) {
+                    a=incrament_adsr(used,a,1);
+                }
+                if (used==2) {
+                    d=incrament_adsr(used,d,1);
+                }
+                if (used==3) {
+                    s=incrament_adsr(used,s,1);
+                }
+                if (used==4) {
+                    r=incrament_adsr(used,r,1);
+                }
+            }
+
+            if (dir==5) {
+                if (used==1) {
+                    a=incrament_adsr(used,a,-1);
+                }
+                if (used==2) {
+                    d=incrament_adsr(used,d,-1);
+                }
+                if (used==3) {
+                    s=incrament_adsr(used,s,-1);
+                }
+                if (used==4) {
+                    r=incrament_adsr(used,r,-1);
+                }
+            }
+
+
+            if (pad.start_pressed())  { //go back menu
+                // printf("start pressed\n");
+                printf("Waveforms Sub selected\n"); //debug
+                wait_ms(200); //debounce
+                menuflag=0; //sets flag
+            }
+            frontsetup(lcd,pad,submenu,false);
+            printsliders(lcd,a,d,s,r,used);
+            wait_ms(200);
         }
+        dir=dir_1;
     }
 }
 
 
 //PRIVATE-----------------------------------------------------------------------
 
-void Front::frontsetup(N5110 &lcd, Gamepad &pad, int submenu)
+void Front::frontsetup(N5110 &lcd, Gamepad &pad, int submenu, bool initial)
 {
-    a=17; //range from 1->35
-    d=17;
-    s=17;
-    r=17;
+    if (initial==true) {
+        printsliders(lcd,17,17,17,17,1);
+    }
     lcd.clear();
     lcd.printString("A D S R",3,5);
     printfader(lcd,3,3);
@@ -104,17 +159,55 @@
     printfader(lcd,39,3);
     lcd.drawRect(50,3,30,8,FILL_TRANSPARENT);
     printwav(lcd,submenu);
-    printsliders(lcd,a,d,s,r);
     lcd.refresh();
-    
+
 }
-void Front::printsliders(N5110 &lcd, int a, int d, int s, int r)
+void Front::printsliders(N5110 &lcd, int a, int d, int s, int r, int used)
 {
-    lcd.drawRect(3,37-a,5,2,FILL_BLACK);
-    lcd.drawRect(15,37-d,5,2,FILL_BLACK); 
-    lcd.drawRect(27,37-s,5,2,FILL_BLACK); 
-    lcd.drawRect(39,37-r,5,2,FILL_BLACK);     
+    if(used==0) {
+        printslider(lcd,3,a,false);
+        printslider(lcd,15,d,false);
+        printslider(lcd,27,s,false);
+        printslider(lcd,39,r,false);
+    }
+    if(used==1) {
+        printslider(lcd,3,a,true);
+        printslider(lcd,15,d,false);
+        printslider(lcd,27,s,false);
+        printslider(lcd,39,r,false);
+    }
+    if(used==2) {
+        printslider(lcd,3,a,false);
+        printslider(lcd,15,d,true);
+        printslider(lcd,27,s,false);
+        printslider(lcd,39,r,false);
+    }
+    if(used==3) {
+        printslider(lcd,3,a,false);
+        printslider(lcd,15,d,false);
+        printslider(lcd,27,s,true);
+        printslider(lcd,39,r,false);
+    }
+    if(used==4) {
+        printslider(lcd,3,a,false);
+        printslider(lcd,15,d,false);
+        printslider(lcd,27,s,false);
+        printslider(lcd,39,r,true);
+    }
+    lcd.refresh();
 }
+
+void Front::printslider(N5110 &lcd, int x_val, int y_val, bool use)
+{
+    if (use==true) {
+        lcd.drawRect(x_val,37-y_val,5,2,FILL_BLACK);
+    }
+    if (use==false) {
+        lcd.drawRect(x_val,37-y_val,5,1,FILL_BLACK);
+    }
+}
+
+
 void Front::printfader(N5110 &lcd, int x, int y)
 {
     // x origin, y origin, rows, cols, sprite
@@ -135,4 +228,21 @@
         // x origin, y origin, rows, cols, sprite
         lcd.drawSprite(51,4,6,28,(int *)square_wav);
     }
+}
+
+int Front::incrament_adsr(int used, int adsr, int ud)
+{
+    if (ud==1) {
+        adsr++;
+        if (adsr>35) {
+            adsr--;
+        }
+    }
+    if (ud==-1) {
+        adsr--;
+        if (adsr<1) {
+            adsr++;
+        }
+    }
+    return(adsr);
 }
\ No newline at end of file