2013-04-16 61 views
3

每次我運行下面的代碼而不保存時,它就會編譯。當我確實保存它時,出現以下錯誤:保存後不會編譯Arduino代碼

C:\ Program Files(x86)\ Arduino \ arduino-1.0.4 \ hardware \ arduino \ cores \ arduino/main.cpp:11:undefined reference爲'設置 '

C:\程序文件(x86)\的Arduino \ Arduino的1.0.4 \硬件\ Arduino的\芯\阿爾杜伊諾/ main.cpp中:14:未定義參考`循環'

我已經嘗試刪除我的Arduino文件夾C:\Program Files (x86),下載它並更新驅動程序。

其他程序似乎運行良好。我該如何解決它,有什麼不對?

#define m_pin1 13 
#define m_pin2 12 
#define sensorPin 0 

int val1; 
int val2; 
int avg; 
int threshold; 
int flipTimer = 100; 

void setup(){ 
    pinMode(m_pin1, OUTPUT); 
    pinMode(m_pin2, OUTPUT); 
    pinMode(sensorPin, INPUT); 
    Serial.begin(9600); 
    Serial.println("Sensor 1 Average:"); 
} 

void loop(){ 
    moisture_val(); 
} 

int moisture_val(){ 
    setSensorPolarity(true); 
    delay(flipTimer); 
    int val1 = analogRead(sensorPin); 
    delay(flipTimer); 
    setSensorPolarity(false); 
    delay(flipTimer); 
    int avg = reportLevels(val1,val2); 
    int val2 = 1023 - analogRead(sensorPin); 
} 

void setSensorPolarity(boolean flip){ 
    if(flip){ 
     digitalWrite(m_pin1, HIGH); 
     digitalWrite(m_pin2, LOW); 
    } 
    else{ 
     digitalWrite(m_pin1, LOW); 
     digitalWrite(m_pin2, HIGH); 
    } 
} 

int reportLevels(int val1,int val2){ 
    int avg = (val1 + val2)/2; 
    return(avg); 
} 
+0

我假設你選擇了正確的棋盤,程序員等?看起來像一個長鏡頭,但Arduino編譯器可以給出時髦的消息... –

+0

是的,我確定一切都是正確的。我甚至刪除了驅動程序並重新安裝了它。我認爲代碼沒有問題? – Aaron

+0

你對這個文件有些奇怪的名字嗎?因爲它看起來沒有鏈接到你的文件。或者,我應該說,當它執行鏈接時,它找不到在文件中清晰定義的setup()和loop()函數。 – bobwki

回答

3

IDE希望在具有相同名稱的文件夾中找到該文件。看看它們應該如何工作的文件和文件夾的結構。一旦名稱匹配,問題就會消失。如果不是這樣,請將IDE切換爲「詳細」進行編譯。這將允許您找到處理實際C源代碼的臨時文件夾。然後,您可以查看實際編譯和鏈接的程序。這在找出真正的問題方面有很長的路要走。

在分析詳細編譯器輸出時,您可能還想查看Arduino build process的詳細信息。

-1

您必須不選擇外部編輯器。 說明:當它選擇你的頁面arduino是灰色的,你可以編寫程序。 所以,當你想從ardublock轉到arduino時,你的代碼不被接受,這是正常的,因爲ardublock不是arduino的外部編輯器。 取消選擇,您的arduino頁面開始變白,您可以從ardublock編寫代碼和傳送代碼。我有同樣的問題,我使用它,它運行..有趣:)

2

arduino具有非常具體的要求,爲您建立的草圖的名稱。如果您將其保存爲「主」或「主」,則需要將其另存爲其他名稱。

+1

調用程序'new'也會觸發此錯誤。 – hlovdal

+0

+1,在我的項目中,使用裏面的setup&loop函數命名核心.ino文件,其內部的文件夾「main」引起了這個問題。請注意,這隻發生在構建於Windows 8.1上的我的Mac(OSX 10.10.5)上,其中包含名爲「main」的文件夾和.i​​no文件,沒有問題 –

2

我發現問題: INO文件名不能與類名相同。

我有三個文件: DB1280.ino DB1280.cpp DB1280.h 編譯錯誤出來了。 所以我改變了DB1280.ino的名字。如SimpleDB1280.ino。錯誤消失了。

+0

確切地說,如果我理解正確,那麼.ino文件必須ahve與包含它的文件夾同名,最終其他庫文件(.h,.cpp)不能具有相同的名稱(不管擴展名是否相同) – swK

0

同樣的問題在這裏。通過刪除項目名稱中的空白字符來修復它。

+1

請提供有關哪個特殊字符已刪除並修復的詳細信息。這個答案太短,不太可能對其他人有幫助。 –

0

簡化項目名稱

我已經改變使用保存我的項目名稱爲my-project。這導致了你發佈的錯誤。

爲了解決這個問題,簡化了項目名稱,從項目名稱中排除了特殊字符如-