題:
如何在模擬引腳上循環?
hoosierEE
2014-05-21 20:51:17 UTC
view on stackexchange narkive permalink

我想針對(int i = 0; i < 4; i ++){AnalogRead(i);}

這似乎可行,但以下各項無效:

  for(int i = 0; i < 4; i ++){pinMode(i,INPUT); pinMode(i + 4,OUTPUT); //應該使模擬引腳(i + 4)成為輸出digitalWrite(i + 4,LOW);相反,似乎將 digitalWrite(i + 4,LOW); 尋址的引腳視為數字引腳之一。  

我真的想在模擬引腳上循環時真的必須明確指定A0,A1,A2 ...嗎?

很抱歉要復活該線程,但是我想指出上面提供的答案的利弊。克雷格的核掩體最防彈;即使有非連續的映射,它也能正常工作。Geometrikal的紙飛機是最不防彈的,因為一旦您移動到另一個板上,他/她的魔幻數字就會失效(因為沒有關於板之間映射不同的假設)。公平地說,他們清楚地表明,他們正在提供“寫BrettAM答案的另一種方式”,因此也許他們根本沒有提出嚴肅的建議。
我喜歡你對不同答案的詩意描述!隱喻是恰當的-但是您可能希望將其用引號括起來,以供非英語母語的讀者閱讀,以突顯您的行為有點誇張:“核掩體”,“紙飛機”等。
BrettAM的瑞士手錶對我來說似乎很合理,因為只有在非連續映射的情況下它才會失敗,據我所知,這種映射仍然純粹是假設性的。 BrettAM的答案最能做到的是,要明確指出以下要點:A0只是一個預定義的常量,該常量與您可以在for循環中合理使用的任何文字類型相同(8位無符號整數)。 A0只是一個數字。到底是幾號?好吧,這取決於而且此外,關係不大。但是您可以指望它是一個數字,您可以自由使用它。
五 答案:
Craig
2014-05-21 23:07:37 UTC
view on stackexchange narkive permalink

是的,當將模擬引腳用於數字I / O時,必須使用A0,A1 ...對其進行尋址。

根據所使用的闆卡,您使用的是A0,A1等。被映射為不同的值(例如,在某些板上看起來A0是18,而在其他板上看起來是14。

用於模擬引腳循環的一種解決方案是:

  static const uint8_t Analog_pins [] = {A0,A1,A2,A3,A4}; //用於inputfor的設置引腳(int i = 0; i < 5; i ++){//或i < = 4 digitalRead(analog_pins [ i]);}  

如果僅通過 analogRead()調用使用模擬引腳,則可以使用0,1,...而不是A0 ,A1,...

根據http://arduino.cc/en/Reference/analogRead,您只能通過數字(例如0、1、2、3等)從模擬引腳讀取數據; “ A0”中的“ A”是可選的。當然,如果您使用“ A”前綴來區分它們,則可能會更清楚,但對於AnalogRead則不是必需的。另一方面,“ digitalWrite(i)”假定“ i”指的是數字引腳。若要將digitalWrite與模擬引腳一起使用,需要包含“ A”前綴。
接得好。我更新了答案。
這是我到目前為止所見過的最便攜式的解決方案,謝謝,這是我現在正在使用的解決方案。
BrettAM
2014-05-26 08:51:19 UTC
view on stackexchange narkive permalink

至少是Uno / Megas / leonardos,所有映射到模擬引腳號的值都是連續的,因此

  for(int i = A0; i < A4; i ++){pinMode( i,輸出); digitalWrite(i,LOW);}  

會將A0,A1,A2和A3設置為OUTPUT,然後設置為LOW。

geometrikal
2014-05-26 18:41:44 UTC
view on stackexchange narkive permalink

引腳14至19是模擬引腳A0至A5。 A0 只是 14 的別名,依此類推。

所以寫BrettM答案的另一種方法:

  for(int i = 14; i < 18 i ++){pinMode(i,OUTPUT); digitalWrite(i,LOW);}  
這並非在所有Arduino板上都適用。並非所有主板都使用14-19。
Tom
2014-05-21 22:57:16 UTC
view on stackexchange narkive permalink

您的第一個循環確實可以正常工作,但是,您可能要在 analogRead(i); 之後添加 delay(1); ,以提供ADC需要一些時間來解決。

您能詳細說明一下第二段代碼要做什麼嗎?從現在看來,將模擬輸入用作數字輸出並沒有什麼意義。

此外,您正在嘗試閱讀在將引腳指定為輸出之後,只需幾行即可輸入引腳的輸入。

請解釋一下您要實現的目標,因此周圍的好人可以為您提供更好的幫助。

LittleRain
2018-02-09 12:03:38 UTC
view on stackexchange narkive permalink

我知道這很舊,但是如果您將鼠標懸停在可視微型計算機中的A0到A7上,它將顯示出真實值,它們只是一個變量(它實際上顯示為14U,但是在尋址時不需要包括U)。克雷格(Craig)說的是錯誤的,不必用A0,A1等來解決。

A0 = 14A1 = 15..A7 = 21

  //將將(int i = 1; i < 22; i ++)的所有數字和模擬引腳都設置為LOW(0),{digitalWrite(i,LOW);} //將所有模擬引腳都設置為LOW(0)以便(int i = 14; i < 22; i ++){digitalWrite(i,LOW);} //將所有模擬引腳設置為LOW(0),用於(int i = A0; i < A7 + 1; i ++){digitalWrite(i, LOW);}  

最後一個for循環基本上是說i = 1(A0),停在21(A7)。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...