
نوشته اصلی توسط
آزیتا
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);
}