Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: flex_sensor mbed
Diff: gloveSensorSend.cpp
- Revision:
- 0:17ebf84f093c
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);
+
+ }
+}