簡體   English   中英

我應該使用什么變量類型來存儲Arduino引腳狀態?

[英]What variable type should I use to store an Arduino pin state?

Arduino文檔為數字I / O引腳定義了常量HIGHLOW ,但未指定它們的內容。 因此,如果我想在變量中存儲引腳狀態,變量應該是什么類型? 邏輯假設在int變量中是10 ,或者在bool可能是truefalse ,但我無法在任何地方找到這個。

digitalRead() (返回HIGHLOW )的文檔中,值存儲在int ,因此使用int似乎是一個安全的賭注。

函數digitalWrite()將引腳狀態( HIGHLOW )作為參數,並從Arduino中搜索GitHub存儲庫以獲取該函數的定義,有三種不同的定義:

void digitalWrite(uint32_t, uint32_t);
void digitalWrite(uint8_t, uint8_t);
void digitalWrite(pin_size_t, PinStatus);

PinStatus是枚舉的地方:

typedef enum {
  LOW     = 0,
  HIGH    = 1,
  CHANGE  = 2,
  FALLING = 3,
  RISING  = 4,
} PinStatus;

HIGHLOW總是定義為10 ,它們絕對可以存儲在int中(並且可以轉換為這三種類型)

根據這篇文章,您似乎可以使用整數作為存儲來驅動digitalWrite而不是HIGH和LOW: http//forum.arduino.cc/index.php? topic = 111711.0

- 我沒有測試過,所以請在接受前驗證。

一種看待它的方法是Arduino人發明了HIGHLOW枚舉器(宏?)來隱藏這樣一個事實,即不太可能,處理器不會使用1表示HIGH而0表示LOW 如果你想編寫可移植的,面向未來的代碼,那么你應該堅持使用HIGHLOW

另一種看待它的方法是你(可能)並不真正關心實際的引腳狀態是什么; 你關心它意味着什么:按下按鈕,運動傳感器檢測到某人,控制桿已降低等等。你可以將意義存儲在任何對你有意義的形式,如bool ,並在你的概念類型和無論你越過邊界的引腳狀態:

bool button_pressed = digitalRead(button_pin) == LOW;
...
digitalWrite(led_pin, button_pressed ? HIGH : LOW);

不要過分擔心這里的額外代碼,因為如果所有內容都具有“明顯的”值和類型,編譯器將會對其進行優化。

然后,這是一個嵌入式系統,其中通用性通常是尺寸和速度的次要問題。 使用嵌入式系統,您通常可以確切地知道您要編寫的硬件。 如果你需要從中獲得所有性能,那么你可能不得不放棄使用漂亮的digitalRead / digitalWrite API並直接使用處理器的寄存器。 那也沒關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM