HW 12.2

Dependencies:   SLCD TSI mbed

Fork of sbart_midterm_Q2 by Shane Barton

Revision:
2:6610fa50aa81
Parent:
1:44dcf262c7dd
Child:
3:771f97716830
--- a/main.cpp	Sat Oct 01 22:10:10 2016 +0000
+++ b/main.cpp	Mon Oct 10 03:03:43 2016 +0000
@@ -15,6 +15,7 @@
 #define LCDCHARLEN 10
 #define DATAINTERVAL 0.1
 #define BUTTONTIME 0.1
+#define LCDTIME 0.25
 #define PROGNAME "kl46z_slider_mid_v1\n\r"
 
 SLCD slcd; //define LCD display
@@ -22,6 +23,7 @@
 
 Timer dataTimer;
 Timer ButtonTimer; // for reading button states
+Timer LCDTimer;
 DigitalIn buttons[NUMBUTS] = {RBUT, LBUT};
 float tsidata;
 int displayState;
@@ -33,6 +35,9 @@
     ButtonTimer.reset();
     dataTimer.start();
     dataTimer.reset(); 
+    LCDTimer.start();
+    LCDTimer.reset();
+    displayState = 3;
 } 
 
 void LCDMess(char *lMess){
@@ -41,6 +46,28 @@
         slcd.printf(lMess);
 }
 
+float newtonSqrRt(float a) {
+    
+    float xnew = 0.0;
+    int intmax = 20;
+    //int n_int = 0;
+    float epsilon = 1e-7;
+    float xold = (a/2.5);    //Make a guess
+    
+    for (int i = 0; i < intmax; i++)
+    {
+        xnew = 0.5 * (xold + (a/xold));    //Calculation
+        float delta = fabs(xnew - xold);    //Compare old and new values
+        
+        if (delta < epsilon)
+            break;
+        else
+            xold = xnew;
+    }
+    
+    return xnew;
+}
+
 int main(void) {
     int i;
     char lcdData[LCDCHARLEN];
@@ -58,15 +85,23 @@
                 if(!buttons[i]) { 
                     displayState = i;
                     // do something here.
-                    
+                    switch (displayState) {
+                        case 0: //R BUTTON
+                            rled = 1.0;
+                            gled = 0.0;
+                            
+                            break;
+                        case 1: //L BUTTON
+                            rled = 0.0;
+                            gled = 1.0;
+
+                            break;
+                        }
                 } // if ! buttons
             }// for loop to look at buttons
             ButtonTimer.reset();
-            sprintf (lcdData,"%0.4f",tsidata);  
-            LCDMess(lcdData); 
-            rled = 0.0;
-            gled = 1.0;
-            
+            //rled = 1.0;
+            //gled = 0.0;       
         }
         if(dataTimer.read() > DATAINTERVAL){
             dataTimer.reset();                               
@@ -79,5 +114,22 @@
             }
             lastTouch=tsidata;
         }
+        
+        if (LCDTimer.read() > LCDTIME) {
+            LCDTimer.reset();
+            switch(displayState) {
+                case 0: //R BUtton                                                
+                    float sqrRoot = newtonSqrRt(lastTouch);
+                    sprintf (lcdData,"%0.2f", sqrRoot * 10);
+                    LCDMess(lcdData);
+                    break;
+                case 1: //L Button
+                    sprintf (lcdData,"%0.2f", (tsidata * 100));  
+                    LCDMess(lcdData);
+                    break;
+                default:
+                    break;
+                }    
+        }
     }
 }
\ No newline at end of file