2015-03-13 44 views
2

我正在爲Uno編寫我的第一個代碼,並且遇到了使用庫的問題。我創建了兩個GPSLocation類(loc1和loc2)的實例來存儲兩個位置的lat和lon。當我給它們賦值時,立即調用它們,兩個實例保持相同的值,這些值是我設置值的最後一個對象。我一直在看這個小時,看不到我做錯了什麼。兩個返回相同值的Arduino類實例

我的代碼如下。任何幫助都會很棒。

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 

GPSLocation.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; 
} 

這是WHA t串行監視器返回

Loc1: -78.9123, 187.6325 
Loc2: -78.9123, 187.6325 
+4

製作'GpsLocation'的'latitude'和'longitude'成員。 – user657267 2015-03-13 07:01:13

+2

是的,看起來像你的經度和緯度被定義爲全局變量 - 它們沒有在GPSLocation類中定義 - 因此只有它們的一個副本存在。 – ThisHandleNotInUse 2015-03-13 07:09:14

回答

0

我更新了我的GPSLocation類,如下解決了我的問題。多謝你們。

GPSLocation.h

#ifndef GpsLocation_h 
#define GpsLocation_h 

#include "Arduino.h" 

class GpsLocation 
{ 
    public: 
    float latitude; 
    float longitude; 
}; 

#endif 

GPSLocation.cpp

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

設置和越來越Test.ino如下

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

你應該接受你的回答,表明你的問題已經解決。 – Erik 2015-05-01 22:10:16

0

初始代碼的問題在於,您已將變量定義爲全局變量(在全局範圍內),並且這兩個實例都可以訪問這些變量,因此從任何實例應用到它們的最後一個值都會影響並可供所有實例訪問。

一般情況下,你應該避免使用全局變量,因爲它被認爲是不好的做法。

通過使變量非靜態類成員,實際上你讓他們你的情況下的「零件」。這樣,每個Arduino實例在某種意義上都有自己的變量副本,您可以分別應用值。

UPDATE:爲了維護封裝,也更好地聲明變量爲私有,並通過setter和getter方法適用於他們的訪問。關於wiki的更多概念請看看。

相關問題