2012-01-24 67 views
3

我正在爲Arduino編寫代碼。它應該做的是:監視Arduino上的6個模擬輸入引腳

它能夠監視6個模擬輸入,如果有任何人的任何活動,通過串行連接發送(其引腳上的活動銷+價值數)。

在串行連接的另一端,其他程序就這個給定的信息決定。

如何最有效地做到這一點?

+0

此外,代碼應該能夠偵聽串行端口的「消息」,告訴什麼引腳應該是高或低。換句話說,監聽串口並寫入串口。兩項任務如何同時工作? – user1165574

+0

我想你已經在這個其他問題已經覆蓋:http://stackoverflow.com/questions/8996675/arduino-code-to-write-and-send-at-the-same-time-simultaneously have not您? –

+0

是的,還沒有得到任何答覆 – user1165574

回答

3

一種解決方案是這樣的:

int analogPin1 = 1; 
    int analogPin2 = 2; 
    int analogPin3 = 3; 
    int analogPin4 = 4; 
    int analogPin5 = 5; 
    int analogPin6 = 6; 

    int val = 0; 
    byte sendAnalog=0;   

    void setup() 
    { 
     Serial.begin(9600); 
    } 

    void loop() 
    { 
    val=analogRead(analogPin1); 
    if(val>0){ 
     Serial.print("1"); 
     sendAnalog=val*0.24926697; 
     Serial.print(sendAnalog,BYTE); 

    } 
    val=analogRead(analogPin2); 
     if(val>0){ 
     Serial.print("2"); 
     sendAnalog=val*0.24926697; 
     Serial.print(sendAnalog,BYTE); 

    } 
val=analogRead(analogPin3); 
    if(val>0){ 
     Serial.print("3"); 
     sendAnalog=val*0.24926697; 
     Serial.print(sendAnalog,BYTE); 

    } 
val=analogRead(analogPin4); 
    if(val>0){ 
     Serial.print("4"); 
     sendAnalog=val*0.24926697; 
     Serial.print(sendAnalog,BYTE); 

    } 

}

AD轉換器正存儲10位的值。 AD轉換器的最大值爲1023([2^10-1])。用於串行通信的模塊發送數據字節,因此您需要從1023縮放到255。等式是(255/1023)* currentAnalogValue(因此它是0.249266 * currentAnalogValue)。在您的計算機應用程序中,您需要反向方程1023/255 * receivedByte來接收原始值。

2

的Arduino和其他設備(我假設這裏PC)之間的通信是最簡單的(也是最容易調試),如果你使用基於文本的界面。例如:

void setup() { 
    Serial.begin(9600); 
} 

void loop() { 
    for (int i = 0; i < 6; i++) { 
     Serial.print(i); 
     Serial.print(":"); 
     Serial.println(analogRead(i)); 
    } 
} 

這將連續地從模擬端口讀取值,並將它們發送(如文本)所示:

0:456 
1:26 
2:0 
3:1023 
4:321 
5:1010 

端口編號從0到5,然後用冒號(:)字符作爲分隔符發送,然後是模擬值(從0到1023)。

這將無限重複,但你只提發送數據,如果有活動。如果您需要更復雜的東西,請擴展您認爲的「活動」(例如,如果模擬值自上次讀取後發生變化,您只想發送數據)。