Shane Barton
/
sbart_recursion_count_v1
HW 12.2
Fork of sbart_midterm_Q2 by
Diff: main.cpp
- 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