Dependencies: flex_sensor mbed
Revision 0:17ebf84f093c, committed 2015-07-01
- Comitter:
- Ronjea
- Date:
- Wed Jul 01 08:38:08 2015 +0000
- Commit message:
- First Program
Changed in this revision
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