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
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy