He estado tratando de obtener un BMA180 (ya estoy en mi segundo) para enviar un flujo continuo de datos de aceleración a través de un puerto serie (eventualmente bluetooth, pero eso es un problema para un día diferente). He mirado y tratado de emular numerosos ejemplos y constantemente me he encontrado con el problema de los datos que vienen en "ajustes y comienzos". Un paquete, espere uno o dos segundos, algunos paquetes más, etc. etc. Por lo general, esto termina cuando los datos se detienen todos juntos. Después de 5, 10, 50 trozos.
Mi cableado es como se muestra aquí pero tengo VIO desconectado. Cuando VIO está vinculado a 3.3V, mi salida es todos 0. :
Esteesmicódigo,queestáadaptadodevariasotrasfuentes:
#include<Wire.h>#defineDEVICE((byte)0x40)#defineDATA_X00x02#defineAXIS_SHIFT2#defineDELAY_RATE500intcounter=0;staticvoidreadFrom(byteaddress,bytenum,byte*buff){Wire.beginTransmission(DEVICE);Wire.write(address);Wire.endTransmission();Wire.requestFrom(DEVICE,num);num=Wire.available();while(num-->0){*(buff++)=Wire.read();//receiveabyte}}voidsetup(){Wire.begin();//joini2cbus(addressoptionalformaster)Serial.begin(115200);//startserialforoutputSerial.flush();delay(15);}voidloop(){digitalWrite(13,HIGH);intaxis[5]={0x0101,0,0,0,0};readFrom(DATA_X0,6,(byte*)(axis+1));axis[1]=axis[1];axis[2]=axis[2];axis[3]=axis[3];axis[4]=axis[1]+axis[2]+axis[3];Serial.println("");
Serial.println(axis[1]);
Serial.println(axis[2]);
Serial.println(axis[3]);
Serial.println(axis[4]);
counter++;
delay(100);
digitalWrite(13, LOW);
delay(100);
}
Esto es lo que recibo al monitor en serie, en extraños esporádicos empujes:
-879
321
17077
16519
-411
345
16761
16695
249
0
0
249
........ etc ...... Sospecho que el fragmento 249/0/0/249 es la temperatura porque subirá y bajará un poco, aunque la aplicación de la lámpara de mi escritorio hizo que todos los datos cesaran. Estoy desconcertado El LED 'L' en el arduino parpadea cuando los paquetes se expulsan, así que creo que no es un problema de puerto serie. Realmente apreciaría cualquier idea aquí.