Guant intel·ligent per ajudar a la rehabilitació i a l'entrenament

Dependencies:   BluetoothSoftSerial SoftSerial mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "BluetoothSerial.h"
00003 
00004 #define TEMPS_L 0.25
00005 #define TEMPS_M 0.2
00006 #define TEMPS_S 0.1
00007 #define LOOP_L 40
00008 #define LOOP_M 50
00009 #define LOOP_S 100
00010 
00011 const int Vmax = 3.3;   //3.3V que pot suportar el pin ADC
00012 
00013 BluetoothSerial bt(D5, D4);     // TX, RX
00014 
00015 AnalogIn sensor0(A0);   //dit petit
00016 AnalogIn sensor1(A1);   //dit anular
00017 AnalogIn sensor2(A2);   //dit mig
00018 AnalogIn sensor3(A3);   //dit index
00019 AnalogIn sensor4(A4);   //dit gros
00020 
00021 DigitalOut rLed(LED1, 1);   //Vermell
00022 DigitalOut gLed(LED2, 1);   //Verd
00023 DigitalOut bLed(LED3, 1);   //Blau           R+G+B = White
00024 
00025 float force0[LOOP_M], force1[LOOP_M], force2[LOOP_M], force3[LOOP_M], force4[LOOP_M];
00026 
00027 /*
00028 *   LEDS
00029 */
00030 void Apagat() {
00031     rLed = 1;   
00032     gLed = 1;
00033     bLed = 1;   
00034 }
00035 
00036 void Blanc() {
00037     rLed = 0;   
00038     gLed = 0;
00039     bLed = 0;   
00040 }
00041 
00042 void Taronja() {
00043     rLed = 0;   
00044     gLed = 0;
00045     bLed = 1;   
00046 }
00047 
00048 void Vermell() {
00049     rLed = 0;   
00050     gLed = 1;
00051     bLed = 1;   
00052 }
00053 
00054 void Verd() {
00055     rLed = 1;   
00056     gLed = 0;
00057     bLed = 1;   
00058 }
00059 
00060 /*
00061 *   Funcions que recopila la força de cada dit 
00062 */
00063 float dit_gros() 
00064 {
00065     float f;
00066     float Vfsr0 = Vmax * sensor4.read();
00067     
00068     if (Vfsr0 < 0.01) 
00069         f = 0;
00070     else if (Vfsr0 <= 1) {
00071         f = 101.01 * Vfsr0;
00072     } else {
00073         f = 36.508 * Vfsr0;
00074         f += 56.473 * Vfsr0 * Vfsr0; 
00075     }
00076     
00077     return f;
00078 }
00079 
00080 float dit_index()
00081 {
00082     float Vfsr1 = Vmax * sensor3.read();
00083     float f;
00084     
00085     if (Vfsr1 < 0.01) 
00086         f = 0;
00087     else if (Vfsr1 <= 1) {
00088         f = 101.01 * Vfsr1;
00089     } else {
00090         f = 36.508 * Vfsr1;
00091         f += 56.473 * Vfsr1 * Vfsr1; 
00092     }
00093     
00094     return f;
00095 }
00096 
00097 float dit_mig() 
00098 {
00099     float Vfsr2 = Vmax * sensor2.read();
00100     float f;
00101     
00102     if (Vfsr2 < 0.01) 
00103         f = 0;
00104     else if (Vfsr2 <= 1) {
00105         f = 101.01 * Vfsr2;
00106     }else {
00107         f = 36.508 * Vfsr2;
00108         f += 56.473 * Vfsr2 * Vfsr2; 
00109     }
00110     
00111     return f;
00112 }
00113 
00114 float dit_anular() 
00115 {
00116     float Vfsr3 = Vmax * sensor1.read();
00117     float f;
00118     
00119     if (Vfsr3 < 0.01) 
00120         f = 0;
00121     else if (Vfsr3 <= 1) {
00122         f = 101.01 * Vfsr3;
00123     } else {
00124         f = 36.508 * Vfsr3;
00125         f += 56.473 * Vfsr3 * Vfsr3; 
00126     }
00127     
00128     return f;
00129 }
00130 
00131 float dit_petit()
00132 {
00133     float Vfsr4 = Vmax * sensor0.read();
00134     float f;
00135     
00136     if (Vfsr4 < 0.01) 
00137         f = 0;
00138     else if (Vfsr4 <= 1) {
00139         f = 101.01 * Vfsr4;
00140     } else {
00141         f = 36.508 * Vfsr4;
00142         f += 56.473 * Vfsr4 * Vfsr4; 
00143     }
00144     
00145     return f;
00146 }
00147 
00148 /*
00149 *   Llegir anterior: Llegeix i envia els resultats de l'exercici anterior al mobil
00150 *       - Color Blanc
00151 */
00152 void llegir_anterior() {
00153     int i;
00154     
00155     Blanc();
00156     
00157     bt.puts("\n-------------------------");
00158     bt.puts("EXERCICI ANTERIOR: \n");
00159     
00160     for(i=0; i<LOOP_M; i++) {
00161         bt.printf("\r\n   Dit gros: %.2f g", force4[i]);
00162         bt.printf("\r\n  Dit index: %.2f g", force3[i]);
00163         bt.printf("\r\n    Dit mig: %.2f g", force2[i]);
00164         bt.printf("\r\n Dit anular: %.2f g", force1[i]);
00165         bt.printf("\r\n  Dit petit: %.2f g", force0[i]);
00166         bt.puts("\n");       
00167     }
00168     
00169 }
00170 
00171 /*
00172 *   Actiu: Sistema actiu, llegeix i envia les dades del sensor al mobil
00173 *       - Led Verd
00174 *   L: wait(0.25) x 40 = 10 segons       --> TEMPS_L i LOOP_L
00175 *   M: wait(0.2) x 40 = 10 segons      --> TEMPS_M i LOOP_M
00176 *   S: wait(0.1) x 100 = 10 segons      --> TEMPS_S i LOOP_S
00177 *
00178 */
00179 void actiu() {
00180     int i;   
00181     
00182     Verd();
00183     bt.puts("\n\n---------------------");
00184     
00185     for(i=0; i<LOOP_M; i++) 
00186     {        
00187         force4[i] = dit_gros();
00188         force3[i] = dit_index();
00189         force2[i] = dit_mig();
00190         force1[i] = dit_anular();
00191         force0[i] = dit_petit();
00192         
00193         bt.puts("\n");
00194         bt.printf("\r\n   Dit gros: %.2f g", force4[i]);
00195         bt.printf("\r\n  Dit index: %.2f g", force3[i]);
00196         bt.printf("\r\n    Dit mig: %.2f g", force2[i]);
00197         bt.printf("\r\n Dit anular: %.2f g", force1[i]);
00198         bt.printf("\r\n  Dit petit: %.2f g", force0[i]);
00199         bt.puts("\n");
00200         
00201         wait(TEMPS_M); 
00202     }
00203     bt.puts("\n\n---------------------");
00204 }
00205 
00206 /*
00207 *   Preparat: Sistema preparat per passar actiu. El sistema ja esta connectat via Bluetooth. 
00208 *           - Led Taronja
00209 */
00210 void preparat() {
00211     for(int i=0; i<3; i++) {
00212         Taronja();
00213         wait(1);
00214         Apagat();
00215         wait(1);
00216     }
00217 }
00218 
00219 
00220 int main() {
00221     // Inicialitzacio variables
00222     int estat = 0;
00223     
00224     bt.puts("\r\n________________________________________________________");
00225     bt.puts("\r\nSignificat dels colors dels leds de la placa FRDM KL25Z:");
00226     bt.puts("\r\n- Color Vermell: Sistema inactiu");
00227     bt.puts("\r\n- Color Taronja: Sistema preparat i en espera");
00228     bt.puts("\r\n- Color Verd: Sistema actiu, es recopila les dades durant 10 segons");
00229     bt.puts("\r\n- Color Blanc: Forces de l'exercici anterior");
00230     bt.puts("\r\nEls exercicis s'han de realitzar en color verd.");
00231     bt.puts("\r\nSi es desconnecta el Bluetooth, apreta el reset de la placa.");
00232     
00233     while(1) { 
00234         //Sistema inactiu
00235         Vermell();
00236         wait(2);
00237         
00238         bt.puts("\n\r\n\r");
00239         bt.puts("- Prem '1' per activar el sistema: ");
00240         bt.puts("- Prem '2' per veure els resultats de l'exercici anterior: ");   
00241         bt.scanf("%d", &estat);
00242         wait(0.5);
00243         
00244         //Estat del sistema
00245         if(estat == 1)  {  
00246             preparat(); 
00247             
00248             actiu();
00249         }
00250         else if(estat == 2) {
00251             llegir_anterior();
00252         }
00253         
00254         estat = 0;
00255         
00256     }//end while(1)
00257     
00258 } //end