Компас и GPS работают совершенно независимо друг от друга. Однако, когда я подключу их к одному макету, они не будут показывать точные значения. Я не думаю, что это конфликт библиотеки, потому что это происходит еще до того, как я загружаю код. Я также не думаю, что это проблема с памятью, потому что я могу использовать очень маленький код только для компаса, и он все равно начинает работать, когда я подключаю его к тому же макету, в котором находится GPS. Я попытался перемонтировать его. и, решая проблемы с питанием, я просто не могу понять, почему компас и GPS не будут работать вместе.
#include <TinyGPS++.h>
#include <Wire.h>
#include <LSM303.h>
#include <LiquidCrystal_I2C.h>
#include <Servo.h>
#include <math.h>
void GetCompassHeading();
void GetFinalBearing();
void GetDistance();
void GetLatLon();
LiquidCrystal_I2C lcd(0x27, 16, 2);
//const float pi = 3.14;
//int pos = 90;
LSM303 compass;
TinyGPSPlus gps; // create gps object
//Servo myservo, myservoSteer;
float heading;
double latitude;
double longitude;
float courseTo;
double Distance_M;
float FinalBearing;
static const double DEST_LAT = 38.85314, DEST_LON = -104.77110;
void setup() {
//Serial.begin(9600);
Wire.begin();
compass.init();
compass.enableDefault();
//Serial.begin(57600); // connect serial
Serial1.begin(9600); // connect serial
Serial.println("The GPS Received Signal:");
//gpsSerial.begin(9600); // connect gps sensor
lcd.init();
lcd.backlight();
delay(100);
compass.m_min = (LSM303::vector<int16_t>){ +919, -4362, -1564};
compass.m_max = (LSM303::vector<int16_t>){ +6518, +2173, +4597};
//myservo.attach(9);
//myservo.attach(12);
}
void loop() {
GetCompassHeading();
while(Serial1.available())
{
if(gps.encode(Serial1.read()))
{
GetLatLon();
GetDistance();
GetFinalBearing();
lcd.clear();
lcd.setCursor(0,0);
lcd.print("C_heading ");
lcd.print(heading);
lcd.setCursor(0,1);
lcd.print("G_heading ");
lcd.print(courseTo);
delay(2000);
}
}
}
void GetCompassHeading()
{
compass.read();
delay(110);
heading = compass.heading((LSM303::vector<int>){1,0, 0});
heading = heading - 20;
if (heading < 0)
{
heading = 360 + heading;
}
delay(300);
}
void GetFinalBearing ()
{
courseTo = TinyGPSPlus::courseTo(latitude, longitude, DEST_LAT, DEST_LON);
FinalBearing = courseTo - heading;
}
void GetDistance()
{
Distance_M = TinyGPSPlus::distanceBetween(latitude, longitude, DEST_LAT, DEST_LON);
delay(300);
}
void GetLatLon()
{
latitude = gps.location.lat();
longitude = gps.location.lng();
delay(300);
}