Paso 6: código de
La forma más rápida de empezar es usando construido en boceto analógico pot que viene con Arduino. Te voy a mostrar el código que escribí, pero necesitarás modificar para sus propias necesidades. Mostrar cómo los valores de la escala y le da una plantilla buena aunque.Este primer bosquejo utiliza valores codificado para la olla. Es decir, vi Qué salida de Arduino para las posiciones max y min de la olla y los utiliza para averiguar cuánto el dedo ha pasado:
/*
AnalogReadSerial
Lee un pin analógico de entrada en 0, imprime el resultado en el monitor serie.
Conecte la patilla central del potenciómetro al pin A0 y la exterior pins a + 5V y la tierra.
Este ejemplo de código es de dominio público.
*/
flotador analog0;
flotador analog1;
flotador analog2;
flotador analog3;
Float analog0_close;
Float analog1_close;
Float analog2_close;
Float analog3_close;
Float analog0_open;
Float analog1_open;
Float analog2_open;
Float analog3_open;
la rutina de instalación se ejecuta una vez al presionar reset:
void setup() {}
inicializar la comunicación serial a 9600 bits por segundo:
Serial.Begin(9600);
Serial.println ("codificado con max y min);
}
una y otra vez funciona para siempre la rutina bucle:
void loop() {}
analog0 = analogRead(A0);
Analog1 = analogRead(A1);
Analog2 = analogRead(A2);
Analog3 = analogRead(A3);
Escala de los valores a un rango de [0,1]
Float scaled_thumb = (analog0 - 854.00) /(920.00-854.00);
Float scaled_point = (analog1 - 860.00) /(923.00-860.00);
Float scaled_middle = (analog2 - 862.00) /(913.00-862.00);
Float scaled_ring = (analog3 - 848.00) /(902.00-848.00);
Si (scaled_thumb < 0.00) {}
scaled_thumb = 0.00;
}
Si (scaled_point < 0.00) {}
scaled_point = 0.00;
}
Si (scaled_middle < 0.00) {}
scaled_middle = 0.00;
}
Si (scaled_ring < 0.00) {}
scaled_ring = 0.00;
}
Serial.Print ("pulgar:");
Serial.Print(scaled_thumb);
Serial.Print ("punto:");
Serial.Print(scaled_point);
Serial.Print ("media:");
Serial.Print(scaled_middle);
Serial.Print ("anillo:");
Serial.println(scaled_ring);
Serial.Print(scaled_point);
Delay(1); retardo entre lecturas para la estabilidad. Utilícelo para la depuración
}
Aquí está otra versión que escribí que trata de calibrar la posición max y min al principio. Encontré que esto no funciona tan bien debido a la flexibilidad de mi guante.
/*
AnalogReadSerial
Lee un pin analógico de entrada en 0, imprime el resultado en el monitor serie.
Conecte la patilla central del potenciómetro al pin A0 y la exterior pins a + 5V y la tierra.
Este ejemplo de código es de dominio público.
*/
flotador analog0;
flotador analog1;
flotador analog2;
flotador analog3;
Float analog0_close;
Float analog1_close;
Float analog2_close;
Float analog3_close;
Float analog0_open;
Float analog1_open;
Float analog2_open;
Float analog3_open;
la rutina de instalación se ejecuta una vez al presionar reset:
void setup() {}
inicializar la comunicación serial a 9600 bits por segundo:
Serial.Begin(9600);
Serial.println("calibrating...");
Serial.println ("mano abierta.");
Delay(2000);
analog0 = analogRead(A0);
Analog1 = analogRead(A1);
Analog2 = analogRead(A2);
Analog3 = analogRead(A3);
analog0_open = analog0;
analog1_open = analog1;
analog2_open = analog2;
analog3_open = analog3;
Serial.Print ("adquirido:");
Serial.Print(analog0_open);
Serial.Print("");
Serial.Print(analog1_open);
Serial.Print("");
Serial.Print(analog2_open);
Serial.Print("");
Serial.println(analog3_open);
Serial.println ("estrecha la mano");
Delay(2000);
analog0 = analogRead(A0);
Analog1 = analogRead(A1);
Analog2 = analogRead(A2);
Analog3 = analogRead(A3);
analog0_close = analog0;
analog1_close = analog1;
analog2_close = analog2;
analog3_close = analog3;
Serial.Print ("adquirido:");
Serial.Print(analog0_close);
Serial.Print("");
Serial.Print(analog1_close);
Serial.Print("");
Serial.Print(analog2_close);
Serial.Print("");
Serial.println(analog3_close);
Serial.println ("calibración completa.");
Serial.println("Running...");
Delay(2000);
}
una y otra vez funciona para siempre la rutina bucle:
void loop() {}
analog0 = analogRead(A0);
Analog1 = analogRead(A1);
Analog2 = analogRead(A2);
Analog3 = analogRead(A3);
imprimir el valor de leer:
Serial.Print ("pulgar:");
Serial.Print(analog0);
Serial.Print ("punto:");
Serial.Print(Analog1);
Serial.Print ("media:");
Serial.Print(Analog2);
Serial.Print ("anillo:");
Serial.println(Analog3);
Escala de los valores a un rango de [0,1]
Float scaled_thumb = (analog0 - analog0_open) / (analog0_close - analog0_open);
Float scaled_point = (analog1 - analog1_open) / (analog1_close - analog1_open);
Float scaled_middle = (analog2 - analog2_open) / (analog2_close - analog2_open);
Float scaled_ring = (analog3 - analog3_open) / (analog3_close - analog3_open);
Serial.Print ("pulgar:");
Serial.Print(scaled_thumb);
Serial.Print ("punto:");
Serial.Print(scaled_point);
Serial.Print ("media:");
Serial.Print(scaled_middle);
Serial.Print ("anillo:");
Serial.println(scaled_ring);
Delay(1); retardo entre lecturas para la estabilidad
}