Hola, soy nuevo en el foro de arduino.
Mi proyecto es controlar un globo motorizado con el cuerpo mediante acelerometros. Ya que la placa Genuino 101 tiene integrado un acelerometro es lo que voy a utilizar para dicho proyecto.
En el Monitor Serial me reconoce las variables de las coordenadas de los ejes X e Y.
Initializing IMU device...
a: 0.00 0.00
a: -0.07 -0.02
a: -0.11 -0.22
a: 0.32 -0.01
a: 0.94 0.08
a: 0.76 0.09
a: 0.56 0.18
a: 0.23 0.36
El problema que tengo es que no me manda los datos a los pines 4 y 5 para poder controlarlo mediante estos cambios de coordenadas. Adjunto el codigo. Si alguien tiene alguna idea de como solucionarlo, le estaria agradecido.
#include "CurieIMU.h"
int droite = 4;
int gauche = 5;void setup() {
Serial.begin(9600); // initialize Serial communication
while (!Serial); // wait for the serial port to open// initialize device
Serial.println("Initializing IMU device...");
CurieIMU.begin();// Set the accelerometer range to 2G
CurieIMU.setAccelerometerRange(2);pinMode(droite, OUTPUT);
pinMode(gauche, OUTPUT);
}void loop() {
int axRaw, ayRaw, azRaw; // raw accelerometer values
float ax, ay, az;// read raw accelerometer measurements from device
CurieIMU.readAccelerometer(axRaw, ayRaw, azRaw);// convert the raw accelerometer data to G's
ax = convertRawAcceleration(axRaw);
ay = convertRawAcceleration(ayRaw);
az = convertRawAcceleration(azRaw);// display tab-separated accelerometer x/y/z values
Serial.print("a:\t");
Serial.print(ax);
Serial.print("\t");
Serial.print(ay);Serial.println();
delay(1000);
int orientation = - 1;
String orientationString;int x = CurieIMU.readAccelerometer(X_AXIS);
int y = CurieIMU.readAccelerometer(Y_AXIS);
int z = CurieIMU.readAccelerometer(Z_AXIS);int absX = abs(x);
int absY = abs(y);
int absZ = abs(z);if ( (absZ > absX) && (absZ > absY)) {
if (z > 0) {
orientationString = "up";
orientation = 0;
}
else {
orientationString = "down";
orientation = 1;
}
}
else if ( (absY > absX) && (absY > absZ)) {if (absY > 0.7) {
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
orientation = 2;
}
else {
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
orientation = 3;
}
}
else {if (absX < 0 ) {
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
orientation = 4;
}
else {
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
orientation = 5;
}
}}
float convertRawAcceleration(int aRaw) {
float a = (aRaw * 2.0) / 32768.0;
return a;
}
Muchas gracias de antemano y un saludo.