Go Down

Topic: HMC6352 compass converting degrees to direction problem? (Read 1 time) previous topic - next topic

zhirantaha

hello everyone
i want to covert to the value of the degree to direction
Code: [Select]
//All this does is read the heading from HMC6352 and spit it out via serial

#include <Wire.h>
int HMC6352SlaveAddress = 0x42;
int HMC6352ReadAddress = 0x41; //"A" in hex, A command is:

int headingValue;

void setup(){
  // "The Wire library uses 7 bit addresses throughout.
  //If you have a datasheet or sample code that uses 8 bit address,
  //you'll want to drop the low bit (i.e. shift the value one bit to the right),
  //yielding an address between 0 and 127."
  HMC6352SlaveAddress = HMC6352SlaveAddress >> 1; // I know 0x42 is less than 127, but this is still required

  Serial.begin(9600);
  Wire.begin();
}

void loop(){
  //"Get Data. Compensate and Calculate New Heading"
  Wire.beginTransmission(HMC6352SlaveAddress);
  Wire.write(HMC6352ReadAddress);              // The "Get Data" command
  Wire.endTransmission();

  //time delays required by HMC6352 upon receipt of the command
  //Get Data. Compensate and Calculate New Heading : 6ms
  delay(6);

  Wire.requestFrom(HMC6352SlaveAddress, 2); //get the two data bytes, MSB and LSB

  //"The heading output data will be the value in tenths of degrees
  //from zero to 3599 and provided in binary format over the two bytes."
  byte MSB = Wire.read();
  byte LSB = Wire.read();

  int headingSum = (MSB << 8) + LSB; //(MSB / LSB sum)
  headingSum = headingSum / 10;
int value = headingSum ;
Serial.print(headingSum);

  if (value > 68 || value < 112) {
    Serial.println("E");
  }
   

  delay(500);
}

but the result are wrong  the if statement doesn't work
any one can help me?
thanks for replaying

HazardsMind

My GitHub:
https://github.com/AndrewMascolo?tab=repositories


Chaul

if (value > 68 || value < 112)
looks like a statement that is always true to me..
how about
if (value > 68 && value < 112)

HazardsMind

My GitHub:
https://github.com/AndrewMascolo?tab=repositories

zhirantaha


zhirantaha

thanks it is workings :)
Code: [Select]
107E
107E
106E
106E
106E
100E
86E
69E
62503726208103336506377E
88E
94E
101E
103E
104E
112124135134134133134132133133132133132132134132132132132132132132132132132135

HazardsMind

Working?
Quote
107E
107E
106E
106E
106E
100E
86E
69E
62503726208103336506377E   
88E
94E
101E
103E
104E
112124135134134133134132133133132133132132134132132132132132132132132132132135

What changed, the &&?
My GitHub:
https://github.com/AndrewMascolo?tab=repositories

zhirantaha

Code: [Select]
if (value > 68 && value < 112) {
    Serial.println("E");
  }
    if (value > 23 && value < 67) {
    Serial.println("NE");
  }
   if (value > 338 && value < 22) {
    Serial.println("N");
  }
   if (value > 293 && value < 337) {
    Serial.println("NW");
  }
   if (value > 248 && value < 292) {
    Serial.println("W");
  }
   if (value > 202 && value < 247) {
    Serial.println("SW");
  }
   if (value > 158 && value < 201) {
    Serial.println("S");
  }
   if (value > 113 && value < 157) {
    Serial.println("SE");
  }

And i get
Code: [Select]
SE
SE
SE
SE
E
E
E
E
E
E
NE
NE
NE
NE
NW

HazardsMind

Ok Great.

How about a challenge, make it so that it only shows one direction at a time, until the direction is changed. Think you can do it?
My GitHub:
https://github.com/AndrewMascolo?tab=repositories

zhirantaha


HazardsMind

You get this
Quote
SE
SE
SE
SE
E
E
E
E
E
E
NE
NE
NE
NE
NW

make it so that you only get
Quote
SE
E
NE
NW

You don't have to, its your code, you can do whatever you want. Its just a suggestion to try.
My GitHub:
https://github.com/AndrewMascolo?tab=repositories

zhirantaha


robtillaart

you might like this thread - http://arduino.cc/forum/index.php/topic,94507.0.html - to convert degrees to direction
Rob Tillaart

Nederlandse sectie - http://arduino.cc/forum/index.php/board,77.0.html -
(Please do not PM for private consultancy)

Go Up