Guant intel·ligent per ajudar a la rehabilitació i a l'entrenament
Dependencies: BluetoothSoftSerial SoftSerial mbed
main.cpp
- Committer:
- RogerRF
- Date:
- 2018-10-04
- Revision:
- 0:7db3f15dddd3
File content as of revision 0:7db3f15dddd3:
#include "mbed.h" #include "BluetoothSerial.h" #define TEMPS_L 0.25 #define TEMPS_M 0.2 #define TEMPS_S 0.1 #define LOOP_L 40 #define LOOP_M 50 #define LOOP_S 100 const int Vmax = 3.3; //3.3V que pot suportar el pin ADC BluetoothSerial bt(D5, D4); // TX, RX AnalogIn sensor0(A0); //dit petit AnalogIn sensor1(A1); //dit anular AnalogIn sensor2(A2); //dit mig AnalogIn sensor3(A3); //dit index AnalogIn sensor4(A4); //dit gros DigitalOut rLed(LED1, 1); //Vermell DigitalOut gLed(LED2, 1); //Verd DigitalOut bLed(LED3, 1); //Blau R+G+B = White float force0[LOOP_M], force1[LOOP_M], force2[LOOP_M], force3[LOOP_M], force4[LOOP_M]; /* * LEDS */ void Apagat() { rLed = 1; gLed = 1; bLed = 1; } void Blanc() { rLed = 0; gLed = 0; bLed = 0; } void Taronja() { rLed = 0; gLed = 0; bLed = 1; } void Vermell() { rLed = 0; gLed = 1; bLed = 1; } void Verd() { rLed = 1; gLed = 0; bLed = 1; } /* * Funcions que recopila la força de cada dit */ float dit_gros() { float f; float Vfsr0 = Vmax * sensor4.read(); if (Vfsr0 < 0.01) f = 0; else if (Vfsr0 <= 1) { f = 101.01 * Vfsr0; } else { f = 36.508 * Vfsr0; f += 56.473 * Vfsr0 * Vfsr0; } return f; } float dit_index() { float Vfsr1 = Vmax * sensor3.read(); float f; if (Vfsr1 < 0.01) f = 0; else if (Vfsr1 <= 1) { f = 101.01 * Vfsr1; } else { f = 36.508 * Vfsr1; f += 56.473 * Vfsr1 * Vfsr1; } return f; } float dit_mig() { float Vfsr2 = Vmax * sensor2.read(); float f; if (Vfsr2 < 0.01) f = 0; else if (Vfsr2 <= 1) { f = 101.01 * Vfsr2; }else { f = 36.508 * Vfsr2; f += 56.473 * Vfsr2 * Vfsr2; } return f; } float dit_anular() { float Vfsr3 = Vmax * sensor1.read(); float f; if (Vfsr3 < 0.01) f = 0; else if (Vfsr3 <= 1) { f = 101.01 * Vfsr3; } else { f = 36.508 * Vfsr3; f += 56.473 * Vfsr3 * Vfsr3; } return f; } float dit_petit() { float Vfsr4 = Vmax * sensor0.read(); float f; if (Vfsr4 < 0.01) f = 0; else if (Vfsr4 <= 1) { f = 101.01 * Vfsr4; } else { f = 36.508 * Vfsr4; f += 56.473 * Vfsr4 * Vfsr4; } return f; } /* * Llegir anterior: Llegeix i envia els resultats de l'exercici anterior al mobil * - Color Blanc */ void llegir_anterior() { int i; Blanc(); bt.puts("\n-------------------------"); bt.puts("EXERCICI ANTERIOR: \n"); for(i=0; i<LOOP_M; i++) { bt.printf("\r\n Dit gros: %.2f g", force4[i]); bt.printf("\r\n Dit index: %.2f g", force3[i]); bt.printf("\r\n Dit mig: %.2f g", force2[i]); bt.printf("\r\n Dit anular: %.2f g", force1[i]); bt.printf("\r\n Dit petit: %.2f g", force0[i]); bt.puts("\n"); } } /* * Actiu: Sistema actiu, llegeix i envia les dades del sensor al mobil * - Led Verd * L: wait(0.25) x 40 = 10 segons --> TEMPS_L i LOOP_L * M: wait(0.2) x 40 = 10 segons --> TEMPS_M i LOOP_M * S: wait(0.1) x 100 = 10 segons --> TEMPS_S i LOOP_S * */ void actiu() { int i; Verd(); bt.puts("\n\n---------------------"); for(i=0; i<LOOP_M; i++) { force4[i] = dit_gros(); force3[i] = dit_index(); force2[i] = dit_mig(); force1[i] = dit_anular(); force0[i] = dit_petit(); bt.puts("\n"); bt.printf("\r\n Dit gros: %.2f g", force4[i]); bt.printf("\r\n Dit index: %.2f g", force3[i]); bt.printf("\r\n Dit mig: %.2f g", force2[i]); bt.printf("\r\n Dit anular: %.2f g", force1[i]); bt.printf("\r\n Dit petit: %.2f g", force0[i]); bt.puts("\n"); wait(TEMPS_M); } bt.puts("\n\n---------------------"); } /* * Preparat: Sistema preparat per passar actiu. El sistema ja esta connectat via Bluetooth. * - Led Taronja */ void preparat() { for(int i=0; i<3; i++) { Taronja(); wait(1); Apagat(); wait(1); } } int main() { // Inicialitzacio variables int estat = 0; bt.puts("\r\n________________________________________________________"); bt.puts("\r\nSignificat dels colors dels leds de la placa FRDM KL25Z:"); bt.puts("\r\n- Color Vermell: Sistema inactiu"); bt.puts("\r\n- Color Taronja: Sistema preparat i en espera"); bt.puts("\r\n- Color Verd: Sistema actiu, es recopila les dades durant 10 segons"); bt.puts("\r\n- Color Blanc: Forces de l'exercici anterior"); bt.puts("\r\nEls exercicis s'han de realitzar en color verd."); bt.puts("\r\nSi es desconnecta el Bluetooth, apreta el reset de la placa."); while(1) { //Sistema inactiu Vermell(); wait(2); bt.puts("\n\r\n\r"); bt.puts("- Prem '1' per activar el sistema: "); bt.puts("- Prem '2' per veure els resultats de l'exercici anterior: "); bt.scanf("%d", &estat); wait(0.5); //Estat del sistema if(estat == 1) { preparat(); actiu(); } else if(estat == 2) { llegir_anterior(); } estat = 0; }//end while(1) } //end