//More infor at www.lusorobotica.com #include int compassAddress = 0x42 >> 1; // no datasheet diz que o é o 0x42 // mas como a biblioteca wire só utiliza 7 bits // fazemos um shift para ficar com os most significant bits int reading = 0; void setup() { Wire.begin(); Serial.begin(9600); } void loop() { // tarefa 1: fazer ligação com o sensor Wire.beginTransmission(compassAddress); Wire.send('A'); // no datasheet diz k é o comando para pedir o angulo Wire.endTransmission(); // tarefa 2: esperar que os dados sejam processados delay(10); // o datasheet sugere pelo menos 6000 microsegundos // tarefa 3: pedir ao compasso Wire.requestFrom(compassAddress, 2); // pedir dois bytes ao compasso // tarefa 4: receber dados do compasso if(2 <= Wire.available()) // se estiverem disponiveis os 2 bytes { reading = Wire.receive(); // recebe a parte alta apagando o que estava antes reading = reading << 8; // shifta a parte alta para o seu lugar reading += Wire.receive(); // recebe a parte baixa //reading /= 10; // tirar de comentario se pretender receber só em graus em vez de decimas de graus Serial.println(reading); // mostra o valor para a consola } delay(1000); // espera antes de fazer um novo ciclo }