Francisco Javier Borrego Cejudo / Mbed 2 deprecated gloveSensorSend

Dependencies:   flex_sensor mbed

Revision:
0:17ebf84f093c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gloveSensorSend.cpp	Wed Jul 01 08:38:08 2015 +0000
@@ -0,0 +1,142 @@
+#include "mbed.h"
+#include "flex_sensor.h"
+
+Serial xbee1(PA_11, PA_12); //Initalise xbee_lib
+Serial pc(USBTX, USBRX); //Initalise PC serial comms
+
+// Declaramos los pines analogicos de los cuales vamos a leer los valores que necesitamos
+flex_sensor chico_flex(A0);
+flex_sensor gordo_flex(A1);
+flex_sensor indice_flex(A2);
+flex_sensor corte_flex(A3);
+flex_sensor anillo_flex(A4);
+
+//Variable donde guardaremos de la posicion de nuestros dedos y con las que vamos a operar
+int chicoPosicion, gordoPosicion, anilloPosicion, indicePosicion, cortePosicion,
+		chicoCerrado, gordoCerrado, anilloCerrado, indiceCerrado, corteCerrado,
+		chicoAbierto, gordoAbierto, anilloAbierto, indiceAbierto, corteAbierto;
+/* Estas variables son las que vamos a mandar a traves del XBee, como solo se pueden mandar bytes
+ y nuestro numero a enviar es de menos de 1 byte siempre le hacemos la conversion al final*/
+int8_t chicoPosicionMandar, gordoPosicionMandar, anilloPosicionMandar,
+		indicePosicionMandar, cortePosicionMandar;
+unsigned int hextoint(const char *hex);
+uint8_t reescala(int value, int inMin, int inMax, int outMin, int outMax) {
+	return (value - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;
+}
+
+int main() {
+	xbee1.baud(38400);
+	chicoAbierto = 3600;
+	gordoAbierto = 3200;
+	anilloAbierto = 3220;
+	indiceAbierto = 3400;
+	corteAbierto = 3400;
+
+	chicoCerrado = chico_flex.get_raw_value();
+	gordoCerrado = gordo_flex.get_raw_value();
+	anilloCerrado = anillo_flex.get_raw_value();
+	indiceCerrado = indice_flex.get_raw_value();
+	corteCerrado = corte_flex.get_raw_value();
+
+	while (1) {
+
+		//Traducimos el valor analogico de entrada del sensor a grados
+		//con el reescalado y asi obtener la posicion
+		//Estos son los valores que van a ser mandados
+		chicoPosicion = chico_flex.get_raw_value();
+		gordoPosicion = gordo_flex.get_raw_value();
+		anilloPosicion = anillo_flex.get_raw_value();
+		indicePosicion = indice_flex.get_raw_value();
+		cortePosicion = corte_flex.get_raw_value();
+		pc.printf("Valor minimo o maximo indice %d\r\n", indicePosicion);
+		pc.printf("Valor minimo o maximo gordo %d\r\n", gordoPosicion);
+		pc.printf("Valor minimo o maximo  anillo %d\r\n", anilloPosicion);
+		pc.printf("Valor minimo o maximo  chico %d\r\n", chicoPosicion);
+
+		//Abierto
+		if (gordoPosicion > 3200) {
+			gordoAbierto = 3200;
+			gordoPosicion = gordoAbierto;
+		} else if (gordoPosicion < gordoAbierto) {
+			gordoAbierto = gordoPosicion;
+		}
+		if (indicePosicion > 3300) {
+			indiceAbierto = 3300;
+			indicePosicion = indiceAbierto;
+		} else if (indicePosicion > indiceAbierto) {
+			indiceAbierto = indicePosicion;
+		}
+		if (cortePosicion > 3400) {
+
+			corteAbierto = 3400;
+			cortePosicion = corteAbierto;
+		} else if (cortePosicion > corteAbierto) {
+			corteAbierto = cortePosicion;
+		}
+		if (anilloPosicion > 3220) {
+			anilloAbierto = 3220;
+			anilloPosicion = anilloAbierto;
+		} else if (anilloPosicion > anilloAbierto) {
+			anilloAbierto = anilloPosicion;
+		}
+		if (chicoPosicion > 3600) {
+			chicoAbierto = 3600;
+			chicoPosicion = chicoAbierto;
+		} else if (chicoPosicion > chicoAbierto) {
+			chicoAbierto = chicoPosicion;
+		}
+
+		//Cerrado
+		if (gordoPosicion < 2450) {
+			gordoCerrado = 2450;
+			gordoPosicion = gordoCerrado;
+		} else if (gordoPosicion < gordoCerrado) {
+			gordoCerrado = gordoPosicion;
+		}
+		if (indicePosicion < 2500) {
+			indiceCerrado = 2500;
+			indicePosicion = indiceCerrado;
+		} else if (indicePosicion < indiceCerrado) {
+			indiceCerrado = indicePosicion;
+
+		}
+		if (cortePosicion < 2500) {
+			corteCerrado = 2500;
+			cortePosicion = corteCerrado;
+		} else if (cortePosicion < corteCerrado) {
+			corteCerrado = cortePosicion;
+		}
+		if (anilloPosicion < 2360) {
+			anilloCerrado = 2360;
+			anilloPosicion = anilloCerrado;
+		} else if (anilloPosicion < anilloCerrado) {
+			anilloCerrado = anilloPosicion;
+		}
+		if (chicoPosicion < 2450) {
+			chicoCerrado = 2450;
+			chicoPosicion = chicoCerrado;
+		} else if (chicoPosicion < chicoCerrado) {
+			chicoCerrado = chicoPosicion;
+		}
+		//Cerrado significa que esta sin fuerza y abierto forzado
+		chicoPosicionMandar = reescala(chicoPosicion, chicoCerrado,
+				chicoAbierto, -10, 90);
+		gordoPosicionMandar = reescala(gordoPosicion, gordoCerrado,
+				gordoAbierto, -10, 90);
+		anilloPosicionMandar = reescala(anilloPosicion, anilloCerrado,
+				anilloAbierto, -25, 90);
+		indicePosicionMandar = reescala(indicePosicion, indiceCerrado,
+				indiceAbierto, -35, 90);
+		cortePosicionMandar = reescala(cortePosicion, corteCerrado,
+				corteAbierto, -20, 90);
+		pc.printf("%d", cortePosicionMandar);
+
+		xbee1.printf("%c%c%c%c%c%c%c", 0x7E, chicoPosicionMandar,
+				gordoPosicionMandar, anilloPosicionMandar, indicePosicionMandar,
+				cortePosicionMandar, 0x0D);
+		pc.printf("%c,%d,%c", 0x7E, chicoPosicionMandar, 0x0D);
+
+		wait_ms(30);
+
+	}
+}