Mid_term1.0
Dependencies: MMA8451Q SLCD mbed
Fork of ACC_LCD_341_MID1 by
acc_341.cpp@3:0e7f46de6d17, 2014-10-06 (annotated)
- Committer:
- sphasim
- Date:
- Mon Oct 06 07:16:01 2014 +0000
- Revision:
- 3:0e7f46de6d17
- Parent:
- 2:6003ed409def
- Child:
- 4:f17af9f983dc
Here is Part 1 of the midterm
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
sphasim | 3:0e7f46de6d17 | 1 | /* |
sphasim | 3:0e7f46de6d17 | 2 | Test of the accelerometer, digital I/O, on-board LCD screen. |
sphasim | 3:0e7f46de6d17 | 3 | RED: When absolute horizontal |
sphasim | 3:0e7f46de6d17 | 4 | GREEN : When absolute vertical |
sphasim | 3:0e7f46de6d17 | 5 | BLINKY: When in intermediate state |
sphasim | 3:0e7f46de6d17 | 6 | |
sphasim | 3:0e7f46de6d17 | 7 | Author: Siphamandla Simelane |
sphasim | 3:0e7f46de6d17 | 8 | Date: 10/6/2014 |
sphasim | 3:0e7f46de6d17 | 9 | */ |
sphasim | 3:0e7f46de6d17 | 10 | |
sphasim | 3:0e7f46de6d17 | 11 | #include "mbed.h" |
sphasim | 3:0e7f46de6d17 | 12 | #include "MMA8451Q.h"/* |
sphasim | 3:0e7f46de6d17 | 13 | Test of the accelerometer, digital I/O, on-board LCD screen. |
sphasim | 3:0e7f46de6d17 | 14 | MISSION |
sphasim | 3:0e7f46de6d17 | 15 | LED RED: absolute horizontal |
sphasim | 3:0e7f46de6d17 | 16 | LED GREEN : absolute vertical |
sphasim | 3:0e7f46de6d17 | 17 | Should Blink: in intermediate state |
sphasim | 3:0e7f46de6d17 | 18 | |
sphasim | 3:0e7f46de6d17 | 19 | Author: Siphamandla P. Simelane |
sphasim | 3:0e7f46de6d17 | 20 | Date: 10/7/2014 |
sphasim | 3:0e7f46de6d17 | 21 | */ |
sphasim | 3:0e7f46de6d17 | 22 | |
scohennm | 0:203b4129a213 | 23 | #include "mbed.h" |
scohennm | 0:203b4129a213 | 24 | #include "MMA8451Q.h" |
scohennm | 0:203b4129a213 | 25 | #include "SLCD.h" |
sphasim | 3:0e7f46de6d17 | 26 | #include "math.h" |
scohennm | 0:203b4129a213 | 27 | |
sphasim | 3:0e7f46de6d17 | 28 | // Configuring Accelerometer/Magnetometer: |
scohennm | 0:203b4129a213 | 29 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
scohennm | 2:6003ed409def | 30 | PinName const SDA = PTE25; // Data pins for the accelerometer/magnetometer. |
scohennm | 2:6003ed409def | 31 | PinName const SCL = PTE24; // DO NOT CHANGE |
scohennm | 0:203b4129a213 | 32 | #elif defined (TARGET_KL05Z) |
scohennm | 0:203b4129a213 | 33 | PinName const SDA = PTB4; |
scohennm | 0:203b4129a213 | 34 | PinName const SCL = PTB3; |
scohennm | 0:203b4129a213 | 35 | #else |
scohennm | 0:203b4129a213 | 36 | #error TARGET NOT DEFINED |
scohennm | 0:203b4129a213 | 37 | #endif |
scohennm | 0:203b4129a213 | 38 | |
scohennm | 0:203b4129a213 | 39 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
scohennm | 0:203b4129a213 | 40 | |
sphasim | 3:0e7f46de6d17 | 41 | #define PI 3.14159265 |
sphasim | 3:0e7f46de6d17 | 42 | #define DATATIME 0.150 |
sphasim | 3:0e7f46de6d17 | 43 | #define PROGNAME "ACCLCD341VB\r/n" |
sphasim | 3:0e7f46de6d17 | 44 | #define PRINTDBUG |
sphasim | 3:0e7f46de6d17 | 45 | #define LEDON false |
sphasim | 3:0e7f46de6d17 | 46 | #define LEDOFF true |
sphasim | 3:0e7f46de6d17 | 47 | #define LCDLEN 10 |
sphasim | 3:0e7f46de6d17 | 48 | #define LOW_POINT 0.0 |
sphasim | 3:0e7f46de6d17 | 49 | #define LOW_LIMIT 0.1 |
sphasim | 3:0e7f46de6d17 | 50 | #define HIGH_LIMIT 1.05 |
sphasim | 3:0e7f46de6d17 | 51 | #define BLINKTIME 0.5// milliseconds |
sphasim | 3:0e7f46de6d17 | 52 | |
sphasim | 3:0e7f46de6d17 | 53 | |
sphasim | 3:0e7f46de6d17 | 54 | enum orientStates {INTERMEDIATE, LANDSCAPE, PORTRAIT}; // define the states |
sphasim | 3:0e7f46de6d17 | 55 | PwmOut greenLed(LED_GREEN); |
sphasim | 3:0e7f46de6d17 | 56 | PwmOut redLed(LED_RED); |
scohennm | 0:203b4129a213 | 57 | SLCD slcd; //define LCD display |
scohennm | 0:203b4129a213 | 58 | |
scohennm | 0:203b4129a213 | 59 | MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); |
scohennm | 0:203b4129a213 | 60 | Serial pc(USBTX, USBRX); |
scohennm | 0:203b4129a213 | 61 | |
sphasim | 3:0e7f46de6d17 | 62 | float sqrt_newt(float arg) { |
sphasim | 3:0e7f46de6d17 | 63 | int i = 0; |
sphasim | 3:0e7f46de6d17 | 64 | float X1 = 0.0; |
sphasim | 3:0e7f46de6d17 | 65 | int intMax = 30; |
sphasim | 3:0e7f46de6d17 | 66 | int epsilon = 1e-7; |
sphasim | 3:0e7f46de6d17 | 67 | float my_x = float(arg/2.0); |
sphasim | 3:0e7f46de6d17 | 68 | int delta = 1; |
sphasim | 3:0e7f46de6d17 | 69 | for(i=0; i<intMax; i++){ |
sphasim | 3:0e7f46de6d17 | 70 | X1 = 0.5*(my_x + (arg/my_x)); |
sphasim | 3:0e7f46de6d17 | 71 | delta = abs(X1-my_x); |
sphasim | 3:0e7f46de6d17 | 72 | if (delta < epsilon) |
sphasim | 3:0e7f46de6d17 | 73 | break; |
sphasim | 3:0e7f46de6d17 | 74 | else |
sphasim | 3:0e7f46de6d17 | 75 | my_x = X1; |
sphasim | 3:0e7f46de6d17 | 76 | } |
sphasim | 3:0e7f46de6d17 | 77 | return my_x; |
sphasim | 3:0e7f46de6d17 | 78 | |
scohennm | 2:6003ed409def | 79 | } |
scohennm | 0:203b4129a213 | 80 | |
sphasim | 3:0e7f46de6d17 | 81 | // Print using LCD screen |
scohennm | 0:203b4129a213 | 82 | void LCDMess(char *lMess, float dWait){ |
sphasim | 3:0e7f46de6d17 | 83 | slcd.Home(); |
sphasim | 3:0e7f46de6d17 | 84 | slcd.clear(); |
sphasim | 3:0e7f46de6d17 | 85 | slcd.printf(lMess); |
sphasim | 3:0e7f46de6d17 | 86 | wait(dWait); |
scohennm | 0:203b4129a213 | 87 | } |
scohennm | 0:203b4129a213 | 88 | |
scohennm | 0:203b4129a213 | 89 | |
scohennm | 0:203b4129a213 | 90 | int main() { |
scohennm | 0:203b4129a213 | 91 | float xAcc; |
scohennm | 0:203b4129a213 | 92 | float yAcc; |
sphasim | 3:0e7f46de6d17 | 93 | float vector; |
sphasim | 3:0e7f46de6d17 | 94 | float angle; |
sphasim | 3:0e7f46de6d17 | 95 | char lcdData[LCDLEN]; //buffer needs places dor decimal pt and colon |
sphasim | 3:0e7f46de6d17 | 96 | orientStates PGMState = INTERMEDIATE; |
sphasim | 3:0e7f46de6d17 | 97 | Timer LEDTimer; // time till next PWM values is to change. |
sphasim | 3:0e7f46de6d17 | 98 | int ledState = LEDON; |
sphasim | 3:0e7f46de6d17 | 99 | int timeToChangeDF = BLINKTIME; |
sphasim | 3:0e7f46de6d17 | 100 | // set up timer for next step of Duty Factor timing |
sphasim | 3:0e7f46de6d17 | 101 | LEDTimer.start(); |
sphasim | 3:0e7f46de6d17 | 102 | LEDTimer.reset(); |
sphasim | 3:0e7f46de6d17 | 103 | |
sphasim | 3:0e7f46de6d17 | 104 | #ifdef PRINTDBUG |
scohennm | 0:203b4129a213 | 105 | pc.printf(PROGNAME); |
sphasim | 3:0e7f46de6d17 | 106 | #endif |
scohennm | 0:203b4129a213 | 107 | |
sphasim | 3:0e7f46de6d17 | 108 | // main loop forever |
sphasim | 3:0e7f46de6d17 | 109 | while(true) { |
sphasim | 3:0e7f46de6d17 | 110 | switch (PGMState){ |
sphasim | 3:0e7f46de6d17 | 111 | case INTERMEDIATE: |
sphasim | 3:0e7f46de6d17 | 112 | //Get accelerometer data - tilt angles minus offset for zero mark. |
sphasim | 3:0e7f46de6d17 | 113 | xAcc = abs(acc.getAccX()); |
sphasim | 3:0e7f46de6d17 | 114 | yAcc = abs(acc.getAccY()); |
sphasim | 3:0e7f46de6d17 | 115 | |
sphasim | 3:0e7f46de6d17 | 116 | // Calulate vector sum and angle of x and y reading. |
sphasim | 3:0e7f46de6d17 | 117 | vector = sqrt_newt(pow(xAcc,2) + pow(yAcc,2)); |
sphasim | 3:0e7f46de6d17 | 118 | angle = atan(yAcc / xAcc)* 180 / PI; |
sphasim | 3:0e7f46de6d17 | 119 | |
sphasim | 3:0e7f46de6d17 | 120 | |
sphasim | 3:0e7f46de6d17 | 121 | #ifdef PRINTDBUG |
sphasim | 3:0e7f46de6d17 | 122 | pc.printf("xAcc = %f\r\n", xAcc); |
sphasim | 3:0e7f46de6d17 | 123 | pc.printf("yAcc = %f\r\n", yAcc); |
sphasim | 3:0e7f46de6d17 | 124 | pc.printf("vector = %f\r\n", vector); |
sphasim | 3:0e7f46de6d17 | 125 | pc.printf("Angle = %f\r\n", angle); |
sphasim | 3:0e7f46de6d17 | 126 | #endif |
sphasim | 3:0e7f46de6d17 | 127 | sprintf (lcdData,"%4.3f", yAcc); |
sphasim | 3:0e7f46de6d17 | 128 | LCDMess(lcdData, DATATIME); |
sphasim | 3:0e7f46de6d17 | 129 | |
sphasim | 3:0e7f46de6d17 | 130 | |
sphasim | 3:0e7f46de6d17 | 131 | // Define the landscape and portrait position using x and y readings |
sphasim | 3:0e7f46de6d17 | 132 | if(yAcc < LOW_LIMIT && xAcc > LOW_POINT && xAcc < HIGH_LIMIT){ |
sphasim | 3:0e7f46de6d17 | 133 | PGMState = PORTRAIT; |
sphasim | 3:0e7f46de6d17 | 134 | } else if (xAcc < LOW_LIMIT && yAcc > LOW_POINT && yAcc < HIGH_LIMIT){ |
sphasim | 3:0e7f46de6d17 | 135 | PGMState = LANDSCAPE; |
sphasim | 3:0e7f46de6d17 | 136 | } else { |
sphasim | 3:0e7f46de6d17 | 137 | // Blink the LED if in this state |
sphasim | 3:0e7f46de6d17 | 138 | ledState = ! ledState; |
sphasim | 3:0e7f46de6d17 | 139 | if (LEDTimer.read_ms() > timeToChangeDF){ // check for timer time out transtion |
sphasim | 3:0e7f46de6d17 | 140 | redLed.write(ledState); |
sphasim | 3:0e7f46de6d17 | 141 | greenLed.write(ledState); |
sphasim | 3:0e7f46de6d17 | 142 | LEDTimer.reset(); |
sphasim | 3:0e7f46de6d17 | 143 | PGMState = INTERMEDIATE; |
sphasim | 3:0e7f46de6d17 | 144 | } |
sphasim | 3:0e7f46de6d17 | 145 | } |
sphasim | 3:0e7f46de6d17 | 146 | break; |
sphasim | 3:0e7f46de6d17 | 147 | |
sphasim | 3:0e7f46de6d17 | 148 | case PORTRAIT: |
sphasim | 3:0e7f46de6d17 | 149 | // Green led ON and red OFF |
sphasim | 3:0e7f46de6d17 | 150 | redLed.write(LEDON); |
sphasim | 3:0e7f46de6d17 | 151 | greenLed.write(LEDOFF); |
sphasim | 3:0e7f46de6d17 | 152 | PGMState = INTERMEDIATE; // go idle state |
sphasim | 3:0e7f46de6d17 | 153 | break; |
sphasim | 3:0e7f46de6d17 | 154 | |
sphasim | 3:0e7f46de6d17 | 155 | case LANDSCAPE: |
sphasim | 3:0e7f46de6d17 | 156 | // Green led OFF and red ON |
sphasim | 3:0e7f46de6d17 | 157 | redLed.write(LEDOFF); |
sphasim | 3:0e7f46de6d17 | 158 | greenLed.write(LEDON); |
sphasim | 3:0e7f46de6d17 | 159 | PGMState = INTERMEDIATE; // go idle state |
sphasim | 3:0e7f46de6d17 | 160 | break; |
sphasim | 3:0e7f46de6d17 | 161 | |
sphasim | 3:0e7f46de6d17 | 162 | default: |
sphasim | 3:0e7f46de6d17 | 163 | PGMState = INTERMEDIATE; // go idle state |
sphasim | 3:0e7f46de6d17 | 164 | break; |
sphasim | 3:0e7f46de6d17 | 165 | |
sphasim | 3:0e7f46de6d17 | 166 | } // end state machine |
sphasim | 3:0e7f46de6d17 | 167 | } |
sphasim | 3:0e7f46de6d17 | 168 | } |
sphasim | 3:0e7f46de6d17 | 169 | #include "SLCD.h" |
sphasim | 3:0e7f46de6d17 | 170 | #include "math.h" |
sphasim | 3:0e7f46de6d17 | 171 | |
sphasim | 3:0e7f46de6d17 | 172 | // Configure Accelerometer/Magnetometer: |
sphasim | 3:0e7f46de6d17 | 173 | #if defined (TARGET_KL25Z) || defined (TARGET_KL46Z) |
sphasim | 3:0e7f46de6d17 | 174 | PinName const SDA = PTE25; // Data pins for the accelerometer/magnetometer. |
sphasim | 3:0e7f46de6d17 | 175 | PinName const SCL = PTE24; // DO NOT CHANGE |
sphasim | 3:0e7f46de6d17 | 176 | #elif defined (TARGET_KL05Z) |
sphasim | 3:0e7f46de6d17 | 177 | PinName const SDA = PTB4; |
sphasim | 3:0e7f46de6d17 | 178 | PinName const SCL = PTB3; |
sphasim | 3:0e7f46de6d17 | 179 | #else |
sphasim | 3:0e7f46de6d17 | 180 | #error TARGET NOT DEFINED |
scohennm | 0:203b4129a213 | 181 | #endif |
scohennm | 0:203b4129a213 | 182 | |
sphasim | 3:0e7f46de6d17 | 183 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
sphasim | 3:0e7f46de6d17 | 184 | |
sphasim | 3:0e7f46de6d17 | 185 | #define PI 3.14159265 |
sphasim | 3:0e7f46de6d17 | 186 | #define DATATIME 0.150 |
sphasim | 3:0e7f46de6d17 | 187 | #define PROGNAME "ACCLCD341VB\r/n" |
sphasim | 3:0e7f46de6d17 | 188 | #define PRINTDBUG |
sphasim | 3:0e7f46de6d17 | 189 | #define LEDON false |
sphasim | 3:0e7f46de6d17 | 190 | #define LEDOFF true |
sphasim | 3:0e7f46de6d17 | 191 | #define LCDLEN 10 |
sphasim | 3:0e7f46de6d17 | 192 | #define LOW_POINT 0.0 |
sphasim | 3:0e7f46de6d17 | 193 | #define LOW_LIMIT 0.125 |
sphasim | 3:0e7f46de6d17 | 194 | #define HIGH_LIMIT 1.1 |
sphasim | 3:0e7f46de6d17 | 195 | #define ONTIME 1.0 |
sphasim | 3:0e7f46de6d17 | 196 | #define BLINKTIME 0.1// milliseconds |
sphasim | 3:0e7f46de6d17 | 197 | |
sphasim | 3:0e7f46de6d17 | 198 | |
sphasim | 3:0e7f46de6d17 | 199 | enum orientStates {INTERMEDIATE, LANDSCAPE, PORTRAIT}; // define the states |
sphasim | 3:0e7f46de6d17 | 200 | PwmOut greenLed(LED_GREEN); |
sphasim | 3:0e7f46de6d17 | 201 | PwmOut redLed(LED_RED); |
sphasim | 3:0e7f46de6d17 | 202 | SLCD slcd; //define LCD display |
sphasim | 3:0e7f46de6d17 | 203 | |
sphasim | 3:0e7f46de6d17 | 204 | MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS); |
sphasim | 3:0e7f46de6d17 | 205 | Serial pc(USBTX, USBRX); |
sphasim | 3:0e7f46de6d17 | 206 | |
sphasim | 3:0e7f46de6d17 | 207 | float sqrt_newt(float arg) { |
sphasim | 3:0e7f46de6d17 | 208 | int i = 0; |
sphasim | 3:0e7f46de6d17 | 209 | float X1 = 0.0; |
sphasim | 3:0e7f46de6d17 | 210 | int intMax = 20; |
sphasim | 3:0e7f46de6d17 | 211 | int epsilon = 1e-7; |
sphasim | 3:0e7f46de6d17 | 212 | float my_x = float(arg/2.0); |
sphasim | 3:0e7f46de6d17 | 213 | int delta = 1; |
sphasim | 3:0e7f46de6d17 | 214 | for(i=0; i<intMax; i++){ |
sphasim | 3:0e7f46de6d17 | 215 | X1 = 0.5*(my_x + (arg/my_x)); |
sphasim | 3:0e7f46de6d17 | 216 | delta = abs(X1-my_x); |
sphasim | 3:0e7f46de6d17 | 217 | if (delta < epsilon) |
sphasim | 3:0e7f46de6d17 | 218 | break; |
sphasim | 3:0e7f46de6d17 | 219 | else |
sphasim | 3:0e7f46de6d17 | 220 | my_x = X1; |
sphasim | 3:0e7f46de6d17 | 221 | } |
sphasim | 3:0e7f46de6d17 | 222 | return my_x; |
sphasim | 3:0e7f46de6d17 | 223 | |
sphasim | 3:0e7f46de6d17 | 224 | // return (sqrt(arg)); |
sphasim | 3:0e7f46de6d17 | 225 | } |
sphasim | 3:0e7f46de6d17 | 226 | |
sphasim | 3:0e7f46de6d17 | 227 | // Print using LCD screen |
sphasim | 3:0e7f46de6d17 | 228 | void LCDMess(char *lMess, float dWait){ |
sphasim | 3:0e7f46de6d17 | 229 | slcd.Home(); |
sphasim | 3:0e7f46de6d17 | 230 | slcd.clear(); |
sphasim | 3:0e7f46de6d17 | 231 | slcd.printf(lMess); |
sphasim | 3:0e7f46de6d17 | 232 | wait(dWait); |
sphasim | 3:0e7f46de6d17 | 233 | } |
sphasim | 3:0e7f46de6d17 | 234 | |
sphasim | 3:0e7f46de6d17 | 235 | |
sphasim | 3:0e7f46de6d17 | 236 | int main() { |
sphasim | 3:0e7f46de6d17 | 237 | float xAcc; |
sphasim | 3:0e7f46de6d17 | 238 | float yAcc; |
sphasim | 3:0e7f46de6d17 | 239 | float vector; |
sphasim | 3:0e7f46de6d17 | 240 | float angle; |
sphasim | 3:0e7f46de6d17 | 241 | char lcdData[LCDLEN]; //buffer needs places dor decimal pt and colon |
sphasim | 3:0e7f46de6d17 | 242 | orientStates PGMState = INTERMEDIATE; |
sphasim | 3:0e7f46de6d17 | 243 | Timer LEDTimer; // time till next PWM values is to change. |
sphasim | 3:0e7f46de6d17 | 244 | int ledState = LEDON; |
sphasim | 3:0e7f46de6d17 | 245 | int timeToChangeDF = BLINKTIME; |
sphasim | 3:0e7f46de6d17 | 246 | // set up timer for next step of Duty Factor timing |
sphasim | 3:0e7f46de6d17 | 247 | LEDTimer.start(); |
sphasim | 3:0e7f46de6d17 | 248 | LEDTimer.reset(); |
sphasim | 3:0e7f46de6d17 | 249 | |
sphasim | 3:0e7f46de6d17 | 250 | #ifdef PRINTDBUG |
sphasim | 3:0e7f46de6d17 | 251 | pc.printf(PROGNAME); |
sphasim | 3:0e7f46de6d17 | 252 | #endif |
sphasim | 3:0e7f46de6d17 | 253 | |
sphasim | 3:0e7f46de6d17 | 254 | // main loop forever |
sphasim | 3:0e7f46de6d17 | 255 | while(true) { |
sphasim | 3:0e7f46de6d17 | 256 | switch (PGMState){ |
sphasim | 3:0e7f46de6d17 | 257 | case INTERMEDIATE: |
sphasim | 3:0e7f46de6d17 | 258 | //Get accelerometer data - tilt angles minus offset for zero mark. |
sphasim | 3:0e7f46de6d17 | 259 | xAcc = abs(acc.getAccX()); |
sphasim | 3:0e7f46de6d17 | 260 | yAcc = abs(acc.getAccY()); |
sphasim | 3:0e7f46de6d17 | 261 | |
sphasim | 3:0e7f46de6d17 | 262 | // Calulate vector sum and angle of x and y reading. |
sphasim | 3:0e7f46de6d17 | 263 | vector = sqrt_newt(pow(xAcc,2) + pow(yAcc,2)); |
sphasim | 3:0e7f46de6d17 | 264 | angle = atan(yAcc / xAcc)* 180 / PI; |
sphasim | 3:0e7f46de6d17 | 265 | |
sphasim | 3:0e7f46de6d17 | 266 | |
sphasim | 3:0e7f46de6d17 | 267 | #ifdef PRINTDBUG |
sphasim | 3:0e7f46de6d17 | 268 | pc.printf("xAcc = %f\r\n", xAcc); |
sphasim | 3:0e7f46de6d17 | 269 | pc.printf("yAcc = %f\r\n", yAcc); |
sphasim | 3:0e7f46de6d17 | 270 | pc.printf("vector = %f\r\n", vector); |
sphasim | 3:0e7f46de6d17 | 271 | pc.printf("Angle = %f\r\n", angle); |
sphasim | 3:0e7f46de6d17 | 272 | #endif |
sphasim | 3:0e7f46de6d17 | 273 | sprintf (lcdData,"%4.3f", yAcc); |
sphasim | 3:0e7f46de6d17 | 274 | LCDMess(lcdData, DATATIME); |
sphasim | 3:0e7f46de6d17 | 275 | |
sphasim | 3:0e7f46de6d17 | 276 | |
sphasim | 3:0e7f46de6d17 | 277 | // Define the landscape and portrait position using x and y readings |
sphasim | 3:0e7f46de6d17 | 278 | if(yAcc < LOW_LIMIT && xAcc > LOW_POINT && xAcc < HIGH_LIMIT){ |
sphasim | 3:0e7f46de6d17 | 279 | PGMState = PORTRAIT; |
sphasim | 3:0e7f46de6d17 | 280 | } else if (xAcc < LOW_LIMIT && yAcc > LOW_POINT && yAcc < HIGH_LIMIT){ |
sphasim | 3:0e7f46de6d17 | 281 | PGMState = LANDSCAPE; |
sphasim | 3:0e7f46de6d17 | 282 | } else { |
sphasim | 3:0e7f46de6d17 | 283 | // Blink the LED if in this state |
sphasim | 3:0e7f46de6d17 | 284 | ledState = ! ledState; |
sphasim | 3:0e7f46de6d17 | 285 | if (LEDTimer.read_ms() > timeToChangeDF){ // check for timer time out transtion |
sphasim | 3:0e7f46de6d17 | 286 | redLed.write(ledState); |
sphasim | 3:0e7f46de6d17 | 287 | greenLed.write(ledState); |
sphasim | 3:0e7f46de6d17 | 288 | LEDTimer.reset(); |
sphasim | 3:0e7f46de6d17 | 289 | PGMState = INTERMEDIATE; |
sphasim | 3:0e7f46de6d17 | 290 | } |
sphasim | 3:0e7f46de6d17 | 291 | } |
sphasim | 3:0e7f46de6d17 | 292 | break; |
sphasim | 3:0e7f46de6d17 | 293 | |
sphasim | 3:0e7f46de6d17 | 294 | case PORTRAIT: |
sphasim | 3:0e7f46de6d17 | 295 | // Green led ON and red OFF |
sphasim | 3:0e7f46de6d17 | 296 | redLed.write(LEDON); |
sphasim | 3:0e7f46de6d17 | 297 | greenLed.write(LEDOFF); |
sphasim | 3:0e7f46de6d17 | 298 | PGMState = INTERMEDIATE; // go idle state |
sphasim | 3:0e7f46de6d17 | 299 | break; |
sphasim | 3:0e7f46de6d17 | 300 | |
sphasim | 3:0e7f46de6d17 | 301 | case LANDSCAPE: |
sphasim | 3:0e7f46de6d17 | 302 | // Green led OFF and red ON |
sphasim | 3:0e7f46de6d17 | 303 | redLed.write(LEDOFF); |
sphasim | 3:0e7f46de6d17 | 304 | greenLed.write(LEDON); |
sphasim | 3:0e7f46de6d17 | 305 | PGMState = INTERMEDIATE; // go idle state |
sphasim | 3:0e7f46de6d17 | 306 | break; |
sphasim | 3:0e7f46de6d17 | 307 | |
sphasim | 3:0e7f46de6d17 | 308 | default: |
sphasim | 3:0e7f46de6d17 | 309 | PGMState = INTERMEDIATE; // go idle state |
sphasim | 3:0e7f46de6d17 | 310 | break; |
sphasim | 3:0e7f46de6d17 | 311 | |
sphasim | 3:0e7f46de6d17 | 312 | } // end state machine |
scohennm | 0:203b4129a213 | 313 | } |
scohennm | 0:203b4129a213 | 314 | } |