نقل قول نوشته اصلی توسط آزیتا نمایش پست ها
lممنونم از لطفتون
من تمام کد رو براتون attach کردم. من چندین مرتبه چشمک زن رو مطالعه کردم. فهمیدم ، ولی برای اجراش تو کد خودم به مشکل بر می خورم. نمی دونم دقیقا چیکارش کنم؟
کد زیر رو تست کنید

کد:
/*
  Calibrate HMC5883L. Output for HMC5883L_calibrate_processing.pde
  Read more: http://www.jarzebski.pl/arduino/czujniki-i-sensory/3-osiowy-magnetometr-hmc5883l.html
  GIT: https://github.com/jarzebski/Arduino-HMC5883L
  Web: http://www.jarzebski.pl
  (c) 2014 by Korneliusz Jarzebski
*/

#include <Wire.h>
#include <HMC5883L.h>

HMC5883L compass;

int minX = 0;
int maxX = 0;
int minY = 0;
int maxY = 0;
int offX = 0;
int offY = 0;
int x0;
int y0;
const unsigned long period = 1 * 60000L;       // 1 minutes
unsigned long timeLastChange = 0;

void setup()
{
  Serial.begin(9600);

  // Initialize Initialize HMC5883L
  while (!compass.begin())
  {
   delay(500);
  }

  // Set measurement range
  compass.setRange(HMC5883L_RANGE_1_3GA);

  // Set measurement mode
  compass.setMeasurementMode(HMC5883L_CONTINOUS);

  // Set data rate
  compass.setDataRate(HMC5883L_DATARATE_75HZ);

  // Set number of samples averaged
  compass.setSamples(HMC5883L_SAMPLES_8);
}


void exitCalMode(){
  //Calculate offsets
   offX = (maxX + minX)/2;
offY = (maxY + minY)/2;

//int  x_scale = 1.0/(maxX - minX);
//int y_scale = 1.0/(maxY - minY);
  
 compass.setOffset(offX,offY);

 
}


void calibrate(){
  bool changed=false;
  Vector mag = compass.readRaw();

  //  // Determine Min / Max values
 if (mag.XAxis < minX) minX = mag.XAxis;
 changed = true;
  if (mag.XAxis > maxX) maxX = mag.XAxis;
  changed = true;
 if (mag.YAxis < minY) minY = mag.YAxis;
 changed = true;
  if (mag.YAxis > maxY) maxY = mag.YAxis;
  changed = true;
//x0 = (maxX + minX)/2;
//y0 = (maxY + minY)/2;
//  Serial.print(x0);
//   Serial.print("    ");
//    Serial.println(y0);
//    
  unsigned long cuMillis = millis();
  if(changed)
    
    if(cuMillis > 5000 &&  cuMillis -  timeLastChange >   period) //If the timeout has been reached, exit calibration
    {
      timeLastChange = cuMillis;
      exitCalMode();
    }
   
}

void loop(){
  
  calibrate();
  
   Vector norm = compass.readNormalize();
   
Serial.print(" offx = ");
 Serial.print(offX);
 Serial.print("  ");
 Serial.print(" offy = ");
 Serial.print(offY);
 Serial.print("  ");
    
 Serial.print(" Xnorm = ");
 Serial.print(norm.XAxis/10);
 Serial.print("  ");
 Serial.print(" Ynorm = ");
 Serial.print(norm.YAxis/10);
 Serial.print("  ");
 Serial.print(" ZNorm = ");
 Serial.println(norm.ZAxis/10);
    
  
  }