This program introduces attaching a digital compass (HMC5883L) to the GR-COTTON board in order to determine orientation.

This project and description are still under development! The sample program can read the sensor’s values, but cannot yet calculate orientation.


You will need a GR-COTTON board, a USB cable (Micro B type), and an HMC5883L module.

You will need to install a pin socket on GR-COTTON and a pin header on the HMC5883L module.

The pin socket can be purchased from the Akizuki Denshi website.

Connect the HMC5883L module to GR-COTTON as shown in the photo to the right.

Make sure the white jumper on the reverse side of GR-COTTON is moved to the “3V3 USB” side. If it is set to the BATT side, remove and reinsert it into the USB side.

Displaying Digital Compass Reading on Serial Monitor

This sample programs the serial monitor to display readings taken every half-second by the digital compass.

#include <arduino.h>
#include <Wire.h>
#define HMC5883L_ADDRESS 0x1E //7bit ADDRESS
void setup() 
  //Initialize Serial and I2C communications
  //Put the HMC5883 IC into the correct operating mode
  Wire.write(0x02); //select mode register
  Wire.write(0x00); //continuous measurement mode
void loop() 
  int x,y,z; //triple axis data
  //set address where to begin reading data
  Wire.write(0x03); //select register 3, X MSB register
 //Read data from each axis, 2 registers per axis
  Wire.requestFrom(HMC5883L_ADDRESS, 6);
  if(6  < = Wire.available()){
    x = Wire.read() << 8;  x |= Wire.read();
    z = Wire.read() << 8;  z |= Wire.read();
    y = Wire.read() << 8;  y |= Wire.read();
  //Print out values of each axis
  Serial.print("x: ");
  Serial.print("  y: ");
  Serial.print("  z: ");