SOGO論壇
  登入   註冊   找回密碼
查看: 4374|回覆: 2
列印 上一主題 下一主題

[問題求助] arduino腳位宣告的問題? [複製連結]

Rank: 2

狀態︰ 離線
跳轉到指定樓層
1
發表於 2013-3-17 01:48:59 |只看該作者 |倒序瀏覽
小弟最近用arduino UNO寫按鈕控制LED的程式
雖然是完成了 但是有些問題讓我不解

程式:
int led=13;
int buttom=2;
int val=0;
void setup()
  {
   pinMode(buttom,INPUT);
   pinMode(led,OUTPUT);
  }
void loop()
{
  val=digitalRead(butt);
  if(val==HIGH)
     {  
       delay(20);
       digitalWrite(led,LOW);
     }
else
    {
      digitalWrite(led,HIGH);
     }
}
----------------------------------------
1.問題是小弟LED的接腳定義在13 是用
int led=13;

可是小弟又在其他書上看到
#defnie led 13;

請問這兩者有什麼不同嗎?

2.如果今天要將某感測器接至第0腳位
那不就變成
int sensor=0;
int val=0;
兩者不就衝突了嗎?

3.小弟以前學過一點C語言 記得
宣告變數可以不用給數值 如:
int x;
int y;
可是使用arduino寫這樣除錯時會產生錯誤
怎麼會這樣?

小弟是學機械的 程式設計基礎不好
問教授又說不清楚 所以想請各位大大幫忙解答
謝謝
喜歡嗎?分享這篇文章給親朋好友︰
               感謝作者     

Rank: 5Rank: 5

數位軟體勳章

狀態︰ 離線
2
發表於 2013-3-17 10:20:52 |只看該作者
本帖最後由 alphi 於 2013-3-17 21:01 編輯

第一個問題
這兩種方式都可以,不過通常會使用第一組方式
  1. #define LED 13
複製代碼
因為這種方式為Pre-Process ,當編譯器看到
  1. PinMode(LED,Output);
複製代碼
會直接把LED 這個值取代為13,實際上為
  1. PinMode(13,Output);
複製代碼
而且也不占記憶體空間(因為他只是把值取代)

第二種方式功能一樣,但是式動態執行或著看編譯器規則要怎麼定義,但是不管怎樣至少會在Stack中佔2Byte,對於嵌入式系統記憶體都是要很在乎例如
Microchip PIC10F320,RAM:64Byte,Flash: 512Byte.隨便使用就超過限制.如果使用浮點運算更是不行 得用一些方式來處理

另外針對I/O或著內部資源.就算要用變數最好前面加上
  1. const int LED=13;
複製代碼
否則不小心改到值 永遠都查不到原因.當然有step by step trace ,不過要先熟悉工具

第二個問題
  1.   int sensor=0;
  2.   int val=0;
複製代碼
這兩個並不矛盾,例如
  1. 國文成績=60分
  2. 數學成績=60分
複製代碼
只是剛好你的值一樣.但不代表共用與衝突.除非未來您用到指標與union,enum這些就會遇到一些問題
第三個問題
  1. int x;
  2. int y;
複製代碼
一般來說的確C語言可允許變數不給初始值,頂多出現warring[警告],但是在嵌入式系統等編譯器是可以設定警告[Warring]視為錯誤[Error]
不管如何最好任何變數都給初始值最好.因為不同編譯器在處裡這種沒有初始值得變數有不同的做法例如
Keil RealView C compiler for ARM 會根據當時狀況指定值
Microchip XC8 Compiler 會將有給初始值得在某一個
memory block,沒給初始值得放在另一個區塊.在處理上會比較麻煩.所以最好不要相信Compiler 幫你做的動作.自己做最好

最後關於您問題三.應該是Ardunio 把Compiler 警告訊息等級調高吧
失敗只有一種:那就是半途而廢

Rank: 2

狀態︰ 離線
3
發表於 2013-3-18 20:33:25 |只看該作者
專業
雖然有些不是很懂
但是還是謝謝大大解答
請注意︰利用多帳號發表自問自答的業配文置入性行銷廣告者,將直接禁訪或刪除帳號及全部文章!
您需要登錄後才可以回覆 登入 | 註冊


本論壇為非營利自由討論平台,所有個人言論不代表本站立場。文章內容如有涉及侵權,請通知管理人員,將立即刪除相關文章資料。侵權申訴或移除要求:abuse@oursogo.com

GMT+8, 2024-5-10 11:32

© 2004-2024 SOGO論壇 OURSOGO.COM
回頂部