Dependencies:   flex_sensor mbed

Files at this revision

API Documentation at this revision

Comitter:
Ronjea
Date:
Wed Jul 01 08:38:08 2015 +0000
Commit message:
First Program

Changed in this revision

flex_sensor.lib Show annotated file Show diff for this revision Revisions of this file
gloveSensorSend.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 17ebf84f093c flex_sensor.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/flex_sensor.lib	Wed Jul 01 08:38:08 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/s_meika/code/flex_sensor/#689bf33a6c3f
diff -r 000000000000 -r 17ebf84f093c gloveSensorSend.cpp
--- /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);
+
+	}
+}
diff -r 000000000000 -r 17ebf84f093c mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Wed Jul 01 08:38:08 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/7cff1c4259d7
\ No newline at end of file