با سلام.
من می خواستم سنسور مغناطیس خودم رو کالیبره کنم. برنامه من باید جوری باشه که شامل سه قسمت زیر هستش:
1: void setup{}
2: تو این قسمت می خوام دستورات خاصی رو که برای کالیبره دارم رو به مدت مثلا 1 دقیقه انجام بده و خروجی ها که همان آفست ها هستن رو بدست بیاره که بعد تو قسمت بعد ازشون استفاده کنم
3: این قسمت بیام و از داده های قسمت قبلی که به دست اومدن استفاده کنم. و برنامه اجرا بشه
هدف من اینه که قسمت دوم در مدت زمان معینی انجام بشه. احتمالا باید از دستور millis استفاده کنم ولی نمیشه. میشه من رو راهنمایی کنین؟
برنامه مورد نظر رو هم برای شما attach کردم
ممنون
#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;
const unsigned long period = 1 * 60000L; // 1 minutes
//unsigned long timelastchanged;
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 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;
if(changed)
unsigned long timeLastChange = millis(); //Reset timeout counter
if(millis() > 5000 && millis() - timeLastChange > period) //If the timeout has been reached, exit calibration
exitCalMode();
}
void exitCalMode(){
//Calculate offsets
offX = (maxX + minX)/2;
offY = (maxY + minY)/2;
x_scale = 1.0/(maxX - minX);
y_scale = 1.0/(maxY - minY);
compass.setOffset(offX,offY)
Serial.print("offX=");
Serial.print(offX);
Serial.print(" ");
Serial.print("offy=");
Serial.print(offY);
Serial.println(" ");
}
دستورات بالا برای قسمت دوم برنامه هستش. ولی خطایی بصورت زیر نمایش داده میشه: همچنین نمی تونم نمایش کدهای serial.prion رو ببینم. می خوام تغییرات max , min ها رو تا لحظه ست شدن نهایی ببینم.
timelastchanged was not decleare in this scope