[英]What variable type should I use to store an Arduino pin state?
Arduino文檔為數字I / O引腳定義了常量HIGH
和LOW
,但未指定它們的內容。 因此,如果我想在變量中存儲引腳狀態,變量應該是什么類型? 邏輯假設在int
變量中是1
和0
,或者在bool
可能是true
和false
,但我無法在任何地方找到這個。
從digitalRead()
(返回HIGH
或LOW
)的文檔中,值存儲在int
,因此使用int
似乎是一個安全的賭注。
函數digitalWrite()
將引腳狀態( HIGH
或LOW
)作為參數,並從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;
但HIGH
和LOW
總是定義為1
和0
,它們絕對可以存儲在int中(並且可以轉換為這三種類型)
根據這篇文章,您似乎可以使用整數作為存儲來驅動digitalWrite而不是HIGH和LOW: http : //forum.arduino.cc/index.php? topic = 111711.0
- 我沒有測試過,所以請在接受前驗證。
一種看待它的方法是Arduino人發明了HIGH
和LOW
枚舉器(宏?)來隱藏這樣一個事實,即不太可能,處理器不會使用1表示HIGH
而0表示LOW
。 如果你想編寫可移植的,面向未來的代碼,那么你應該堅持使用HIGH
和LOW
。
另一種看待它的方法是你(可能)並不真正關心實際的引腳狀態是什么; 你關心它意味着什么:按下按鈕,運動傳感器檢測到某人,控制桿已降低等等。你可以將意義存儲在任何對你有意義的形式,如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.