Проблема при запуске LSM303 Compass и Neo 6M GPS одновременно - PullRequest
0 голосов
/ 02 мая 2020

Компас и 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);
}
...