两个返回相同值的 Arduino 类实例

Two Arduino class instances returning same values

本文关键字:Arduino 实例 两个 返回      更新时间:2023-10-16

我正在为 Uno 编写我的第一个代码,但在使用库时遇到了问题。 我创建了 GPSLocation 类(loc1 和 loc2)的两个实例来存储两个位置的纬度和隆。 当我为它们赋值,然后立即调用它们时,两个实例都持有相同的值,即我设置值的最后一个对象的值。 我已经看了几个小时了,看不出我做错了什么。

我的代码如下。任何帮助都会很棒。

Test.ino

void setup() {
  Serial.begin(115200);
}
void loop() {
    GpsLocation loc1;
    loc1.setLat(-12.3456);
    loc1.setLon(34.4567);
    GpsLocation loc2;
    loc2.setLat(-78.9123);
    loc2.setLon(187.6325);
    delay(1000);
    Serial.print("Loc1: ");
    Serial.print(loc1.getLat(), 4);
    Serial.print(", ");
    Serial.print(loc1.getLon(), 4);
    Serial.print("n");
    Serial.print("Loc2: ");
    Serial.print(loc2.getLat(), 4);
    Serial.print(", ");
    Serial.print(loc2.getLon(), 4);
    Serial.print("n");
}

GPSLocation.h

#ifndef GpsLocation_h
#define GpsLocation_h
#include "Arduino.h"
class GpsLocation
{
  public:
   GpsLocation();
   void setLat(float lat);
   void setLon(float lon);
   float getLat();
   float getLon();
};
#endif

全球定位系统.cpp

#include "Arduino.h"
#include "GpsLocation.h"
float latitude = 0.0;
float longitude = 0.0;
GpsLocation::GpsLocation(){}
void GpsLocation::setLat(float lat)
{
    latitude = lat;
}
void GpsLocation::setLon(float lon)
{
    longitude = lon;
}
float GpsLocation::getLat()
{
    return latitude;
}
float GpsLocation::getLon()
{
    return longitude;
}

这是串行监视器返回的内容

Loc1: -78.9123, 187.6325
Loc2: -78.9123, 187.6325

我更新了我的GPSLocation类,如下所示,解决了我的问题。 谢谢大家。

GPSLocation.h

#ifndef GpsLocation_h
#define GpsLocation_h
#include "Arduino.h"
class GpsLocation
{
  public:
   float latitude;
   float longitude;
};
#endif

全球定位系统.cpp

#include "Arduino.h"
#include "GpsLocation.h"

设置和获取 Test.ino,如下所示

loc1.latitude = -12.3456;
Serial.print(loc1.latitude, 4);

初始代码的问题在于您已将变量定义为全局变量(在全局范围内),并且两个实例都可以访问它们,因此从任何实例应用于它们的最后一个值都会影响并且所有实例都可以访问。

通常,应避免使用全局变量,因为这被认为是一种不好的做法。

通过使变量成为非静态类成员,实际上使它们成为实例的"部分"。这样,从某种意义上说,每个Arduino实例都有自己的变量副本,您可以单独应用值。

更新:为了保留封装,最好将变量声明为私有,并通过 setter 和 getter 方法对它们进行访问。在维基上查看有关该概念的更多信息。